Cuprins:
- Pasul 1:
- Pasul 2:
- Pasul 3:
- Pasul 4:
- Pasul 5:
- Pasul 6:
- Pasul 7: Comutatoare multiple
- Pasul 8:
- Pasul 9:
Video: Comutatoare Arduino și Thumbwheel: 9 pași
2024 Autor: John Day | [email protected]. Modificat ultima dată: 2024-01-30 11:44
În acest articol examinăm utilizarea comutatoarelor cu roată-împingere / roată cu sistemele noastre Arduino. Iată câteva exemple provenite din PMD Way.
Pasul 1:
Pentru cei neinițiați, fiecare comutator este un segment vertical și pot fi conectați împreună pentru a forma diferite dimensiuni. Puteți utiliza butoanele pentru a selecta de la cifre zero până la nouă. Există alternative disponibile care au o roată pe care o puteți deplasa cu degetul mare în loc de butoanele de mărire / micșorare.
Înainte de zilele interfețelor de utilizator elegante, aceste comutatoare erau metode destul de populare pentru setarea introducerii numerice de date. Cu toate acestea, acestea sunt încă disponibile astăzi, așa că să vedem cum funcționează și cum le putem folosi. Valoarea comutatorului este pusă la dispoziție prin zecimal codat binar sau zecimal drept. Luați în considerare partea din spate a comutatorului în formă BCD.
Pasul 2:
Avem comune în stânga, apoi contacte pentru 1, 2, 4 și 8. Dacă aplicați o tensiune mică (să zicem 5V) la comun, valoarea comutatorului poate fi măsurată adăugând valorile contactelor care sunt în Starea HIGH. De exemplu, dacă selectați 3 - contactele 1 și 2 vor fi la tensiunea comună. Valorile cuprinse între zero și nouă pot fi reprezentate ca atare în tabel.
Pasul 3:
Până acum ar trebui să vă dați seama că ar fi ușor să citiți valoarea unui comutator - și aveți dreptate, da. Putem conecta 5V la ieșirile comune la pinii de intrare digitale ai plăcilor noastre Arduino, apoi putem folosi digitalRead () pentru a determina valoarea fiecărei ieșiri. În schiță folosim câteva matematici de bază pentru a converti valoarea BCD într-un număr zecimal. Să facem asta acum.
Din punct de vedere al hardware-ului, trebuie să ținem cont încă de un lucru - comutatorul rotativ se comportă electric ca patru butoane deschise în mod normal. Aceasta înseamnă că trebuie să folosim rezistențe pull-down pentru a avea o diferență clară între stările înalte și cele joase. Deci, schema pentru un comutator este așa cum se arată mai sus.
Pasul 4:
Acum este o chestiune simplă să conectați ieșirile etichetate 1, 2, 4 și 8 la (de exemplu) pinii digitali 8, 9, 10 și 11. Conectați 5V la punctul comutatorului „C” și GND la … GND. Apoi, trebuie să avem o schiță care să poată citi intrările și să convertească ieșirea BCD în zecimal. Luați în considerare următoarea schiță:
/ * Utilizează ecranul numeric SAA1064 https://www.gravitech.us/7segmentshield.html Utilizează monitorul serial dacă nu aveți ecranul SAA1064 * / # includeți "Wire.h" #define q1 8 #define q2 9 # define q4 10 #define q8 11 void setup () {Serial.begin (9600); Wire.begin (); // alăturați autobuzului i2c (adresă opțională pentru master) întârziere (500); pinMode (q1, INPUT); // thumbwheel '1' pinMode (q2, INPUT); // thumbwheel '2' pinMode (q4, INPUT); // thumbwheel '4' pinMode (q8, INPUT); // thumbwheel '8'} void dispSAA1064 (int Count) // trimite numărul întreg 'Count' la Gravitech SAA1064 shield {const int lookup [10] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F}; int Mii, sute, zeci, bază; Wire.beginTransmission (0x38); Wire.write (0); Wire.write (B01000111); Wire.endTransmission (); Wire.beginTransmission (0x38); Wire.write (1); Mii = Număr / 1000; Sute = (Număr- (Mii * 1000)) / 100; Zeci = (Număr - ((Mii * 1000) + (Sute * 100))) / 10; Baza = Număr - ((Mii * 1000) + (Sute * 100) + (Zeci * 10)); Wire.write (căutare [bază]); Wire.write (căutare [Zeci]); Wire.write (căutare [Sute]); Wire.write (căutare [Mii]); Wire.endTransmission (); întârziere (10); } int readSwitch () {int total = 0; if (digitalRead (q1) == HIGH) {total + = 1; } if (digitalRead (q2) == HIGH) {total + = 2; } if (digitalRead (q4) == HIGH) {total + = 4; } if (digitalRead (q8) == HIGH) {total + = 8; } returnare totală; } void loop () {dispSAA1064 (readSwitch ()); // trimite valoarea comutatorului pentru a afișa ecranul Serial.println (readSwitch ()); // trimite valoarea comutatorului la caseta monitorului serial}
Funcția readSwitch () este cheia. Calculează valoarea comutatorului adăugând reprezentarea numerică a fiecărei ieșiri a comutatorului și returnează totalul ca rezultat. Pentru acest exemplu am folosit un ecran numeric care este controlat de NXP SAA1064.
Pasul 5:
Funcția readSwitch () este cheia. Calculează valoarea comutatorului adăugând reprezentarea numerică a fiecărei ieșiri a comutatorului și returnează totalul ca rezultat. Pentru acest exemplu am folosit un ecran numeric care este controlat de NXP SAA1064.
Dacă nu aveți unul, este ok - rezultatele sunt trimise și la monitorul serial. Acum, să-l vedem în acțiune în videoclip.
Pasul 6:
Ok, nu arată prea mult, dar dacă aveți nevoie de introducere numerică, economisește mult spațiu fizic și oferă o metodă precisă de introducere.
Deci, iată-l. Le-ați folosi de fapt într-un proiect? Pentru o cifră - da. Pentru patru? Probabil că nu - poate ar fi mai ușor să folosiți o tastatură cu 12 cifre. Există o idee …
Pasul 7: Comutatoare multiple
Acum vom examina cum să citiți patru cifre - și să nu pierdeți toți acei pins digitali în proces. În schimb, vom folosi un microchip MCP23017 pe 16 biți pentru expansiunea portului care comunică prin magistrala I2C. Are șaisprezece pini de intrare / ieșire digitale pe care îi putem folosi pentru a citi starea fiecărui comutator.
Înainte de a merge mai departe, vă rugăm să rețineți că sunt necesare anumite cunoștințe presupuse pentru acest articol - autobuzul I2C (părțile unu și două) și MCP23017. Mai întâi vom descrie conexiunile hardware, apoi schița Arduino. Reamintim schema utilizată pentru exemplul de comutator unic.
Când comutatorul a fost conectat direct la Arduino, citim starea fiecărui pin pentru a determina valoarea comutatorului. Vom face acest lucru din nou, pe o scară mai mare, folosind MCP23017. Luați în considerare diagrama pinout:
Pasul 8:
Avem 16 pini, ceea ce permite conectarea a patru comutatoare. Comunele pentru fiecare comutator se conectează în continuare la 5V și fiecare contact de comutare are încă un rezistor de 10k la GND. Apoi conectăm 1, 2, 4, 8 pini ai cifrei unu la GPBA0 ~ 3; cifrele două 1, 2, 4, 8 la GPA4 ~ 7; cifrele trei 1, 2, 4, 8 la GPB0 ~ 3 și cifra patru 1, 2, 4, 8 la GPB4 ~ 7.
Acum, cum citim comutatoarele? Toate aceste fire vă pot face să credeți că este dificil, dar schița este destul de simplă. Când citim valoarea GPBA și B, se returnează un octet pentru fiecare bancă, cu primul bit cel mai semnificativ. Fiecare patru biți se va potrivi cu setarea comutatorului conectat la pinii I / O potrivite. De exemplu, dacă solicităm date pentru ambele bănci IO și comutatoarele sunt setate la 1 2 3 4 - banca A va returna 0010 0001 și banca B va returna 0100 0011.
Folosim câteva operații de schimbare a biților pentru a separa fiecare patru biți într-o variabilă separată - ceea ce ne lasă valoarea fiecărei cifre. De exemplu, pentru a separa valoarea comutatorului patru, schimbăm biții din banca B >> 4. Aceasta împinge valoarea comutatorului trei afară, iar biții goi din stânga devin zero.
Pentru a separa valoarea pentru comutatorul trei, folosim un compus în sensul bitului & - care lasă valoarea comutatorului trei. Imaginea prezintă o defalcare a valorilor comutatorului binar - afișează valorile brute GPIOA și B, apoi valoarea binară a fiecărei cifre și valoarea zecimală.
Pasul 9:
Așadar, să vedem schița demonstrativă:
/ * Exemplul 40a - Citiți patru comutatoare BCD cu volană prin MCP23017, afișați pe SAA1064 / afișaj LED cu 4 segmente din 7 segmente * / // MCP23017 pinii 15 ~ 17 la GND, adresa magistralei I2C este 0x20 // SAA1064 Adresa magistralei I2C 0x38 # includeți „Wire.h” // pentru definițiile cifrelor LED int cifre [16] = {63, 6, 91, 79, 102, 109, 125, 7, 127, 111, 119, 124, 57, 94, 121, 113 }; octet GPIOA, GPIOB, dig1, dig2, dig3, dig4; void initSAA1064 () {// setup 0x38 Wire.beginTransmission (0x38); Wire.write (0); Wire.write (B01000111); // ieșire 12mA, fără eliminarea cifrelor Wire.endTransmission (); } void setup () {Serial.begin (9600); Wire.begin (); // porniți autobuzul I2C initSAA1064 (); } void loop () {// citiți intrările băncii A Wire.beginTransmission (0x20); Wire.write (0x12); Wire.endTransmission (); Wire.requestFrom (0x20, 1); GPIOA = Wire.read (); // acest octet conține datele de comutare pentru cifrele 1 și 2 // citiți intrările băncii B Wire.beginTransmission (0x20); Wire.write (0x13); Wire.endTransmission (); Wire.requestFrom (0x20, 1); GPIOB = Wire.read (); // acest octet conține datele comutatorului pentru cifrele 3 și 4 // extrageți valoarea pentru fiecare comutator // dig1 LHS, dig4 RHS dig4 = GPIOB >> 4; dig3 = GPIOB & B00001111; dig2 = GPIOA >> 4; dig1 = GPIOA & B00001111; // trimiteți toate datele GPIO și de comutare individuale pe monitorul serial // pentru depanare și interesul Serial.print ("GPIOA ="); Serial.println (GPIOA, BIN); Serial.print ("GPIOB ="); Serial.println (GPIOB, BIN); Serial.println (); Serial.print ("cifra 1 ="); Serial.println (dig1, BIN); Serial.print ("cifra 2 ="); Serial.println (dig2, BIN); Serial.print ("cifra 3 ="); Serial.println (dig3, BIN); Serial.print ("cifra 4 ="); Serial.println (dig4, BIN); Serial.println (); Serial.print ("cifra 1 ="); Serial.println (dig1, DEC); Serial.print ("cifra 2 ="); Serial.println (dig2, DEC); Serial.print ("cifra 3 ="); Serial.println (dig3, DEC); Serial.print ("cifra 4 ="); Serial.println (dig4, DEC); Serial.println (); // trimite valoarea comutatorului la afișajul LED prin SAA1064 Wire.beginTransmission (0x38); Wire.write (1); Wire.write (cifre [dig4]); Wire.write (cifre [dig3]); Wire.write (cifre [dig2]); Wire.write (cifre [dig1]); Wire.endTransmission (); întârziere (10); întârziere (1000); }
Și pentru necredincioși … o demonstrație video.
Deci, iată-l. Patru cifre în loc de una și peste magistrala I2C conservând pinii I / O digitale Arduino. Folosind opt MCP23017, puteți citi 32 de cifre simultan. Distrează-te făcând asta!
Puteți comanda atât comutatoare BCD, cât și zecimale în diferite dimensiuni de la PMD Way, cu livrare gratuită în toată lumea.
Această postare ți-a fost adusă de pmdway.com - totul pentru producătorii și pasionații de electronice, cu livrare gratuită în toată lumea.
Recomandat:
Tastatură USB universală cu comutatoare RGB: 6 pași
Tastatură USB universală cu comutatoare RGB: În acest instructiv vă voi arăta cum să construiți propria tastatură USB personalizată care se comportă exact ca o tastatură obișnuită de computer. Puteți atribui orice combinație de taste sau secvențe de taste care trebuie apăsate în timp ce apăsați un singur buton. Puteți să îl utilizați
Cum se fac comutatoare de siguranță de interblocare pentru tăietorul laser K40: 4 pași (cu imagini)
Cum se fac comutatoare de siguranță de interblocare pentru tăietorul laser K40: EDITARE IMPORTANTĂ! Vă rugăm să nu conectați dispozitivele de blocare la rețeaua electrică a aparatului. În schimb, conectați la pinii PG de la alimentator. Vom face o actualizare completă în curând. -Tony 7 / 30-19Care este unul dintre primele sfaturi de pe internet pentru când este nou, (ma
Cum să vă construiți propriul anemometru folosind comutatoare Reed, senzor de efect Hall și câteva resturi pe Nodemcu - Partea 2 - Software: 5 pași (cu imagini)
Cum să vă construiți propriul anemometru folosind comutatoare Reed, senzor de efect Hall și câteva fragmente pe Nodemcu - Partea 2 - Software: Introducere Aceasta este continuarea primului post „Cum să vă construiți propriul anemometru folosind comutatoare Reed, senzor de efect Hall și câteva fragmente pe Nodemcu - Partea 1 - Hardware " - unde vă arăt cum să asamblați viteza vântului și măsurarea direcției
100+ comutatoare într-un singur pin de Arduino: 6 pași (cu imagini)
100+ comutatoare într-un singur pin al Arduino: Introducere Ați epuizat pinii de intrare? Nu vă faceți griji, iată o soluție fără registre de schimbare. În acest videoclip, vom învăța despre conectarea a mai mult de 100 de comutatoare la un singur pin al Arduino
Controlul unui servomotor RC cu un Arduino și două comutatoare momentane: 4 pași
Controlul unui servomotor RC cu un Arduino și două comutatoare momentane: numele spune totul. Controlul unui servo motor RC cu un Arduino și câteva rezistențe, fire jumper și două comutatoare tactile. Am făcut asta în a doua zi când mi-am luat Arduino, așa că sunt destul de mândru de mine