Sadržaj:

Arduino i prekidači s papučicom: 9 koraka
Arduino i prekidači s papučicom: 9 koraka

Video: Arduino i prekidači s papučicom: 9 koraka

Video: Arduino i prekidači s papučicom: 9 koraka
Video: DC 10-55V 60A Motor Speed Controller PWM Reverse Control Switch with LED Display relay | Robojax 2024, Novembar
Anonim
Arduino prekidači i prekidači
Arduino prekidači i prekidači

U ovom članku ispitujemo upotrebu prekidača s gumenim/zakretnim kotačićima u našim Arduino sistemima. Evo nekoliko primjera iz PMD Way -a.

Korak 1:

Image
Image

Za neupućene, svaki prekidač je jedan okomiti segment i mogu se povezati zajedno kako bi oblikovali različite veličine. Pomoću dugmadi možete birati od nula do devet. Dostupne su alternative koje imaju točak koji možete da pomerate palcem umesto dugmadi za povećanje/smanjenje.

Prije dana modernih korisničkih sučelja, ovi su prekidači bili prilično popularna metoda za postavljanje numeričkog unosa podataka. Međutim, oni su i danas dostupni, pa da vidimo kako djeluju i kako ih možemo koristiti. Vrijednost prekidača je dostupna putem binarno kodiranog decimalnog ili pravog decimalnog broja. Razmotrite zadnju stranu prekidača u BCD obliku.

Korak 2:

Image
Image

S lijeve strane imamo zajedničke, zatim kontakte za 1, 2, 4 i 8. Ako na zajednički primijenite mali napon (recimo 5V), vrijednost prekidača može se mjeriti dodavanjem vrijednosti kontakata koji su u VISOKO stanje. Na primjer, ako odaberete 3 - kontakti 1 i 2 bit će na zajedničkom naponu. Vrijednosti između nule i devet mogu se kao takve predstaviti u tabeli.

Korak 3:

Image
Image

Do sada biste trebali shvatiti da bi bilo lako pročitati vrijednost prekidača - i u pravu ste. Možemo spojiti 5V na zajedničke, izlaze na digitalne ulazne pinove naših Arduino ploča, a zatim pomoću digitalRead () odrediti vrijednost svakog izlaza. Na skici koristimo neke osnovne matematike za pretvaranje BCD vrijednosti u decimalni broj. Pa učinimo to sada.

Iz hardverske perspektive, moramo uzeti u obzir još jednu stvar-prekidač na kotaču ponaša se električno poput četiri normalno otvorena tastera. To znači da moramo koristiti otpornike za povlačenje kako bismo imali jasnu razliku između visokog i niskog stanja. Dakle, shema za jedan prekidač je prikazana gore.

Korak 4:

Sada je jednostavno spojiti izlaze označene 1, 2, 4 i 8 na (na primjer) digitalne pinove 8, 9, 10 i 11. Spojite 5V na prekidač ‘C’ točku, a GND na … GND. Zatim moramo imati skicu koja može čitati ulaze i pretvarati BCD izlaz u decimalni. Razmotrite sljedeću skicu:

/ * Koristi SAA1064 numerički štit za prikaz https://www.gravitech.us/7segmentshield.html Koristi serijski monitor ako nemate SAA1064 štit */#uključuje "Wire.h" #define q1 8 #define q2 9 # define q4 10 #define q8 11 void setup () {Serial.begin (9600); Wire.begin (); // pridruživanje i2c sabirnici (adresa opcionalna za master) kašnjenje (500); pinMode (q1, INPUT); // kotačić '1' pinMode (q2, INPUT); // kotačić '2' pinMode (q4, INPUT); // kotačić '4' pinMode (q8, INPUT); // kotačić '8'} void dispSAA1064 (int Count) // šalje cijeli broj 'Count' u Gravitech SAA1064 štit {const int lookup [10] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F}; int Hiljade, stotine, desetke, baza; Wire.beginTransmission (0x38); Wire.write (0); Wire.write (B01000111); Wire.endTransmission (); Wire.beginTransmission (0x38); Wire.write (1); Hiljade = Broj/1000; Stotine = (broj- (hiljade*1000))/100; Desetice = (Broj-((Hiljade*1000)+(Stotine*100)))/10; Baza = Broj-((hiljade*1000)+(stotine*100)+(desetice*10)); Wire.write (traženje [Baza]); Wire.write (pretraživanje [desetke]); Wire.write (traženje [stotine]); Wire.write (traženje [hiljade]); Wire.endTransmission (); kašnjenje (10); } int readSwitch () {int ukupno = 0; if (digitalRead (q1) == HIGH) {ukupno+= 1; } if (digitalRead (q2) == HIGH) {ukupno+= 2; } if (digitalRead (q4) == HIGH) {ukupno+= 4; } if (digitalRead (q8) == HIGH) {ukupno+= 8; } ukupan povrat; } void loop () {dispSAA1064 (readSwitch ()); // šalje vrijednost prekidača na štit za prikaz Serial.println (readSwitch ()); // šalje vrijednost prekidača u okvir serijskog monitora}

Funkcija readSwitch () je ključ. On izračunava vrijednost prekidača dodavanjem numeričkog prikaza svakog izlaza prekidača i vraća ukupan rezultat kao rezultat. Za ovaj primjer koristili smo numerički ekran koji kontrolira NXP SAA1064.

Korak 5:

Image
Image

Funkcija readSwitch () je ključ. On izračunava vrijednost prekidača dodavanjem numeričkog prikaza svakog izlaza prekidača i vraća ukupan rezultat kao rezultat. Za ovaj primjer koristili smo numerički ekran koji kontrolira NXP SAA1064.

Ako ga nemate, u redu je - rezultati se šalju i na serijski monitor. Sada, pogledajmo to na djelu u videu.

Korak 6:

U redu, ne izgleda puno, ali ako vam je potreban numerički unos, štedi mnogo fizičkog prostora i nudi precizan način unosa.

Pa eto ga. Da li biste ih zaista koristili u nekom projektu? Za jednu znamenku - da. Za četiri? Vjerovatno ne-možda bi bilo lakše koristiti 12-cifrenu tastaturu. Postoji ideja…

Korak 7: Više prekidača

Image
Image

Sada ćemo ispitati kako čitati četiri znamenke - i pritom ne potrošiti sve te digitalne pinove. Umjesto toga, mi ćemo koristiti Microchip MCP23017 16-bitni IC proširivač portova koji komunicira putem I2C sabirnice. Ima šesnaest digitalnih ulazno/izlaznih pinova koje možemo koristiti za čitanje statusa svakog prekidača.

Prije nego nastavite, imajte na umu da je za ovaj članak potrebno neko pretpostavljeno znanje - sabirnica I2C (prvi i drugi dio) i MCP23017. Prvo ćemo opisati hardverske veze, a zatim Arduino skicu. Prisjetite se sheme korištene za primjer pojedinačnog prekidača.

Kada je prekidač bio direktno spojen na Arduino, čitamo status svakog pina kako bismo odredili vrijednost prekidača. Učinit ćemo to ponovo, u većim razmjerima koristeći MCP23017. Razmotrite dijagram pinout -a:

Korak 8:

Imamo 16 pinova, što omogućava povezivanje četiri prekidača. Zajedničko za svaki prekidač i dalje je spojeno na 5V, a svaki kontakt prekidača i dalje ima 10k pull-down otpornik na GND. Zatim povezujemo 1, 2, 4, 8 pinova znamenke jedan na GPBA0 ~ 3; znamenke dvije 1, 2, 4, 8 do GPA4 ~ 7; znamenke tri 1, 2, 4, 8 do GPB0 ~ 3 i brojke četiri 1, 2, 4, 8 do GPB4 ~ 7.

Kako sada čitamo prekidače? Sve te žice mogu vas natjerati da pomislite da je teško, ali skica je vrlo jednostavna. Kad očitamo vrijednost GPBA i B, za svaku banku se vraća po jedan bajt, s prvim najznačajnijim bitom. Svaka četiri bita će odgovarati postavci prekidača spojenog na odgovarajuće I/O pinove. Na primjer, ako zatražimo podatke za obje IO banke i prekidači su postavljeni na 1 2 3 4 - banka A će vratiti 0010 0001, a banka B 0100 0011.

Koristimo neke operacije bitshift -a da razdvojimo svaka četiri bita u zasebnu varijablu - što nam ostavlja vrijednost svake znamenke. Na primjer, da bismo odvojili vrijednost prekidača četiri, pomaknuli smo bitove iz banke B >> 4. Ovo potiskuje vrijednost prekidača tri, a prazni bitovi s lijeve strane postaju nula.

Za odvajanje vrijednosti za prekidač tri, koristimo složeno bito & - koje ostavlja vrijednost prekidača tri. Slika prikazuje raščlambu vrijednosti binarnog prekidača - prikazuje sirove vrijednosti GPIOA i B bajtova, zatim binarnu vrijednost svake znamenke i decimalnu vrijednost.

Korak 9:

Pa da vidimo skicu demonstracije:

/ * Primjer 40a-Pročitajte četiri BCD sklopke sa zakretnim kotačem preko MCP23017, prikaz na SAA1064/4-znamenkasti 7-segmentni LED zaslon */// MCP23017 pinovi 15 ~ 17 prema GND, adresa sabirnice I2C je 0x20 // SAA1064 I2C adresa sabirnice 0x38 # uključuje "Wire.h" // za definicije LED cifara int znamenke [16] = {63, 6, 91, 79, 102, 109, 125, 7, 127, 111, 119, 124, 57, 94, 121, 113 }; bajt GPIOA, GPIOB, dig1, dig2, dig3, dig4; void initSAA1064 () {// postavljanje 0x38 Wire.beginTransmission (0x38); Wire.write (0); Wire.write (B01000111); // 12mA izlaz, bez zatamnjenja znamenki Wire.endTransmission (); } void setup () {Serial.begin (9600); Wire.begin (); // pokretanje I2C sabirnice initSAA1064 (); } void loop () {// čita ulaze banke A Wire.beginTransmission (0x20); Wire.write (0x12); Wire.endTransmission (); Wire.requestFrom (0x20, 1); GPIOA = Wire.read (); // ovaj bajt sadrži podatke prekidača za znamenke 1 i 2 // očitavanje ulaza banke B Wire.beginTransmission (0x20); Wire.write (0x13); Wire.endTransmission (); Wire.requestFrom (0x20, 1); GPIOB = Wire.read (); // ovaj bajt sadrži podatke prekidača za znamenke 3 i 4 // izdvaja vrijednost za svaki prekidač // dig1 LHS, dig4 RHS dig4 = GPIOB >> 4; dig3 = GPIOB & B00001111; dig2 = GPIOA >> 4; dig1 = GPIOA & B00001111; // šalje sve GPIO i pojedinačne podatke o prebacivanju na serijski monitor // radi otklanjanja grešaka i interesa Serial.print ("GPIOA ="); Serijski.println (GPIOA, BIN); Serial.print ("GPIOB ="); Serijski.println (GPIOB, BIN); Serial.println (); Serial.print ("cifra 1 ="); Serial.println (dig1, BIN); Serial.print ("cifra 2 ="); Serial.println (dig2, BIN); Serial.print ("cifra 3 ="); Serial.println (dig3, BIN); Serial.print ("cifra 4 ="); Serial.println (dig4, BIN); Serial.println (); Serial.print ("cifra 1 ="); Serial.println (dig1, DEC); Serial.print ("cifra 2 ="); Serial.println (dig2, DEC); Serial.print ("cifra 3 ="); Serial.println (dig3, DEC); Serial.print ("cifra 4 ="); Serial.println (dig4, DEC); Serial.println (); // šalje vrijednost prekidača na LED zaslon putem SAA1064 Wire.beginTransmission (0x38); Wire.write (1); Wire.write (znamenke [dig4]); Wire.write (znamenke [dig3]); Wire.write (znamenke [dig2]); Wire.write (znamenke [dig1]); Wire.endTransmission (); kašnjenje (10); kašnjenje (1000); }

A za nevjernike … video demonstracija.

Pa eto ga. Četiri znamenke umjesto jedne, i preko I2C sabirnice čuvaju Arduino digitalne U/I pinove. Koristeći osam MCP23017, mogli ste čitati 32 cifre odjednom. Uživajte u tome!

BCD i decimalne sklopke različitih veličina možete naručiti s PMD Way -a, uz besplatnu dostavu širom svijeta.

Ovaj post vam donosi pmdway.com - sve za proizvođače i ljubitelje elektronike, uz besplatnu dostavu širom svijeta.

Preporučuje se: