Turinys:

„Arduino“ir „Thumbwheel“jungikliai: 9 žingsniai
„Arduino“ir „Thumbwheel“jungikliai: 9 žingsniai

Video: „Arduino“ir „Thumbwheel“jungikliai: 9 žingsniai

Video: „Arduino“ir „Thumbwheel“jungikliai: 9 žingsniai
Video: How to Use Infrared Remotes and Receivers on the Arduino - Ultimate Guide to the Arduino #26 2024, Liepa
Anonim
„Arduino“ir „Thumbwheel“jungikliai
„Arduino“ir „Thumbwheel“jungikliai

Šiame straipsnyje mes nagrinėjame stūmimo ratų/nykščio ratų jungiklių naudojimą su mūsų „Arduino“sistemomis. Štai keli pavyzdžiai, gauti iš „PMD Way“.

1 žingsnis:

Vaizdas
Vaizdas

Nežinantiems kiekvienas jungiklis yra vienas vertikalus segmentas ir jie gali būti sujungti, kad būtų suformuoti įvairūs dydžiai. Mygtukais galite pasirinkti nuo skaitmenų nuo nulio iki devynių. Yra alternatyvų, turinčių ratą, kurį galite perkelti nykščiu, o ne padidinti/sumažinti mygtukus.

Prieš išgalvotų vartotojo sąsajų laikus šie jungikliai buvo gana populiarūs skaitmeninių duomenų įvedimo nustatymo metodai. Tačiau jie vis dar prieinami šiandien, todėl pažiūrėkime, kaip jie veikia ir kaip galime juos naudoti. Jungiklio reikšmė pateikiama naudojant dvejetainį koduotą dešimtainį arba dešimtainį skaičių. Apsvarstykite jungiklio galinę dalį BCD pavidalu.

2 žingsnis:

Vaizdas
Vaizdas

Kairėje turime bendrus, tada 1, 2, 4 ir 8. kontaktus. Jei bendrai naudojate mažą įtampą (tarkime, 5 V), jungiklio vertę galima išmatuoti pridedant kontaktų, esančių HIGH būsena. Pavyzdžiui, jei pasirinksite 3 - 1 ir 2 kontaktų įtampa bus bendra. Vertės nuo nulio iki devynių gali būti pateiktos lentelėje.

3 žingsnis:

Vaizdas
Vaizdas

Iki šiol turėtumėte suprasti, kad būtų lengva perskaityti jungiklio vertę - ir jūs teisus. Mes galime prijungti 5 V prie bendro, išėjimus prie mūsų „Arduino“plokščių skaitmeninių įvesties kaiščių, tada naudodamiesi „DigitalRead“() nustatyti kiekvienos išvesties vertę. Eskize mes naudojame tam tikrą pagrindinę matematiką, kad konvertuotume BCD reikšmę į dešimtainį skaičių. Taigi darykime tai dabar.

Aparatinės įrangos požiūriu turime atsižvelgti į dar vieną dalyką-stūmimo rato jungiklis veikia elektriškai, kaip keturi normaliai atidaromi mygtukai. Tai reiškia, kad turime naudoti ištraukiamus rezistorius, kad būtų aiškus skirtumas tarp aukštos ir žemos būsenos. Taigi vieno jungiklio schema yra tokia, kaip parodyta aukščiau.

4 žingsnis:

Dabar yra paprasta prijungti išvestis, pažymėtas 1, 2, 4 ir 8, prie (pavyzdžiui) skaitmeninių kaiščių 8, 9, 10 ir 11. Prijunkite 5 V prie jungiklio „C“taško, o GND prie… GND. Toliau turime turėti eskizą, kuris galėtų nuskaityti įvestis ir konvertuoti BCD išvestį į dešimtainę. Apsvarstykite šį eskizą:

/ * Naudojamas SAA1064 skaitmeninio ekrano skydas https://www.gravitech.us/7segmentshield.html Naudoja nuoseklųjį monitorių, jei neturite skydo SAA1064 */ #įtraukite „Wire.h“#define q1 8 #define q2 9 # define q4 10 #define q8 11 void setup () {Serial.begin (9600); Wire.begin (); // prisijungti prie i2c magistralės (adresas neprivalomas meistrui) uždelsimas (500); pinMode (q1, INPUT); // thumbwheel '1' pinMode (q2, INPUT); // nykščio ratas '2' pinMode (q4, INPUT); // thumbwheel '4' pinMode (q8, INPUT); // „thumbwheel '8“} void dispSAA1064 (int Count) // siunčia sveikąjį skaičių „Count“į „Gravitech“SAA1064 skydą {const int lookup [10] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F}; int Tūkstančiai, šimtai, dešimtys, bazė; Wire.beginTransmission (0x38); Wire.write (0); Wire.write (B01000111); Wire.endTransmission (); Wire.beginTransmission (0x38); Viela.rašyti (1); Tūkstančiai = Count/1000; Šimtai = (Count- (Tūkstančiai*1000))/100; Dešimtys = (skaičius-((tūkstančiai*1000)+(šimtai*100)))/10; Bazė = skaičius-((tūkstančiai*1000)+(šimtai*100)+(dešimtys*10)); Wire.write (lookup [Base]); „Wire.write“(paieška [dešimtys]); Wire.write (paieška [Šimtai]); Wire.write (lookup [Tūkstančiai]); Wire.endTransmission (); vėlavimas (10); } int readSwitch () {int iš viso = 0; if (digitalRead (q1) == HIGH) {iš viso+= 1; } if (digitalRead (q2) == HIGH) {iš viso+= 2; } if (digitalRead (q4) == HIGH) {iš viso+= 4; } if (digitalRead (q8) == HIGH) {iš viso+= 8; } grąža iš viso; } void loop () {dispSAA1064 (readSwitch ()); // siunčia jungiklio vertę į ekraną Serial.println (readSwitch ()); // siunčia jungiklio vertę į serijinio monitoriaus dėžutę}

Funkcija readSwitch () yra raktas. Jis apskaičiuoja jungiklio vertę, pridėdamas kiekvieno jungiklio išvesties skaitinį vaizdą ir grąžina sumą kaip rezultatą. Šiame pavyzdyje mes naudojome skaitmeninį ekrano ekraną, kurį valdo NXP SAA1064.

5 veiksmas:

Image
Image

Funkcija readSwitch () yra raktas. Jis apskaičiuoja jungiklio vertę, pridėdamas kiekvieno jungiklio išvesties skaitinį vaizdą ir grąžina sumą kaip rezultatą. Šiame pavyzdyje mes naudojome skaitmeninį ekrano ekraną, kurį valdo NXP SAA1064.

Jei to neturite, viskas gerai - rezultatai taip pat siunčiami į serijinį monitorių. Dabar pažiūrėkime, kaip tai veikia vaizdo įraše.

6 žingsnis:

Gerai, tai neatrodo daug, bet jei jums reikia skaitmeninio įrašo, tai sutaupo daug fizinės vietos ir siūlo tikslų įvedimo būdą.

Taigi, jūs turite tai. Ar tikrai juos panaudotumėte projekte? Vienam skaitmeniui - taip. Už keturis? Tikriausiai ne-galbūt būtų lengviau naudoti 12 skaitmenų klaviatūrą. Yra idėja…

7 žingsnis: keli jungikliai

Vaizdas
Vaizdas

Dabar mes išnagrinėsime, kaip perskaityti keturis skaitmenis, o ne eikvoti visus tuos skaitmeninius kaiščius. Vietoj to naudosime 16 bitų „Microchip MCP23017“prievado plėtiklį IC, kuris bendrauja per I2C magistralę. Jame yra šešiolika skaitmeninių įvesties/išvesties kaiščių, kuriuos galime naudoti kiekvieno jungiklio būsenai nuskaityti.

Prieš judėdami į priekį, atkreipkite dėmesį, kad šiam straipsniui reikalingos tam tikros žinomos žinios - I2C magistralė (pirmoji ir antroji dalys) ir MCP23017. Pirmiausia aprašysime aparatūros jungtis, o tada - „Arduino“eskizą. Prisiminkite schemą, naudojamą vieno jungiklio pavyzdyje.

Kai jungiklis buvo tiesiogiai prijungtas prie „Arduino“, mes nuskaitėme kiekvieno kaiščio būseną, kad nustatytume jungiklio vertę. Mes tai padarysime dar kartą, plačiau, naudodami MCP23017. Apsvarstykite „pinout“diagramą:

8 žingsnis:

Turime 16 kaiščių, kurie leidžia prijungti keturis jungiklius. Kiekvieno jungiklio bendrieji elementai vis dar jungiami prie 5 V, o kiekvienas jungiklio kontaktas vis dar turi 10 k ištraukiamą rezistorių GND. Tada mes prijungiame 1, 2, 4, 8 vieno skaitmens kaiščius prie GPBA0 ~ 3; dviejų skaitmenų 1, 2, 4, 8 iki GPA4 ~ 7; trijų skaitmenų 1, 2, 4, 8 į GPB0 ~ 3 ir keturių skaitmenų 1, 2, 4, 8 iki GPB4 ~ 7.

Dabar kaip skaityti jungiklius? Dėl visų šių laidų galite galvoti, kad tai sunku, tačiau eskizas yra gana paprastas. Kai skaitome GPBA ir B vertę, kiekvienam bankui grąžinamas vienas baitas, pirmiausia nurodant reikšmingiausią bitą. Kiekvienas keturi bitai atitiks jungiklio, prijungto prie atitinkamų įvesties/išvesties kaiščių, nustatymą. Pavyzdžiui, jei paprašysime abiejų IO bankų duomenų, o jungikliai bus nustatyti į 1 2 3 4 - bankas A grąžins 0010 0001, o bankas B - 0100 0011.

Mes naudojame kai kurias „bitshift“operacijas, kad atskirtume visus keturis bitus į atskirą kintamąjį - tai palieka mums kiekvieno skaitmens vertę. Pavyzdžiui, norėdami atskirti keturių jungiklių vertę, perkeliame bitus iš banko B >> 4. Tai išstumia trečiojo jungiklio vertę, o tuščios bitės kairėje tampa nulinės.

Norėdami atskirti trečiojo jungiklio vertę, mes naudojame junginį bitine prasme & -, kuris palieka trečiojo jungiklio vertę. Paveikslėlyje parodyta dvejetainių jungiklių verčių suskirstymas - rodomos neapdorotos GPIOA ir B baitų vertės, tada kiekvieno skaitmens dvejetainė vertė ir dešimtainė reikšmė.

9 veiksmas:

Taigi pažiūrėkime demonstracinį eskizą:

/ * 40a pavyzdys-perskaitykite keturis stūmoklio BCD jungiklius per MCP23017, rodykite SAA1064/4 skaitmenų 7 segmentų LED ekranas */// MCP23017 kaiščiai nuo 15 iki 17 iki GND, I2C magistralės adresas yra 0x20 // SAA1064 I2C magistralės adresas 0x38 # įtraukite „Wire.h“// LED skaitmenų apibrėžimams int skaitmenų [16] = {63, 6, 91, 79, 102, 109, 125, 7, 127, 111, 119, 124, 57, 94, 121, 113 }; baitas GPIOA, GPIOB, dig1, dig2, dig3, dig4; void initSAA1064 () {// setup 0x38 Wire.beginTransmission (0x38); Wire.write (0); Wire.write (B01000111); // 12mA išėjimas, be skaitmenų išjungimas Wire.endTransmission (); } void setup () {Serial.begin (9600); Wire.begin (); // paleisti I2C magistralę initSAA1064 (); } void loop () {// skaityti banko A Wire įvestis.beginTransmission (0x20); Wire.write (0x12); Wire.endTransmission (); Wire.requestFrom (0x20, 1); GPIOA = Wire.read (); // šiame baite yra 1 ir 2 skaitmenų perjungimo duomenys // skaityti banko B laidų įvestis Wire.beginTransmission (0x20); Wire.write (0x13); Wire.endTransmission (); Wire.requestFrom (0x20, 1); GPIOB = Wire.read (); // šiame baite yra 3 ir 4 skaitmenų perjungimo duomenys // kiekvieno jungiklio reikšmė // dig1 LHS, dig4 RHS dig4 = GPIOB >> 4; dig3 = GPIOB & B00001111; dig2 = GPIOA >> 4; dig1 = GPIOA & B00001111; // siųsti visus GPIO ir atskirų jungiklių duomenis į serijinį monitorių // derinimui ir interesams Serial.print ("GPIOA ="); Serial.println (GPIOA, BIN); Serial.print ("GPIOB ="); Serial.println (GPIOB, BIN); Serial.println (); Serial.print ("skaitmuo 1 ="); Serial.println (dig1, BIN); Serial.print ("skaitmuo 2 ="); Serial.println (dig2, BIN); Serial.print ("skaitmuo 3 ="); Serial.println (dig3, BIN); Serial.print ("skaitmuo 4 ="); Serial.println (dig4, BIN); Serial.println (); Serial.print ("skaitmuo 1 ="); Serial.println (dig1, DEC); Serial.print ("skaitmuo 2 ="); Serial.println (dig2, DEC); Serial.print ("skaitmuo 3 ="); Serial.println (dig3, DEC); Serial.print ("skaitmuo 4 ="); Serial.println (dig4, DEC); Serial.println (); // siųsti jungiklio reikšmę į LED ekraną per SAA1064 Wire.beginTransmission (0x38); Viela.rašyti (1); Wire.write (skaitmenys [dig4]); Wire.write (skaitmenys [dig3]); Wire.write (skaitmenys [dig2]); Wire.write (skaitmenys [dig1]); Wire.endTransmission (); vėlavimas (10); vėlavimas (1000); }

Ir kitatikiams … vaizdo demonstracija.

Taigi, jūs turite tai. Keturi skaitmenys vietoj vieno, o virš I2C magistralės išsaugo „Arduino“skaitmeninius įvesties/išvesties kaiščius. Naudodami aštuonis MCP23017 galite vienu metu perskaityti 32 skaitmenis. Smagiai tai daryk!

Galite užsisakyti įvairių dydžių BCD ir dešimtainius jungiklius iš „PMD Way“ir pristatyti nemokamai visame pasaulyje.

Šį įrašą jums pateikė pmdway.com - viskas gamintojams ir elektronikos entuziastams, nemokamas pristatymas visame pasaulyje.

Rekomenduojamas: