Kazalo:

Stikala Arduino in palčka: 9 korakov
Stikala Arduino in palčka: 9 korakov

Video: Stikala Arduino in palčka: 9 korakov

Video: Stikala Arduino in palčka: 9 korakov
Video: Lesson 98: Arduino 10 LED Push button Projects, Potentiometer LED Voltmeter and Traffic Light 2024, November
Anonim
Arduino in stikala z palcem
Arduino in stikala z palcem

V tem članku preučujemo uporabo stikal potisnega kolesa/kolesca z našimi sistemi Arduino. Tu je nekaj primerov iz PMD Way.

Korak 1:

Slika
Slika

Za nepoznavalce je vsako stikalo en navpični segment in jih je mogoče povezati skupaj, da tvorijo različne velikosti. Z gumbi lahko izbirate med številkami od nič do devet. Na voljo so druge možnosti, ki imajo kolo, ki ga lahko premikate s palcem namesto gumbov za povečanje/zmanjšanje.

Pred dnevi domišljijskih uporabniških vmesnikov so bila ta stikala precej priljubljena metoda za nastavitev številskega vnosa podatkov. Vendar so še vedno na voljo, zato poglejmo, kako delujejo in kako jih lahko uporabimo. Vrednost stikala je na voljo prek binarno kodiranega decimalnega mesta ali čistega decimalnega mesta. Razmislite o zadnjem delu stikala v obliki BCD.

2. korak:

Slika
Slika

Na levi imamo skupne, nato kontakte za 1, 2, 4 in 8. Če na skupno priključite majhno napetost (recimo 5V), lahko vrednost stikala izmerite tako, da dodate vrednosti kontaktov v VISOKO stanje. Če na primer izberete 3 - bosta kontakta 1 in 2 na skupni napetosti. Vrednosti med nič in devet lahko kot take predstavimo v tabeli.

3. korak:

Slika
Slika

Doslej bi se morali zavedati, da bi bilo enostavno prebrati vrednost stikala - in prav imate, res je. 5V lahko priključimo na skupne, izhode na digitalne vhodne zatiče naših Arduino plošč, nato pa z digitalRead () določimo vrednost vsakega izhoda. V skici uporabljamo nekaj osnovnih matematik za pretvorbo vrednosti BCD v decimalno število. Zato naredimo to zdaj.

Z vidika strojne opreme moramo upoštevati še eno stvar-stikalo potisnega kolesa se električno obnaša kot štirje normalno odprti gumbi. To pomeni, da moramo uporabiti izvlečne upore, da imamo jasno razliko med visokim in nizkim stanjem. Shema za eno stikalo je torej prikazana zgoraj.

4. korak:

Zdaj je preprosto povezati izhode z oznako 1, 2, 4 in 8 na (na primer) digitalne zatiče 8, 9, 10 in 11. Priključite 5V na stikalo „C“in GND na… GND. Nato moramo imeti skico, ki lahko prebere vhode in pretvori izhod BCD v decimalko. Razmislite o naslednji skici:

/ * Uporablja ščitnik za numerični zaslon SAA1064 https://www.gravitech.us/7segmentshield.html Uporablja serijski monitor, če nimate ščita SAA1064 */#vključuje "Wire.h" #define q1 8 #define q2 9 # define q4 10 #define q8 11 void setup () {Serial.begin (9600); Wire.begin (); // pridruži se vodilu i2c (naslov izbirni za glavnega) zamuda (500); pinMode (q1, INPUT); // pinwode '1' pinMode (q2, INPUT); // palček '2' pinMode (q4, INPUT); // pinwode '4' pinMode (q8, INPUT); // kolesce '8'} void dispSAA1064 (int Count) // pošlje celo število 'Count' v Gravitech SAA1064 shield {const int lookup [10] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F}; int Na tisoče, stotine, desetice, baza; Wire.beginTransmission (0x38); Wire.write (0); Wire.write (B01000111); Wire.endTransmission (); Wire.beginTransmission (0x38); Wire.write (1); Na tisoče = Štetje/1000; Stotine = (Število-(tisoče*1000))/100; Desetice = (štetje-((tisoče*1000)+(stotine*100)))/10; Osnova = Štetje-((tisoče*1000)+(stotine*100)+(desetice*10)); Wire.write (iskanje [Base]); Wire.write (iskanje [desetke]); Wire.write (iskanje [stotine]); Wire.write (iskanje [na tisoče]); Wire.endTransmission (); zamuda (10); } int readSwitch () {int skupaj = 0; if (digitalRead (q1) == HIGH) {skupaj+= 1; } if (digitalRead (q2) == HIGH) {skupaj+= 2; } if (digitalRead (q4) == HIGH) {skupaj+= 4; } if (digitalRead (q8) == HIGH) {skupaj+= 8; } vrnitev skupaj; } void loop () {dispSAA1064 (readSwitch ()); // pošilja vrednost stikala na zaslon za zaščito Serial.println (readSwitch ()); // pošilja vrednost stikala v polje serijskega monitorja}

Ključna je funkcija readSwitch (). Izračuna vrednost stikala z dodajanjem številskega prikaza vsakega izhoda stikala in kot rezultat vrne vsoto. Za ta primer smo uporabili številski zaslon, ki ga upravlja NXP SAA1064.

5. korak:

Image
Image

Ključna je funkcija readSwitch (). Izračuna vrednost stikala z dodajanjem številskega prikaza vsakega izhoda stikala in kot rezultat vrne vsoto. Za ta primer smo uporabili številski zaslon, ki ga upravlja NXP SAA1064.

Če ga nimate, je v redu - rezultati se pošljejo tudi na serijski monitor. Zdaj pa poglejmo, kako deluje v videu.

6. korak:

V redu, ni videti veliko, če pa potrebujete numerični vnos, prihrani veliko fizičnega prostora in ponuja natančen način vnosa.

Torej, tukaj imate. Bi jih dejansko uporabili v projektu? Za eno številko - da. Za štiri? Verjetno ne-morda bi bilo lažje uporabiti 12-mestno tipkovnico. Obstaja ideja…

7. korak: Več stikal

Slika
Slika

Zdaj bomo preučili, kako prebrati štiri števke - in pri tem ne zapraviti vseh teh digitalnih zatičev. Namesto tega bomo uporabili 16-bitno razširitveno IC Microchip MCP23017, ki komunicira prek vodila I2C. Ima šestnajst digitalnih vhodno/izhodnih zatičev, s katerimi lahko beremo stanje vsakega stikala.

Preden nadaljujete, upoštevajte, da je za ta članek potrebno nekaj predpostavljenega znanja - vodilo I2C (prvi in drugi del) in MCP23017. Najprej bomo opisali strojne povezave, nato pa skico Arduino. Spomnite se sheme, uporabljene za primer enojnega stikala.

Ko je bilo stikalo neposredno priključeno na Arduino, beremo stanje vsakega zatiča, da ugotovimo vrednost stikala. To bomo ponovili v večjem obsegu z uporabo MCP23017. Razmislite o diagramu pinout:

8. korak:

Imamo 16 zatičev, ki omogočajo priključitev štirih stikal. Skupno za vsako stikalo je še vedno priključeno na 5V, vsak stikalni kontakt pa ima še vedno 10k izvlečnega upora do GND. Nato povežemo 1, 2, 4, 8 zatiča prve številke z GPBA0 ~ 3; številka dve 1, 2, 4, 8 do GPA4 ~ 7; števke tri 1, 2, 4, 8 do GPB0 ~ 3 in številke štiri 1, 2, 4, 8 do GPB4 ~ 7.

Kako torej beremo stikala? Vse te žice lahko povzročijo, da mislite, da je težko, vendar je skica precej preprosta. Ko preberemo vrednost GPBA in B, se za vsako banko vrne en bajt, najprej prvi najpomembnejši bit. Vsak štiri bit se bo ujemal z nastavitvijo stikala, priključenega na ustrezne V/I zatiče. Če na primer zahtevamo podatke za obe IO banki in so stikala nastavljena na 1 2 3 4 - bo banka A vrnila 0010 0001, banka B pa 0100 0011.

Z nekaterimi bitshift operacijami ločimo vsake štiri bite v ločeno spremenljivko - kar nam pusti vrednost vsake števke. Na primer, da ločimo vrednost stikala štiri, premaknemo bite iz banke B >> 4. To potisne vrednost stikala tri ven, prazni bitovi na levi pa postanejo nič.

Za ločitev vrednosti za stikalo tri uporabimo sestavljeni bitni & - ki pusti vrednost stikala tri. Slika prikazuje razčlenitev vrednosti binarnega stikala - prikazuje surove vrednosti GPIOA in B bajtov, nato binarno vrednost vsake števke in decimalno vrednost.

9. korak:

Pa poglejmo predstavitveno skico:

/ * Primer 40a-Preberite štiri stikala BCD z vrtljivim kolescem prek MCP23017, prikaz na SAA1064/4-mestni 7-segmentni LED zaslon */// MCP23017 zatiči 15 ~ 17 do GND, naslov vodila I2C je 0x20 // Naslov vodila I2C 0x38 # vključi "Wire.h" // za definicije števk LED int številke [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 () {// nastavitev 0x38 Wire.beginTransmission (0x38); Wire.write (0); Wire.write (B01000111); // 12mA izhod, brez prikrivanja številk Wire.endTransmission (); } void setup () {Serial.begin (9600); Wire.begin (); // zagon vodila I2C initSAA1064 (); } void loop () {// branje vhodov banke A Wire.beginTransmission (0x20); Wire.write (0x12); Wire.endTransmission (); Wire.requestFrom (0x20, 1); GPIOA = Wire.read (); // ta bajt vsebuje podatke o stikalu za števki 1 in 2 // prebere vhode banke B Wire.beginTransmission (0x20); Wire.write (0x13); Wire.endTransmission (); Wire.requestFrom (0x20, 1); GPIOB = Wire.read (); // ta bajt vsebuje podatke stikala za števki 3 in 4 // izvleče vrednost za vsako stikalo // dig1 LHS, dig4 RHS dig4 = GPIOB >> 4; dig3 = GPIOB & B00001111; dig2 = GPIOA >> 4; dig1 = GPIOA & B00001111; // pošiljanje vseh podatkov GPIO in posameznih stikal na serijski monitor // zaradi odpravljanja napak in interesa Serial.print ("GPIOA ="); Serial.println (GPIOA, BIN); Serial.print ("GPIOB ="); Serial.println (GPIOB, BIN); Serial.println (); Serial.print ("številka 1 ="); Serial.println (dig1, BIN); Serial.print ("številka 2 ="); Serial.println (dig2, BIN); Serial.print ("številka 3 ="); Serial.println (dig3, BIN); Serial.print ("številka 4 ="); Serial.println (dig4, BIN); Serial.println (); Serial.print ("številka 1 ="); Serial.println (dig1, DEC); Serial.print ("številka 2 ="); Serial.println (dig2, DEC); Serial.print ("številka 3 ="); Serial.println (dig3, DEC); Serial.print ("številka 4 ="); Serial.println (dig4, DEC); Serial.println (); // pošljite vrednost stikala na LED zaslon prek SAA1064 Wire.beginTransmission (0x38); Wire.write (1); Wire.write (številke [dig4]); Wire.write (številke [dig3]); Wire.write (številke [dig2]); Wire.write (številke [dig1]); Wire.endTransmission (); zamuda (10); zamuda (1000); }

In za nevernike… video demonstracija.

Torej, tukaj imate. Štiri števke namesto ene in preko vodila I2C ohranjajo digitalne V/I zatiče Arduino. Z osmimi MCP23017 lahko preberete 32 števk hkrati. Uživajte pri tem!

BCD in decimalna stikala različnih velikosti lahko naročite pri PMD Way z brezplačno dostavo po vsem svetu.

To objavo vam je predstavil pmdway.com - vse za ustvarjalce in navdušence nad elektroniko z brezplačno dostavo po vsem svetu.

Priporočena: