Tartalomjegyzék:

Arduino és Hüvelykerék kapcsolók: 9 lépés
Arduino és Hüvelykerék kapcsolók: 9 lépés

Videó: Arduino és Hüvelykerék kapcsolók: 9 lépés

Videó: Arduino és Hüvelykerék kapcsolók: 9 lépés
Videó: ARDUINO: QUÉ ES, CÓMO FUNCIONA y PARA QUÉ se puede UTILIZAR 2024, November
Anonim
Arduino és Hüvelykerék kapcsolók
Arduino és Hüvelykerék kapcsolók

Ebben a cikkben megvizsgáljuk a toló-/hüvelykerekek használatát az Arduino rendszereinknél. Íme néhány példa a PMD Way -ből.

1. lépés:

Kép
Kép

Az avatatlanok számára minden kapcsoló egy függőleges szegmens, és összekapcsolhatók különböző méretűek. A gombokkal választhat a nulla és kilenc közötti számjegy közül. Vannak olyan alternatívák, amelyek kereke a hüvelykujjával mozgatható a növelés/csökkentés gombok helyett.

A divatos felhasználói felületek napjaiban ezek a kapcsolók meglehetősen népszerű módszerek voltak a numerikus adatbevitel beállítására. Azonban még ma is kaphatók, nézzük meg, hogyan működnek, és hogyan tudjuk használni őket. A kapcsoló értéke elérhető binárisan kódolt decimális vagy egyenes tizedes számokkal. Tekintsük a kapcsoló hátsó részét BCD formában.

2. lépés:

Kép
Kép

A bal oldalon vannak közösek, majd az 1, 2, 4 és 8 érintkezők. Ha kis feszültséget (mondjuk 5V) kapcsol a közösre, a kapcsoló értéke a csatlakozóban lévő érintkezők értékeinek hozzáadásával mérhető. HIGH állapot. Például, ha a 3 lehetőséget választja - az 1. és 2. érintkezők közös feszültségűek lesznek. A táblázatban a nulla és kilenc közötti értékek jeleníthetők meg.

3. lépés:

Kép
Kép

Mostanra fel kell ismernie, hogy könnyű lenne leolvasni a kapcsoló értékét - és igazad van. Csatlakoztathatunk 5 V -ot a közöshöz, a kimeneteket az Arduino lapjaink digitális bemeneti csapjaihoz, majd a digitalRead () segítségével határozzuk meg az egyes kimenetek értékét. A vázlatban néhány alapvető matematikát használunk a BCD érték tizedes számmá alakításához. Tehát most tegyük ezt.

Hardveres szempontból még egy dolgot kell figyelembe vennünk-a nyomógombos kapcsoló villamosan viselkedik, mint négy normál nyitott nyomógomb. Ez azt jelenti, hogy lehúzható ellenállásokat kell használnunk annak érdekében, hogy egyértelmű különbség legyen a magas és az alacsony állapot között. Tehát az egyik kapcsoló vázlata a fentiek szerint látható.

4. lépés:

Most már egyszerű dolog az 1 -es, 2 -es, 4 -es és 8 -as jelű kimeneteket (például) a 8, 9, 10 és 11 digitális tüskékhez csatlakoztatni. Csatlakoztassa az 5V -ot a „C” ponthoz, a GND -t pedig a… GND -hez. Ezután rendelkeznünk kell egy vázlattal, amely ki tudja olvasni a bemeneteket, és a BCD kimenetét tizedesre konvertálni. Tekintsük a következő vázlatot:

/ * SAA1064 numerikus kijelzőpajzsot használ https://www.gravitech.us/7segmentshield.html Soros monitort használ, ha nincs SAA1064 pajzsa */ #tartalmazza a „Wire.h” #define q1 8 #define q2 9 # define q4 10 #define q8 11 void setup () {Serial.begin (9600); Wire.begin (); // csatlakozás i2c buszhoz (a cím opcionális a mester számára) késleltetés (500); pinMode (q1, BEMENET); // thumbwheel '1' pinMode (q2, INPUT); // thumbwheel '2' pinMode (q4, INPUT); // thumbwheel '4' pinMode (q8, INPUT); // thumbwheel '8'} void dispSAA1064 (int Count) // egész „Count” értéket küld a Gravitech SAA1064 pajzsának {const int lookup [10] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F}; int Több ezer, száz, tíz, bázis; Wire.beginTransmission (0x38); Vezeték.írás (0); Wire.write (B01000111); Wire.endTransmission (); Wire.beginTransmission (0x38); Wire.write (1); Ezrek = gróf/1000; Százak = (Szám- (Ezrek*1000))/100; Tízes = (Szám-((Ezer*1000)+(Száz*100)))/10; Bázis = Szám-((Ezer*1000)+(Száz*100)+(Tíz*10)); Wire.write (lookup [Base]); Wire.write (lookup [Tens]); Wire.write (keresés [Százak]); Wire.write (lookup [Ezrek]); Wire.endTransmission (); késleltetés (10); } int readSwitch () {int összesen = 0; if (digitalRead (q1) == HIGH) {összesen+= 1; } if (digitalRead (q2) == HIGH) {összesen+= 2; } if (digitalRead (q4) == HIGH) {összesen+= 4; } if (digitalRead (q8) == HIGH) {összesen+= 8; } visszatérési összeg; } void loop () {dispSAA1064 (readSwitch ()); // elküldi a kapcsoló értékét a pajzs megjelenítésére Serial.println (readSwitch ()); // elküldi a kapcsoló értékét a soros monitor dobozába}

A readSwitch () függvény a kulcs. Kiszámítja a kapcsoló értékét az egyes kapcsoló kimenetek számszerű ábrázolásának hozzáadásával, és az eredményt adja vissza. Ebben a példában egy numerikus kijelzővédőt használtunk, amelyet az NXP SAA1064 vezérel.

5. lépés:

Image
Image

A readSwitch () függvény a kulcs. Kiszámítja a kapcsoló értékét az egyes kapcsoló kimenetek számszerű ábrázolásának hozzáadásával, és az eredményt adja vissza. Ebben a példában egy numerikus kijelzővédőt használtunk, amelyet az NXP SAA1064 vezérel.

Ha nincs ilyen, akkor rendben van - az eredményeket a soros monitorra is elküldik. Most lássuk, hogyan működik a videóban.

6. lépés:

Ok, nem tűnik soknak, de ha numerikus bevitelre van szüksége, akkor sok fizikai helyet takarít meg, és pontos beviteli módot kínál.

Szóval ott van. Valóban felhasználná ezeket egy projektben? Egy számjegyre - igen. Négynek? Valószínűleg nem-talán egyszerűbb lenne egy 12 számjegyű billentyűzetet használni. Van egy ötlet…

7. lépés: Több kapcsoló

Kép
Kép

Most megvizsgáljuk, hogyan kell négy számjegyet leolvasni - és ne pazaroljuk el ezeket a digitális csapokat. Ehelyett a Microchip MCP23017 16 bites portbővítő IC-t fogjuk használni, amely az I2C buszon keresztül kommunikál. Tizenhat digitális bemeneti/kimeneti tűvel rendelkezik, amelyekkel kiolvashatjuk az egyes kapcsolók állapotát.

Mielőtt továbblépne, vegye figyelembe, hogy ehhez a cikkhez bizonyos feltételezett ismeretekre van szükség - az I2C buszra (első és második rész) és az MCP23017 -re. Először leírjuk a hardverkapcsolatokat, majd az Arduino vázlatot. Idézze fel az egyetlen kapcsoló példájához használt vázlatot.

Amikor a kapcsoló közvetlenül az Arduino -hoz volt csatlakoztatva, kiolvastuk az egyes tüskék állapotát, hogy meghatározzuk a kapcsoló értékét. Ezt megismételjük, nagyobb léptékben az MCP23017 használatával. Tekintsük a pinout diagramot:

8. lépés:

16 érintkezővel rendelkezünk, ami lehetővé teszi négy kapcsoló csatlakoztatását. Az egyes kapcsolók közös eszközei továbbra is 5V-ra csatlakoznak, és minden kapcsolóérintkezőnek van még 10k lehúzható ellenállása a GND-hez. Ezután az első számjegy 1, 2, 4, 8 érintkezőit a GPBA0 ~ 3 -hoz kapcsoljuk; kettes számjegy 1, 2, 4, 8 GPA4 ~ 7 -ig; a hármas számjegy 1, 2, 4, 8 a GPB0 ~ 3 -ra, a négyes számjegy pedig az 1, 2, 4, 8 a GPB4 ~ 7 -re.

Most hogyan olvassuk a kapcsolókat? Mindezek a vezetékek azt eredményezhetik, hogy nehéz, de a vázlat meglehetősen egyszerű. Amikor leolvassuk a GPBA és a B értékét, minden bankhoz egy bájt kerül vissza, először a legjelentősebb bit. Mind a négy bit megegyezik a megfelelő I/O csapokhoz csatlakoztatott kapcsoló beállításával. Például, ha mindkét IO bank adatait kérjük, és a kapcsolók 1 2 3 4 -re vannak állítva - az A bank 0010 0001 -et, a B bank pedig 0100 0011 -et ad vissza.

Néhány bitshift műveletet használunk, hogy minden négy bitet külön változóba válasszunk - így minden számjegy értéke megmarad. Például, hogy elkülönítsük a negyedik kapcsoló értékét, eltoljuk a biteket a B >> 4. bankból. Ez a harmadik kapcsoló értékét tolja ki, és a bal oldali üres bitek nullává válnak.

A harmadik kapcsoló értékének szétválasztásához egy bitösszetételű & - vegyületet használunk -, amely elhagyja a harmadik kapcsoló értékét. A kép a bináris kapcsoló értékeinek lebontását mutatja - a nyers GPIOA és B byte értékeket, majd az egyes számjegyek bináris értékét és a tizedes értéket.

9. lépés:

Lássuk tehát a bemutató vázlatot:

/ * 40a példa-Olvassa el négy nyomógombos BCD kapcsolót az MCP23017-en keresztül, jelenítse meg a SAA1064-et/4 számjegyű 7 szegmenses LED-kijelző */// Az MCP23017 15–17-es csapjai a GND-hez, az I2C busz címe 0x20 // SAA1064 I2C busz címe 0x38 # tartalmazza a "Wire.h" // LED -es számjegy -meghatározásokat int számjegyekben [16] = {63, 6, 91, 79, 102, 109, 125, 7, 127, 111, 119, 124, 57, 94, 121, 113 }; bájt GPIOA, GPIOB, dig1, dig2, dig3, dig4; void initSAA1064 () {// setup 0x38 Wire.beginTransmission (0x38); Vezeték.írás (0); Wire.write (B01000111); // 12mA kimenet, nincs számjegy -törlés Wire.endTransmission (); } void setup () {Serial.begin (9600); Wire.begin (); // indítsa el az I2C buszt initSAA1064 (); } void loop () {// olvassa el az A bank bemeneteit Wire.beginTransmission (0x20); Wire.write (0x12); Wire.endTransmission (); Wire.requestFrom (0x20, 1); GPIOA = Wire.read (); // ez a bájt tartalmazza az 1. és 2. számjegy kapcsoló adatait // a B bank bemeneteinek beolvasása Wire.beginTransmission (0x20); Wire.write (0x13); Wire.endTransmission (); Wire.requestFrom (0x20, 1); GPIOB = Wire.read (); // ez a bájt tartalmazza a kapcsoló adatait a 3. és 4. számjegyhez // kivonat értéket minden kapcsolóhoz // dig1 LHS, dig4 RHS dig4 = GPIOB >> 4; dig3 = GPIOB & B00001111; dig2 = GPIOA >> 4; dig1 = GPIOA & B00001111; // az összes GPIO és az egyes kapcsolóadatok elküldése a soros monitorra // hibakeresés és érdekesség kedvéért Serial.print ("GPIOA ="); Serial.println (GPIOA, BIN); Serial.print ("GPIOB ="); Serial.println (GPIOB, BIN); Sorozat.println (); Serial.print ("1 -es számjegy ="); Serial.println (dig1, BIN); Serial.print ("2. számjegy ="); Serial.println (dig2, BIN); Serial.print ("3. számjegy ="); Serial.println (dig3, BIN); Serial.print ("4. számjegy ="); Serial.println (dig4, BIN); Sorozat.println (); Serial.print ("1 -es számjegy ="); Serial.println (dig1, DEC); Serial.print ("2. számjegy ="); Soros.println (dig2, DEC); Serial.print ("3. számjegy ="); Soros.println (dig3, DEC); Serial.print ("4. számjegy ="); Soros.println (dig4, DEC); Sorozat.println (); // kapcsolóérték elküldése a LED kijelzőre SAA1064 Wire.beginTransmission (0x38) segítségével; Wire.write (1); Wire.write (számjegyek [dig4]); Wire.write (számjegyek [dig3]); Wire.write (számjegyek [dig2]); Wire.write (számjegyek [dig1]); Wire.endTransmission (); késleltetés (10); késleltetés (1000); }

És a nem hívőknek… videó bemutató.

Szóval ott van. Négy számjegy egy helyett, és az I2C busz felett, amely az Arduino digitális I/O érintkezőit őrzi. Nyolc MCP23017s használatával egyszerre 32 számjegyet olvashat. Jó szórakozást ehhez!

Különböző méretű BCD és tizedes kapcsolókat is rendelhet a PMD Way -től, ingyenes szállítással világszerte.

Ezt a bejegyzést a pmdway.com hozta neked - mindent a gyártóknak és az elektronika rajongóinak, ingyenes szállítással világszerte.

Ajánlott: