Sisukord:

Arduino ja pöidlaratta lülitid: 9 sammu
Arduino ja pöidlaratta lülitid: 9 sammu

Video: Arduino ja pöidlaratta lülitid: 9 sammu

Video: Arduino ja pöidlaratta lülitid: 9 sammu
Video: Платформа Iskra JS. Как Arduino, только на JavaScript. Железки Амперки 2024, Juuli
Anonim
Arduino ja pöidlaratta lülitid
Arduino ja pöidlaratta lülitid

Selles artiklis uurime tõukeratta/pöidlaratta lülitite kasutamist meie Arduino süsteemides. Siin on mõned näited, mis pärinevad saidilt PMD Way.

Samm 1:

Pilt
Pilt

Teadmatute jaoks on iga lüliti üks vertikaalne segment ja neid saab omavahel ühendada, et moodustada erinevad suurused. Nuppude abil saate valida nullist üheksani. Saadaval on alternatiive, millel on ratas, mida saab suurendamise/vähendamise nuppude asemel pöidlaga liigutada.

Enne väljamõeldud kasutajaliideste aegu olid need lülitid üsna populaarsed meetodid arvandmete sisestamiseks. Kuid need on endiselt saadaval, vaatame, kuidas need toimivad ja kuidas neid kasutada. Lüliti väärtus tehakse kättesaadavaks binaarkodeeritud kümnend- või sirge kümnendkoha kaudu. Mõelge lüliti tagaküljele BCD kujul.

2. samm:

Pilt
Pilt

Vasakul on meil ühised, seejärel kontaktid 1, 2, 4 ja 8. Kui rakendate ühisele väikese pinge (näiteks 5 V), saab lüliti väärtust mõõta, lisades kontaktide väärtused HIGH olek. Näiteks kui valite 3 - kontaktid 1 ja 2 on ühisel pingel. Tabelis saab esitada väärtusi null kuni üheksa.

3. samm:

Pilt
Pilt

Nüüdseks peaksite mõistma, et lüliti väärtust oleks lihtne lugeda - ja teil on õigus. Saame ühendada 5V tavalise, väljundid meie Arduino tahvlite digitaalsisendipistikutega, seejärel kasutada digitalRead () iga väljundi väärtuse määramiseks. Visandis kasutame matemaatika põhitõdesid, et teisendada BCD väärtus kümnendarvuks. Nii et teeme seda nüüd.

Riistvara vaatenurgast peame arvestama veel ühe asjaga-tõukurlüliti käitub elektriliselt nagu neli normaalselt avatud vajutusnuppu. See tähendab, et peame kõrgete ja madalate olekute selge eristamiseks kasutama tõmbetakistit. Nii et ühe lüliti skemaatika on ülaltoodud.

4. samm:

Nüüd on lihtne ühendada väljundid märgistusega 1, 2, 4 ja 8 (näiteks) digitaalsete kontaktidega 8, 9, 10 ja 11. Ühendage 5V lüliti C -punktiga ja GND… GND -ga. Järgmisena peab meil olema visand, mis suudab sisendeid lugeda ja BCD väljundi kümnendkohaks teisendada. Kaaluge järgmist visandit:

/ * Kasutab SAA1064 numbrilise ekraani kaitseklaasi https://www.gravitech.us/7segmentshield.html Kasutab jadamonitori, kui teil pole kilpi SAA1064 */ #sisaldab "Wire.h" #define q1 8 #define q2 9 # define q4 10 #define q8 11 void setup () {Serial.begin (9600); Wire.begin (); // liituda i2c siiniga (aadress on valikuline meistrile) viivitus (500); pinMode (q1, INPUT); // pöidlaratas '1' pinMode (q2, INPUT); // pöidlaratas '2' pinMode (q4, INPUT); // pöidlaratas '4' pinMode (q8, INPUT); // pöidlaratas '8'} void dispSAA1064 (int Count) // saadab täisarvu 'Count' Gravitech SAA1064 kilbile {const int lookup [10] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F}; int Tuhanded, sajad, kümned, baas; Wire.beginTransmission (0x38); Wire.write (0); Wire.write (B01000111); Wire.endTransmission (); Wire.beginTransmission (0x38); Wire.write (1); Tuhanded = krahv/1000; Sadu = (loendus- (tuhandeid*1000))/100; Kümned = (loend-((tuhandeid*1000)+(sadu*100)))/10; Alus = krahv-((tuhandeid*1000)+(sadu*100)+(kümneid*10)); Wire.write (otsing [Base]); Wire.write (otsing [Kümned]); Wire.write (otsing [Sajad]); Wire.write (otsing [Tuhanded]); Wire.endTransmission (); viivitus (10); } int readSwitch () {int kokku = 0; if (digitalRead (q1) == HIGH) {kokku+= 1; } kui (digitalRead (q2) == HIGH) {kokku+= 2; } kui (digitalRead (q4) == HIGH) {kokku+= 4; } kui (digitalRead (q8) == HIGH) {kokku+= 8; } tagastamine kokku; } void loop () {dispSAA1064 (readSwitch ()); // saadab lüliti väärtuse ekraanile Serial.println (readSwitch ()); // saadab lüliti väärtuse jadamonitori kasti}

Funktsioon readSwitch () on võti. See arvutab lüliti väärtuse, lisades iga lüliti väljundi numbrilise esituse ja tagastab selle tulemuseks kogusumma. Selle näite puhul kasutasime numbrilist ekraanikilpi, mida juhib NXP SAA1064.

5. samm:

Image
Image

Funktsioon readSwitch () on võti. See arvutab lüliti väärtuse, lisades iga lüliti väljundi numbrilise esituse ja tagastab selle tulemuseks kogusumma. Selle näite puhul kasutasime numbrilist ekraanikilpi, mida juhib NXP SAA1064.

Kui teil seda pole, on kõik korras - tulemused saadetakse ka jadamonitorile. Nüüd vaatame seda videol toimimas.

6. samm:

Ok, see ei tundu palju, kuid kui vajate numbrilist sisestust, säästab see palju füüsilist ruumi ja pakub täpset sisestusviisi.

Nii et teil on see olemas. Kas kasutaksite neid tegelikult projektis? Ühe numbri jaoks - jah. Nelja eest? Tõenäoliselt mitte-võib-olla oleks lihtsam kasutada 12-kohalist klaviatuuri. On idee…

Samm: mitu lülitit

Pilt
Pilt

Nüüd uurime, kuidas nelja numbrit lugeda - ja ärge raisake kõiki neid digitaalseid tihvte selle protsessi käigus. Selle asemel kasutame Microchip MCP23017 16-bitist pordilaiendit IC, mis suhtleb I2C siini kaudu. Sellel on kuusteist digitaalset sisend-/väljundnõela, mille abil saame lugeda iga lüliti olekut.

Enne edasiliikumist pange tähele, et selle artikli jaoks on vaja mõningaid eeldatavaid teadmisi - I2C siin (esimene ja teine osa) ja MCP23017. Esmalt kirjeldame riistvaraühendusi ja seejärel Arduino visandit. Tuletage meelde ühe lüliti näite jaoks kasutatud skemaatikat.

Kui lüliti oli otse Arduinoga ühendatud, lugesime lüliti väärtuse määramiseks iga tihvti olekut. Teeme seda uuesti, laiemalt, kasutades MCP23017. Mõelge pinout -skeemile:

8. samm:

Meil on 16 tihvti, mis võimaldab ühendada neli lülitit. Iga lüliti ühisosa ühendatakse endiselt 5 V-ga ja igal lülitikontaktil on endiselt 10k allalaaditav takisti GND-le. Seejärel ühendame 1, 2, 4, 8 ühe numbri tihvti GPBA0 ~ 3 -ga; number kaks 1, 2, 4, 8 kuni GPA4 ~ 7; kolmekohalised numbrid 1, 2, 4, 8 kuni GPB0 ~ 3 ja neljandad numbrid 1, 2, 4, 8 kuni GPB4 ~ 7.

Kuidas nüüd lüliteid lugeda? Kõik need juhtmed võivad panna teid arvama, et see on raske, kuid visand on üsna lihtne. Kui loeme GPBA ja B väärtust, tagastatakse iga panga kohta üks bait, kõigepealt kõige olulisem bitt. Iga neli bitti sobivad sobivate I/O -kontaktidega ühendatud lüliti seadistusega. Näiteks kui küsime andmeid mõlema IO panga kohta ja lülitid on seatud 1 2 3 4 - pank A tagastab 0010 0001 ja pank B tagastab 0100 0011.

Me kasutame mõningaid bitshift -toiminguid, et eraldada iga neli bitti eraldi muutujaks - mis jätab meile iga numbri väärtuse. Näiteks lüliti nelja väärtuse eraldamiseks nihutame bitte pangast B >> 4. See surub lüliti kolm väärtuse välja ja vasakul olevad tühjad bitid muutuvad nulliks.

Lüliti kolm väärtuse eraldamiseks kasutame ühendit bitipõhiselt & - mis jätab lüliti kolm väärtuse. Pildil on kahendlüliti väärtuste jaotus - see näitab GPIOA ja B baiti toorväärtusi, seejärel iga numbri binaarväärtust ja kümnendväärtust.

9. samm:

Nii et vaatame tutvustuse visandit:

/ * Näide 40a-lugege nelja tõukeratta BCD-lülitit MCP23017 kaudu, kuvage SAA1064-l/4-kohaline 7-segmendiline LED-ekraan */// MCP23017 nööpnõelad 15 ~ 17 kuni GND, I2C siiniaadress on 0x20 // SAA1064 I2C siiniaadress 0x38 # lisage "Wire.h" // LED -numbrimääratluste jaoks numbrite jaoks [16] = {63, 6, 91, 79, 102, 109, 125, 7, 127, 111, 119, 124, 57, 94, 121, 113 }; bait GPIOA, GPIOB, dig1, dig2, dig3, dig4; void initSAA1064 () {// setup 0x38 Wire.beginTransmission (0x38); Wire.write (0); Wire.write (B01000111); // 12mA väljund, numbrit ei kustutata Wire.endTransmission (); } void setup () {Serial.begin (9600); Wire.begin (); // I2C bussi käivitamine initSAA1064 (); } void loop () {// loe panga A Wire sisendeid Wire.beginTransmission (0x20); Wire.write (0x12); Wire.endTransmission (); Wire.requestFrom (0x20, 1); GPIOA = Wire.read (); // see bait sisaldab lülitite andmeid numbrite 1 ja 2 jaoks // loe panga B Wire sisendeid.beginTransmission (0x20); Wire.write (0x13); Wire.endTransmission (); Wire.requestFrom (0x20, 1); GPIOB = Wire.read (); // see bait sisaldab lülitite andmeid numbrite 3 ja 4 jaoks // ekstrakti väärtus iga lüliti jaoks // dig1 LHS, dig4 RHS dig4 = GPIOB >> 4; dig3 = GPIOB & B00001111; dig2 = GPIOA >> 4; dig1 = GPIOA & B00001111; // saata kõik GPIO ja üksikute lülitite andmed jadamonitorile // silumise ja huvi pärast Serial.print ("GPIOA ="); Serial.println (GPIOA, BIN); Serial.print ("GPIOB ="); Serial.println (GPIOB, BIN); Serial.println (); Serial.print ("number 1 ="); Serial.println (dig1, BIN); Serial.print ("number 2 ="); Serial.println (dig2, BIN); Serial.print ("number 3 ="); Serial.println (dig3, BIN); Serial.print ("number 4 ="); Serial.println (dig4, BIN); Serial.println (); Serial.print ("number 1 ="); Serial.println (dig1, DEC); Serial.print ("number 2 ="); Serial.println (dig2, DEC); Serial.print ("number 3 ="); Serial.println (dig3, DEC); Serial.print ("number 4 ="); Serial.println (dig4, DEC); Serial.println (); // saatke lüliti väärtus LED -ekraanile SAA1064 Wire.beginTransmission kaudu (0x38); Wire.write (1); Wire.write (numbrid [dig4]); Wire.write (numbrid [dig3]); Wire.write (numbrid [dig2]); Wire.write (numbrid [dig1]); Wire.endTransmission (); viivitus (10); viivitus (1000); }

Ja mitteusklikele … video demonstratsioon.

Nii et teil on see olemas. Ühe numbri asemel neli numbrit ja üle I2C -siini, mis säilitab Arduino digitaalseid I/O -kontakte. Kasutades kaheksat MCP23017 -d, saate korraga lugeda 32 numbrit. Nautige seda!

Saate tellida PMD Waylt nii BCD kui ka kümnendlüliteid erinevates suurustes, tasuta kohaletoimetamisega kogu maailmas.

Selle postituse tõi teile pmdway.com - kõik tegijatele ja elektroonikahuvilistele, tasuta kohaletoimetamine kogu maailmas.

Soovitan: