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, Srpanj
Anonim
Arduino prekidači i prekidači
Arduino prekidači i prekidači

U ovom članku istražujemo upotrebu prekidača s gumenim kotačićima/zakretnim kotačićem u našim Arduino sustavima. Evo nekoliko primjera iz PMD Way.

Korak 1:

Slika
Slika

Za neupućene, svaka je sklopka jedan okomiti segment i mogu se povezati zajedno u različite veličine. Pomoću gumba možete birati od znamenki od nule do devet. Dostupne su alternative koje imaju kotačić kojim se možete pomicati palcem umjesto gumba za povećanje/smanjenje.

Prije dana modernih korisničkih sučelja ti 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 dostupna je putem binarno kodiranog decimalnog ili ravnog decimalnog broja. Razmotrite stražnju stranu prekidača u BCD obliku.

Korak 2:

Slika
Slika

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 zbrajanjem 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 prikazati u tablici.

3. korak:

Slika
Slika

Do sada biste trebali shvatiti da bi bilo lako pročitati vrijednost prekidača - i u pravu ste, jest. 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. U 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č s kotačićem ponaša se električno poput četiri normalno otvorena tipke. To znači da moramo koristiti padajuće otpornike kako bismo imali jasnu razliku između visokog i niskog stanja. Dakle, shema za jedan prekidač je kao što je prikazano gore.

Korak 4:

Sada je jednostavno spojiti izlaze s oznakama 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 štitnik za numerički zaslon SAA1064 https://www.gravitech.us/7segmentshield.html Koristi serijski monitor ako nemate štitnik SAA1064 */#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 neobavezna za glavnog) 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 Tisuće, stotine, desetke, baza; Wire.beginTransmission (0x38); Wire.write (0); Wire.write (B01000111); Wire.endTransmission (); Wire.beginTransmission (0x38); Wire.write (1); Tisuće = Broj/1000; Stotine = (Broj- (Tisuće*1000))/100; Deseci = (Broj-((Tisuće*1000)+(Stotine*100)))/10; Baza = Broj-((Tisuće*1000)+(Stotine*100)+(Desetke*10)); Wire.write (traženje [Baza]); Wire.write (pretraživanje [desetke]); Wire.write (traženje [stotine]); Wire.write (traženje [Tisuće]); 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 zaslon za zaštitu Serial.println (readSwitch ()); // šalje vrijednost prekidača u okvir serijskog monitora}

Ključna je funkcija readSwitch (). Izračunava vrijednost sklopke dodavanjem numeričkog prikaza svakog izlaza sklopke i vraća ukupnu vrijednost kao rezultat. U ovom primjeru koristili smo numerički štitnik zaslona kojim upravlja NXP SAA1064.

5. korak:

Image
Image

Ključna je funkcija readSwitch (). Izračunava vrijednost sklopke dodavanjem numeričkog prikaza svakog izlaza sklopke i vraća ukupnu vrijednost kao rezultat. U ovom primjeru koristili smo numerički zaslon koji kontrolira NXP SAA1064.

Ako ga nemate, to je u redu - 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. Biste li ih zapravo koristili u nekom projektu? Za jednu znamenku - da. Za četvoricu? Vjerojatno ne-možda bi bilo lakše koristiti 12-znamenkasti tipkovnicu. Postoji ideja…

Korak 7: Više prekidača

Slika
Slika

Sada ćemo ispitati kako čitati četiri znamenke - i pritom ne potrošiti sve te digitalne pinove. Umjesto toga, koristit ćemo 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 svake sklopke.

Prije nego što krenete naprijed, 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.

Kad je prekidač izravno spojen na Arduino, čitamo status svakog pina kako bismo odredili vrijednost prekidača. Ponovit ćemo to, u većim razmjerima, koristeći MCP23017. Razmotrite dijagram iscrtavanja:

Korak 8:

Imamo 16 pinova, što omogućuje 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 otpornika na GND. Zatim spojimo 1, 2, 4, 8 pinova znamenke jedan na GPBA0 ~ 3; znamenke dva 1, 2, 4, 8 do GPA4 ~ 7; znamenke tri 1, 2, 4, 8 do GPB0 ~ 3 i znamenke č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, a prekidači su postavljeni na 1 2 3 4 - banka A vratit će 0010 0001, a banka B 0100 0011.

Koristimo neke operacije bitshift -a za odvajanje 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. Time se vrijednost prekidača tri gura van, a prazni bitovi s lijeve strane postaju nula.

Da bismo odvojili vrijednost 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:

Pogledajmo skicu demonstracije:

/ * Primjer 40a-Pročitajte četiri BCD sklopke s 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 // adresa SAA1064 sabirnice I2C 0x38 # uključuje "Wire.h" // za definicije LED znamenki 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, žica bez prikrivanja znamenki.endTransmission (); } void setup () {Serial.begin (9600); Wire.begin (); // pokretanje I2C sabirnice initSAA1064 (); } void loop () {// čitanje ulaza 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; // pošaljite sve podatke GPIO -a i pojedinačne preklopnike na serijski monitor // radi otklanjanja pogrešaka i interesa Serial.print ("GPIOA ="); Serijski.println (GPIOA, BIN); Serial.print ("GPIOB ="); Serijski.println (GPIOB, BIN); Serial.println (); Serial.print ("znamenka 1 ="); Serial.println (dig1, BIN); Serial.print ("znamenka 2 ="); Serial.println (dig2, BIN); Serial.print ("znamenka 3 ="); Serial.println (dig3, BIN); Serial.print ("znamenka 4 ="); Serial.println (dig4, BIN); Serial.println (); Serial.print ("znamenka 1 ="); Serial.println (dig1, DEC); Serial.print ("znamenka 2 ="); Serial.println (dig2, DEC); Serial.print ("znamenka 3 ="); Serial.println (dig3, DEC); Serial.print ("znamenka 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 znamenke odjednom. Uživajte u tome!

Možete naručiti i BCD i decimalne sklopke u različitim veličinama s PMD Way -a, uz besplatnu dostavu po cijelom svijetu.

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

Preporučeni: