Obsah:

Prepínače Arduino a Thumbwheel: 9 krokov
Prepínače Arduino a Thumbwheel: 9 krokov

Video: Prepínače Arduino a Thumbwheel: 9 krokov

Video: Prepínače Arduino a Thumbwheel: 9 krokov
Video: Arduino 64 Step Sequencer с минимальным аппаратным обеспечением, адаптированный из Drum Sequencer 2024, November
Anonim
Prepínače Arduino a Thumbwheel
Prepínače Arduino a Thumbwheel

V tomto článku skúmame používanie prepínačov typu koliesko/koliesko s našimi systémami Arduino. Tu je niekoľko príkladov pochádzajúcich z PMD Way.

Krok 1:

Obrázok
Obrázok

Pre nezainteresovaných je každý spínač jedným vertikálnym segmentom a dajú sa navzájom spojiť a vytvoriť rôzne veľkosti. Pomocou tlačidiel môžete vyberať od číslic od nuly po deväť. K dispozícii sú alternatívy, ktoré majú koliesko, ktoré môžete presúvať palcom namiesto tlačidiel na zvýšenie/zníženie.

Pred dobami efektných používateľských rozhraní boli tieto prepínače veľmi obľúbenou metódou na zadávanie číselných údajov. Napriek tomu sú stále k dispozícii, takže sa pozrime, ako fungujú a ako ich môžeme použiť. Hodnota prepínača je k dispozícii prostredníctvom binárne kódovaných desatinných alebo desatinných miest. Zvážte zadnú časť prepínača vo forme BCD.

Krok 2:

Obrázok
Obrázok

Vľavo máme spoločné, potom kontakty pre 1, 2, 4 a 8. Ak na spoločné použijete malé napätie (povedzme 5V), hodnotu spínača je možné merať sčítaním hodnôt kontaktov, ktoré sú v VYSOKÝ stav. Ak napríklad vyberiete 3 - kontakty 1 a 2 budú na spoločnom napätí. Hodnoty medzi nulou a deviatimi môžu byť v tabuľke reprezentované ako také.

Krok 3:

Obrázok
Obrázok

Teraz by ste si mali uvedomiť, že by bolo ľahké prečítať hodnotu prepínača - a máte pravdu, je to tak. Môžeme pripojiť 5 V na spoločný, výstupy na digitálne vstupné piny našich dosiek Arduino, potom pomocou digitalRead () určiť hodnotu každého výstupu. V náčrte použijeme základnú matematiku na prevod hodnoty BCD na desatinné číslo. Tak to urobme teraz.

Z hľadiska hardvéru musíme vziať do úvahy ešte jednu vec-spínač na volante sa správa elektricky ako štyri normálne otvorené tlačidlá. To znamená, že musíme použiť sťahovacie odpory, aby sme mali jasný rozdiel medzi vysokými a nízkymi stavmi. Schéma pre jeden prepínač je teda uvedená vyššie.

Krok 4:

Teraz je jednoduché pripojiť výstupy označené 1, 2, 4 a 8 na (napríklad) digitálne piny 8, 9, 10 a 11. Pripojte 5V k prepínaciemu bodu „C“a GND k … GND. Ďalej musíme mať náčrt, ktorý dokáže čítať vstupy a prevádzať výstup BCD na desatinné miesto. Zvážte nasledujúci náčrt:

/ * Používa štít na numerický displej SAA1064 https://www.gravitech.us/7segmenthield.html Používa sériový monitor, ak nemáte štít SAA1064 */#include "Wire.h" #define q1 8 #define q2 9 # definujte q4 10 #define q8 11 void setup () {Serial.begin (9600); Wire.begin (); // pripojenie i2c zbernice (adresa voliteľná pre master) zdržanie (500); pinMode (q1, INPUT); // koliesko '1' pinMode (q2, INPUT); // koliesko '2' pinMode (q4, INPUT); // koliesko '4' pinMode (q8, INPUT); // koliesko '8'} neplatné dispSAA1064 (int Count) // pošle celočíselné 'Count' na štít Gravitech SAA1064 {const int lookup [10] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F}; int Tisíce, stovky, desiatky, základňa; Wire.beginTransmission (0x38); Wire.write (0); Wire.write (B01000111); Wire.endTransmission (); Wire.beginTransmission (0x38); Wire.write (1); Tisíce = počet/1000; Stovky = (Počet- (Tisíce*1000))/100; Desiatky = (počet-((tisíce*1000)+(stovky*100)))/10; Základňa = počet-((tisíce*1 000)+(stovky*100)+(desiatky*10)); Wire.write (vyhľadávanie [základňa]); Wire.write (vyhľadávanie [desiatky]); Wire.write (vyhľadávanie [stovky]); Wire.write (vyhľadávanie [tisíce]); Wire.endTransmission (); oneskorenie (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; } celkový výnos; } prázdna slučka () {dispSAA1064 (readSwitch ()); // pošle hodnotu prepínača na displej štít Serial.println (readSwitch ()); // pošle hodnotu prepínača do poľa sériového monitora}

Funkcia readSwitch () je kľúčová. Vypočíta hodnotu prepínača sčítaním numerického znázornenia každého výstupu spínača a ako výsledok vráti súčet. V tomto prípade sme použili numerický štít displeja, ktorý je ovládaný NXP SAA1064.

Krok 5:

Image
Image

Funkcia readSwitch () je kľúčová. Vypočíta hodnotu prepínača sčítaním numerického znázornenia každého výstupu spínača a ako výsledok vráti súčet. V tomto prípade sme použili numerický štít displeja, ktorý je ovládaný NXP SAA1064.

Ak ho nemáte, je to v poriadku - výsledky sa odošlú aj na sériový monitor. Teraz sa na to pozrime v praxi vo videu.

Krok 6:

Ok, nevyzerá to veľa, ale ak potrebujete numerické zadanie, ušetrí to veľa fyzického priestoru a ponúka presný spôsob zadávania.

Tak tu to máte. Skutočne by ste ich použili v projekte? Na jednu číslicu - áno. Za štyroch? Pravdepodobne nie-možno by bolo jednoduchšie použiť 12-miestnu klávesnicu. Existuje nápad…

Krok 7: Viaceré prepínače

Obrázok
Obrázok

Teraz preskúmame, ako čítať štyri číslice - a neplytvať pri tom všetkými tými digitálnymi pinmi. Namiesto toho použijeme IC 16-bitový expandér portov Microchip MCP23017, ktorý komunikuje cez zbernicu I2C. Má šestnásť digitálnych vstupných/výstupných pinov, ktoré môžeme použiť na čítanie stavu každého prepínača.

Predtým, ako sa pohneme vpred, upozorňujeme, že pre tento článok sú potrebné určité predpokladané znalosti - zbernica I2C (časť jedna a dve) a MCP23017. Najprv popíšeme hardvérové pripojenia a potom skicu Arduino. Pripomeňme si schému použitú pre príklad jedného prepínača.

Keď bol spínač priamo pripojený k Arduinu, odčítali sme stav každého pinu, aby sme určili hodnotu spínača. Urobíme to znova, vo väčšom meradle pomocou MCP23017. Zvážte diagram vývodov:

Krok 8:

Máme 16 pinov, čo umožňuje pripojenie štyroch prepínačov. Spoločné signály pre každý prepínač sa stále pripájajú na 5 V a každý prepínací kontakt má stále 10k sťahovací odpor k GND. Potom pripojíme 1, 2, 4, 8 pinov číslice jedna k GPBA0 ~ 3; číslica dva je 1, 2, 4, 8 až GPA4 ~ 7; číslice tri 1, 2, 4, 8 až GPB0 ~ 3 a číslice štyri 1, 2, 4, 8 až GPB4 ~ 7.

Ako teraz čítame prepínače? Všetky tieto drôty môžu spôsobiť, že si myslíte, že je to ťažké, ale náčrt je celkom jednoduchý. Keď čítame hodnotu GPBA a B, pre každú banku sa vráti jeden bajt, pričom ako prvý sa použije najdôležitejší bit. Každé štyri bity budú zodpovedať nastaveniam prepínača pripojeného k zodpovedajúcim I/O kolíkom. Ak napríklad požadujeme údaje pre banky IO a prepínače sú nastavené na 1 2 3 4 - banka A vráti 0010 0001 a banka B vráti 0100 0011.

Niektoré operácie bitového posuvu používame na oddelenie každých štyroch bitov do samostatnej premennej - čo nám ponecháva hodnotu každej číslice. Napríklad, aby sme oddelili hodnotu prepínača štyri, posunieme bity z banky B >> 4. Tým sa hodnota prepínača tri vytlačí von a prázdne bity vľavo sa stanú nulovými.

Na oddelenie hodnoty pre prepínač tri použijeme kombináciu bitov & -, ktorá ponechá hodnotu prepínača tri. Obrázok ukazuje rozpis hodnôt binárnych prepínačov - ukazuje surové hodnoty bajtov GPIOA a B, potom binárne hodnoty každej číslice a desatinnú hodnotu.

Krok 9:

Pozrime sa teda na ukážkový náčrt:

/ * Príklad 40a-Načítajte štyri tlačidlá BCD prepínača cez MCP23017, displej na SAA1064/4-miestny 7-segmentový LED displej */// MCP23017 piny 15 ~ 17 na GND, adresa zbernice I2C je 0x20 // Adresa zbernice SAA1064 I2C 0x38 # zahrnúť „Wire.h“// pre definície číslic LED int číslice [16] = {63, 6, 91, 79, 102, 109, 125, 7, 127, 111, 119, 124, 57, 94, 121, 113 }; bajt GPIOA, GPIOB, dig1, dig2, dig3, dig4; void initSAA1064 () {// nastavenie 0x38 Wire.beginTransmission (0x38); Wire.write (0); Wire.write (B01000111); // výstup 12mA, bez zatemnenia číslice Wire.endTransmission (); } neplatné nastavenie () {Serial.begin (9600); Wire.begin (); // spustenie zbernice I2C initSAA1064 (); } void loop () {// prečítajte vstupy banky A Wire.beginTransmission (0x20); Wire.write (0x12); Wire.endTransmission (); Wire.requestFrom (0x20, 1); GPIOA = Wire.read (); // tento bajt obsahuje údaje prepínača pre číslice 1 a 2 // číta vstupy banky B Wire.beginTransmission (0x20); Wire.write (0x13); Wire.endTransmission (); Wire.requestFrom (0x20, 1); GPIOB = Wire.read (); // tento bajt obsahuje údaje prepínača pre číslice 3 a 4 // extrahujúca hodnota pre každý prepínač // dig1 LHS, dig4 RHS dig4 = GPIOB >> 4; dig3 = GPIOB & B00001111; dig2 = GPIOA >> 4; dig1 = GPIOA & B00001111; // odoslanie všetkých údajov GPIO a jednotlivých prepínačov na sériový monitor // kvôli ladeniu a záujmu Serial.print ("GPIOA ="); Serial.println (GPIOA, BIN); Serial.print ("GPIOB ="); Serial.println (GPIOB, BIN); Serial.println (); Serial.print ("číslica 1 ="); Serial.println (dig1, BIN); Serial.print ("číslica 2 ="); Serial.println (dig2, BIN); Serial.print ("číslica 3 ="); Serial.println (dig3, BIN); Serial.print ("číslica 4 ="); Serial.println (dig4, BIN); Serial.println (); Serial.print ("číslica 1 ="); Serial.println (dig1, DEC); Serial.print ("číslica 2 ="); Serial.println (dig2, DEC); Serial.print ("číslica 3 ="); Serial.println (dig3, DEC); Serial.print ("číslica 4 ="); Serial.println (dig4, DEC); Serial.println (); // odoslanie hodnoty spínača na LED displej cez SAA1064 Wire.beginTransmission (0x38); Wire.write (1); Wire.write (číslice [dig4]); Wire.write (číslice [dig3]); Wire.write (číslice [dig2]); Wire.write (číslice [dig1]); Wire.endTransmission (); oneskorenie (10); oneskorenie (1000); }

A pre neveriacich … video ukážka.

Tak tu to máte. Štyri číslice namiesto jednej a nad zbernicou I2C zachovávajúcou digitálne I/O piny Arduino. Pomocou ôsmich MCP23017 ste mohli prečítať 32 číslic naraz. Bavte sa s tým!

U spoločnosti PMD Way si môžete objednať BCD aj desatinné prepínače v rôznych veľkostiach s bezplatným doručením do celého sveta.

Tento príspevok vám prináša pmdway.com - všetko pre výrobcov a nadšencov elektroniky s bezplatným doručením do celého sveta.

Odporúča: