Satura rādītājs:

Arduino un īkšķa slēdži: 9 soļi
Arduino un īkšķa slēdži: 9 soļi

Video: Arduino un īkšķa slēdži: 9 soļi

Video: Arduino un īkšķa slēdži: 9 soļi
Video: Arduino UNO and Mega Windows 7, 8, 10 USB driver Solved 2024, Novembris
Anonim
Arduino un īkšķa slēdži
Arduino un īkšķa slēdži

Šajā rakstā mēs aplūkojam stūres rata/īkšķa slēdžu izmantošanu mūsu Arduino sistēmās. Šeit ir daži piemēri, kas iegūti no PMD Way.

1. darbība:

Attēls
Attēls

Nezinātājiem katrs slēdzis ir viens vertikāls segments, un tos var savienot kopā, veidojot dažādus izmērus. Varat izmantot pogas, lai atlasītu ciparus no nulles līdz deviņiem. Ir pieejamas alternatīvas, kurām ir ritenis, kuru var pārvietot ar īkšķi, nevis palielināt/samazināt.

Pirms iedomātā lietotāja interfeisa laikiem šie slēdži bija diezgan populāras metodes ciparu datu ievades iestatīšanai. Tomēr tie joprojām ir pieejami arī šodien, tāpēc apskatīsim, kā tie darbojas un kā mēs tos varam izmantot. Slēdža vērtība ir pieejama, izmantojot bināri kodētu decimāldaļu vai taisnu decimāldaļu. Apsveriet slēdža aizmuguri BCD formā.

2. darbība:

Attēls
Attēls

Mums ir kopīgs kreisajā pusē, tad kontakti 1, 2, 4 un 8. Ja kopējam pievienojat nelielu spriegumu (teiksim 5 V), slēdža vērtību var izmērīt, pievienojot kontaktos esošās vērtības HIGH stāvoklis. Piemēram, ja izvēlaties 3 - kontakti 1 un 2 būs pie kopējā sprieguma. Tabulā var attēlot vērtības no nulles līdz deviņām.

3. darbība:

Attēls
Attēls

Tagad jums vajadzētu saprast, ka būtu viegli nolasīt slēdža vērtību - un jums ir taisnība. Mēs varam savienot 5V ar kopējo, izejas uz mūsu Arduino plates digitālās ieejas tapām, pēc tam izmantot digitalRead (), lai noteiktu katras izejas vērtību. Skicē mēs izmantojam dažus matemātikas pamatus, lai BCD vērtību pārvērstu par decimāldaļu. Tāpēc darīsim to tagad.

No aparatūras viedokļa mums jāņem vērā vēl viena lieta-stūres riteņa slēdzis darbojas elektriski kā četras parasti atvērtas spiedpogas. Tas nozīmē, ka mums ir jāizmanto nolaižamie rezistori, lai būtu skaidra atšķirība starp augstu un zemu stāvokli. Tātad viena slēdža shēma ir tāda, kā parādīts iepriekš.

4. solis:

Tagad ir vienkārši savienot izejas ar apzīmējumu 1, 2, 4 un 8 ar (piemēram) digitālajām tapām 8, 9, 10 un 11. Pievienojiet 5V slēdža “C” punktam, bet GND -… GND. Tālāk mums ir jābūt skicei, kas var nolasīt ieejas un pārvērst BCD izvadi decimālā. Apsveriet šādu skici:

/ * Izmanto SAA1064 ciparu displeja vairogu https://www.gravitech.us/7segmentshield.html Izmanto seriālo monitoru, ja jums nav vairoga SAA1064 */#iekļauj "Wire.h" #define q1 8 #define q2 9 # definēt q4 10 #define q8 11 void setup () {Serial.begin (9600); Wire.begin (); // pievienoties i2c kopnei (adrese nav obligāta galvenajam) kavēšanās (500); pinMode (q1, INPUT); // īkšķa ritenis '1' pinMode (q2, INPUT); // īkšķa ritenis '2' pinMode (q4, INPUT); // īkšķa ritenis '4' pinMode (q8, INPUT); // thumbwheel '8'} void dispSAA1064 (int Count) // nosūta veselu skaitli 'Count' uz Gravitech SAA1064 vairogu {const int lookup [10] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F}; int Tūkstošiem, simtiem, desmitiem, bāzes; Wire.beginTransmission (0x38); Wire.write (0); Wire.write (B01000111); Wire.endTransmission (); Wire.beginTransmission (0x38); Wire.write (1); Tūkstošiem = skaits/1000; Simtiem = (Skaits- (Tūkstošiem*1000))/100; Desmitiem = (skaits-((tūkstošiem*1000)+(simtiem*100)))/10; Bāze = skaits-((tūkstošiem*1000)+(simtiem*100)+(desmitiem*10)); Wire.write (lookup [Base]); Wire.write (uzmeklēšana [desmitiem]); Wire.write (uzmeklēt [Simtiem]); Wire.write (uzmeklēt [Tūkstošiem]); Wire.endTransmission (); kavēšanās (10); } int readSwitch () {int kopā = 0; ja (digitalRead (q1) == HIGH) {kopā+= 1; } ja (digitalRead (q2) == HIGH) {kopā+= 2; } ja (digitalRead (q4) == HIGH) {kopā+= 4; } ja (digitalRead (q8) == HIGH) {kopā+= 8; } atgriešanās kopā; } void loop () {dispSAA1064 (readSwitch ()); // nosūta slēdža vērtību, lai parādītu vairogu Serial.println (readSwitch ()); // nosūta slēdža vērtību seriālā monitora lodziņam}

Funkcija readSwitch () ir atslēga. Tas aprēķina slēdža vērtību, pievienojot katras slēdža izejas skaitlisko attēlojumu, un tā rezultātā atgriež kopsummu. Šajā piemērā mēs izmantojām ciparu displeja vairogu, ko kontrolē NXP SAA1064.

5. darbība:

Image
Image

Funkcija readSwitch () ir atslēga. Tas aprēķina slēdža vērtību, pievienojot katras slēdža izejas skaitlisko attēlojumu, un tā rezultātā atgriež kopsummu. Šajā piemērā mēs izmantojām ciparu displeja vairogu, ko kontrolē NXP SAA1064.

Ja jums tāda nav, tas ir labi - rezultāti tiek nosūtīti arī uz seriālo monitoru. Tagad redzēsim to darbībā videoklipā.

6. darbība

Labi, tas neizskatās daudz, bet, ja jums ir nepieciešama ciparu ievadīšana, tas ietaupa daudz fiziskās vietas un piedāvā precīzu ievades metodi.

Tātad, jums tas ir. Vai jūs tiešām tos izmantotu projektā? Par vienu ciparu - jā. Par četriem? Droši vien nē-varbūt būtu vieglāk izmantot 12 ciparu tastatūru. Ir ideja…

7. solis: vairāki slēdži

Attēls
Attēls

Tagad mēs pārbaudīsim, kā nolasīt četrus ciparus, un šajā procesā netērēsim visas šīs digitālās tapas. Tā vietā mēs izmantosim Microchip MCP23017 16 bitu portu paplašinātāju IC, kas sazinās, izmantojot I2C kopni. Tam ir sešpadsmit digitālās ievades/izvades tapas, kuras mēs varam izmantot, lai nolasītu katra slēdža statusu.

Pirms virzīties uz priekšu, lūdzu, ņemiet vērā, ka šim rakstam ir nepieciešamas zināmas zināšanas - I2C kopne (pirmā un otrā daļa) un MCP23017. Vispirms mēs aprakstīsim aparatūras savienojumus un pēc tam Arduino skici. Atgādiniet shematisko shēmu, kas izmantota viena slēdža piemērā.

Kad slēdzis bija tieši savienots ar Arduino, mēs nolasījām katras tapas statusu, lai noteiktu slēdža vērtību. Mēs to darīsim vēlreiz, plašākā mērogā, izmantojot MCP23017. Apsveriet pinout diagrammu:

8. darbība

Mums ir 16 tapas, kas ļauj savienot četrus slēdžus. Katra slēdža kopīgie joprojām ir savienoti ar 5V, un katram slēdža kontaktam joprojām ir 10k nolaižamais rezistors GND. Tad mēs pievienojam 1, 2, 4, 8 viena ciparu tapas ar GPBA0 ~ 3; ciparu divi 1, 2, 4, 8 līdz GPA4 ~ 7; trīsciparu skaitļi 1, 2, 4, 8 līdz GPB0 ~ 3 un ceturtie cipari 1, 2, 4, 8 līdz GPB4 ~ 7.

Tagad kā mēs lasām slēdžus? Visi šie vadi var likt jums domāt, ka tas ir grūti, taču skice ir pavisam vienkārša. Izlasot GPBA un B vērtību, katrai bankai tiek atgriezts viens baits, vispirms ievadot visnozīmīgāko bitu. Katrs četrs bits atbilst slēdža iestatījumam, kas savienots ar atbilstošajām I/O tapām. Piemēram, ja mēs pieprasām datus par abām IO bankām un slēdži ir iestatīti uz 1 2 3 4 - banka A atgriezīs 0010 0001, bet banka B - 0100 0011.

Mēs izmantojam dažas bitu nobīdes darbības, lai atdalītu katru četru bitu atsevišķā mainīgajā - kas atstāj mums katra cipara vērtību. Piemēram, lai atdalītu ceturtā slēdža vērtību, mēs pārvietojam bitus no bankas B >> 4. Tas izspiež slēdža trīs vērtību, un tukšie biti kreisajā pusē kļūst par nulli.

Lai atdalītu trīs slēdža vērtību, mēs izmantojam saliktu bitu un -, kas atstāj trešā slēdža vērtību. Attēlā ir parādīts bināro slēdžu vērtību sadalījums - tas parāda neapstrādātas GPIOA un B baitu vērtības, pēc tam katra cipara bināro vērtību un decimālo vērtību.

9. darbība

Tātad, aplūkosim demonstrācijas skici:

/ * 40a piemērs-nolasiet četrus riteņa BCD slēdžus, izmantojot MCP23017, displeju uz SAA1064/4 ciparu 7 segmentu LED displeju */// MCP23017 piespraudes 15 ~ 17 līdz GND, I2C kopnes adrese ir 0x20 // SAA1064 I2C kopnes adrese 0x38 # iekļaut "Wire.h" // LED ciparu definīcijām int ciparos [16] = {63, 6, 91, 79, 102, 109, 125, 7, 127, 111, 119, 124, 57, 94, 121, 113 }; baits GPIOA, GPIOB, dig1, dig2, dig3, dig4; void initSAA1064 () {// setup 0x38 Wire.beginTransmission (0x38); Wire.write (0); Wire.write (B01000111); // 12mA izeja, bez cipariem tukšs Wire.endTransmission (); } void setup () {Serial.begin (9600); Wire.begin (); // palaišana I2C kopne initSAA1064 (); } void loop () {// lasīt bankas A Wire ievades datus.beginTransmission (0x20); Wire.write (0x12); Wire.endTransmission (); Wire.requestFrom (0x20, 1); GPIOA = Wire.read (); // šajā baitā ir slēdža dati par cipariem 1 un 2 // nolasiet bankas B Wire ievadi.beginTransmission (0x20); Wire.write (0x13); Wire.endTransmission (); Wire.requestFrom (0x20, 1); GPIOB = Wire.read (); // šajā baitā ir slēdža dati par cipariem 3 un 4 // ekstrakta vērtība katram slēdzim // dig1 LHS, dig4 RHS dig4 = GPIOB >> 4; dig3 = GPIOB & B00001111; dig2 = GPIOA >> 4; dig1 = GPIOA & B00001111; // nosūtīt visus GPIO un atsevišķus slēdža datus uz seriālo monitoru // atkļūdošanas un interešu labad Serial.print ("GPIOA ="); Serial.println (GPIOA, BIN); Serial.print ("GPIOB ="); Serial.println (GPIOB, BIN); Sērijas.println (); Serial.print ("cipars 1 ="); Serial.println (dig1, BIN); Serial.print ("cipars 2 ="); Serial.println (dig2, BIN); Serial.print ("cipars 3 ="); Serial.println (dig3, BIN); Serial.print ("cipars 4 ="); Serial.println (dig4, BIN); Sērijas.println (); Serial.print ("cipars 1 ="); Serial.println (dig1, DEC); Serial.print ("cipars 2 ="); Serial.println (dig2, DEC); Serial.print ("cipars 3 ="); Serial.println (dig3, DEC); Serial.print ("cipars 4 ="); Serial.println (dig4, DEC); Sērijas.println (); // nosūtīt slēdža vērtību uz LED displeju, izmantojot SAA1064 Wire.beginTransmission (0x38); Wire.write (1); Wire.write (cipari [dig4]); Wire.write (cipari [dig3]); Wire.write (cipari [dig2]); Wire.write (cipari [dig1]); Wire.endTransmission (); kavēšanās (10); kavēšanās (1000); }

Un neticīgajiem… video demonstrācija.

Tātad, jums tas ir. Četri cipari viena vietā un virs I2C kopnes, saglabājot Arduino digitālās I/O tapas. Izmantojot astoņus MCP23017, jūs varētu nolasīt 32 ciparus vienlaikus. Priecājieties to darīt!

Jūs varat pasūtīt gan BCD, gan decimālos slēdžus dažādos izmēros no PMD Way, ar bezmaksas piegādi visā pasaulē.

Šo ziņu jums sniedza pmdway.com - viss veidotājiem un elektronikas entuziastiem ar bezmaksas piegādi visā pasaulē.

Ieteicams: