Obsah:

Přepínače Arduino a Thumbwheel: 9 kroků
Přepínače Arduino a Thumbwheel: 9 kroků

Video: Přepínače Arduino a Thumbwheel: 9 kroků

Video: Přepínače Arduino a Thumbwheel: 9 kroků
Video: One Arduino 10 Thumbwheels binary escape room - Code and Diagram In Link Below 2024, Červenec
Anonim
Přepínače Arduino a Thumbwheel
Přepínače Arduino a Thumbwheel

V tomto článku zkoumáme použití přepínačů s kolečky/kolečky v našich systémech Arduino. Zde je několik příkladů pocházejících z PMD Way.

Krok 1:

obraz
obraz

Pro nezasvěcené je každý přepínač jedním svislým segmentem a mohou být spojeny dohromady a vytvářet různé velikosti. Pomocí tlačítek můžete vybírat od číslic od nuly do devíti. K dispozici jsou alternativy, které mají kolečko, které můžete přesouvat palcem místo tlačítek pro zvýšení/snížení.

Před dobami efektních uživatelských rozhraní byly tyto přepínače velmi oblíbenými metodami pro zadávání číselných dat. Jsou však stále k dispozici i dnes, pojďme se tedy podívat, jak fungují a jak je můžeme použít. Hodnota přepínače je k dispozici prostřednictvím binárně kódovaných desetinných míst nebo rovných desetinných míst. Zvažte zadní část přepínače ve formě BCD.

Krok 2:

obraz
obraz

Vlevo máme společné, potom kontakty pro 1, 2, 4 a 8. Pokud na společné použijete malé napětí (řekněme 5V), lze hodnotu spínače změřit sečtením hodnot kontaktů, které jsou v VYSOKÝ stav. Pokud například vyberete 3 - kontakty 1 a 2 budou na společném napětí. Hodnoty mezi nulou a devíti lze v tabulce znázornit jako takové.

Krok 3:

obraz
obraz

Nyní byste si měli uvědomit, že by bylo snadné přečíst hodnotu přepínače - a máte pravdu, je to tak. Můžeme připojit 5 V ke společnému, výstupy k digitálním vstupním pinům našich desek Arduino, poté pomocí digitalRead () určit hodnotu každého výstupu. V náčrtu použijeme základní matematiku k převodu hodnoty BCD na desítkové číslo. Udělejme to tedy nyní.

Z hlediska hardwaru musíme vzít v úvahu ještě jednu věc-spínač na volantu se chová elektricky jako čtyři normálně otevřená tlačítka. To znamená, že musíme použít stahovací odpory, abychom měli jasný rozdíl mezi vysokými a nízkými stavy. Schéma pro jeden přepínač je tedy uvedeno výše.

Krok 4:

Nyní je jednoduché připojit výstupy označené 1, 2, 4 a 8 k (například) digitálním pinům 8, 9, 10 a 11. Připojte 5V k bodu přepínače „C“a GND k… GND. Dále potřebujeme náčrt, který dokáže číst vstupy a převést výstup BCD na desítkové. Zvažte následující skicu:

/ * Používá štít numerického displeje SAA1064 https://www.gravitech.us/7segmenthield.html Používá sériový monitor, pokud 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 (); // připojení sběrnice i2c (adresa volitelná pro master) zpoždění (500); pinMode (q1, INPUT); // kolečko '1' pinMode (q2, INPUT); // kolečko '2' pinMode (q4, INPUT); // kolečko '4' pinMode (q8, INPUT); // kolečko '8'} neplatné dispSAA1064 (int Count) // posílá celočíselné 'Count' do štítu Gravitech SAA1064 {const int lookup [10] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F}; int Tisíce, stovky, desítky, základna; Wire.beginTransmission (0x38); Wire.write (0); Wire.write (B01000111); Wire.endTransmission (); Wire.beginTransmission (0x38); Wire.write (1); Tisíce = počet/1000; Stovky = (Count- (tisíce*1000))/100; Desítky = (počet-((tisíce*1000)+(stovky*100)))/10; Základ = počet-((tisíce*1000)+(stovky*100)+(desítky*10)); Wire.write (vyhledávání [Base]); Wire.write (vyhledávání [desítky]); Wire.write (vyhledávání [stovky]); Wire.write (vyhledávání [tisíce]); Wire.endTransmission (); zpoždění (10); } int readSwitch () {int celkem = 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; } void loop () {dispSAA1064 (readSwitch ()); // pošle hodnotu přepínače na displej štít Serial.println (readSwitch ()); // pošle hodnotu přepínače do boxu sériového monitoru}

Klíčem je funkce readSwitch (). Vypočítá hodnotu přepínače přidáním číselného vyjádření každého výstupu spínače a jako výsledek vrátí součet. V tomto případě jsme použili numerický štít displeje, který je řízen NXP SAA1064.

Krok 5:

Image
Image

Klíčem je funkce readSwitch (). Vypočítá hodnotu přepínače přidáním číselné reprezentace každého výstupu spínače a jako výsledek vrátí součet. V tomto případě jsme použili numerický štít displeje, který je řízen NXP SAA1064.

Pokud žádný nemáte, je to v pořádku - výsledky jsou také odeslány na sériový monitor. Pojďme se na to nyní podívat ve videu.

Krok 6:

Dobře, nevypadá to moc, ale pokud potřebujete číselné zadání, ušetří to spoustu fyzického prostoru a nabízí přesný způsob zadávání.

Tak tady to máte. Opravdu byste je použili v projektu? Za jednu číslici - ano. Pro čtyři? Pravděpodobně ne-možná by bylo jednodušší použít 12místnou klávesnici. Existuje nápad…

Krok 7: Více přepínačů

obraz
obraz

Nyní prozkoumáme, jak číst čtyři číslice - a neztratit přitom všechny ty digitální piny. Místo toho použijeme 16bitový IC expandér Microchip MCP23017, který komunikuje přes sběrnici I2C. Má šestnáct digitálních vstupních/výstupních pinů, které můžeme použít ke čtení stavu každého přepínače.

Než se pohneme kupředu, vezměte prosím na vědomí, že pro tento článek jsou vyžadovány určité předpokládané znalosti - sběrnice I2C (část jedna a dvě) a MCP23017. Nejprve popíšeme hardwarová připojení a poté skicu Arduina. Připomeňme si schéma použité pro příklad jednoho přepínače.

Když byl přepínač přímo připojen k Arduinu, přečetli jsme stav každého pinu, abychom určili hodnotu přepínače. Uděláme to znovu, ve větším měřítku pomocí MCP23017. Zvažte diagram pinoutu:

Krok 8:

Máme 16 pinů, což umožňuje připojení čtyř přepínačů. Komunikace pro každý spínač se stále připojuje na 5 V a každý kontakt spínače má stále 10k stahovací odpor vůči GND. Poté připojíme 1, 2, 4, 8 pinů číslice jedna k GPBA0 ~ 3; číslice dvě 1, 2, 4, 8 až GPA4 ~ 7; číslice tři 1, 2, 4, 8 až GPB0 ~ 3 a číslice čtyři 1, 2, 4, 8 až GPB4 ~ 7.

Jak teď přečteme přepínače? Všechny tyto dráty vám mohou způsobit, že si myslíte, že je to obtížné, ale skica je celkem jednoduchá. Když odečteme hodnotu GPBA a B, vrátí se jeden bajt pro každou banku, přičemž nejdřív se použije nejvýznamnější bit. Každé čtyři bity budou odpovídat nastavení přepínače připojeného k odpovídajícím I/O pinům. Pokud například požadujeme data pro IO banky a přepínače jsou nastaveny na 1 2 3 4 - banka A vrátí 0010 0001 a banka B vrátí 0100 0011.

Pomocí některých operací bitshift oddělíme každé čtyři bity do samostatné proměnné - což nám ponechá hodnotu každé číslice. Například, abychom oddělili hodnotu přepínače čtyři, přesuneme bity z banky B >> 4. Tím se hodnota přepínače tři vytlačí ven a prázdné bity vlevo se stanou nulou.

K oddělení hodnoty pro přepínač tři používáme složenou bitovou & - která ponechá hodnotu přepínače tři. Obrázek ukazuje rozpis hodnot binárních přepínačů - ukazuje nezpracované hodnoty bajtů GPIOA a B, pak binární hodnotu každé číslice a desetinnou hodnotu.

Krok 9:

Pojďme se tedy podívat na ukázkový náčrtek:

/ * Příklad 40a-Přečíst čtyři tlačítkové BCD přepínače přes MCP23017, zobrazení na SAA1064/4místný 7segmentový LED displej */// MCP23017 piny 15 ~ 17 na GND, adresa sběrnice I2C je 0x20 // Adresa sběrnice SAA1064 I2C 0x38 # zahrnout „Wire.h“// pro definice číslic LED int číslice [16] = {63, 6, 91, 79, 102, 109, 125, 7, 127, 111, 119, 124, 57, 94, 121, 113 }; byte GPIOA, GPIOB, dig1, dig2, dig3, dig4; void initSAA1064 () {// nastavení 0x38 Wire.beginTransmission (0x38); Wire.write (0); Wire.write (B01000111); // výstup 12mA, bez zatemňování číslic Wire.endTransmission (); } neplatné nastavení () {Serial.begin (9600); Wire.begin (); // spuštění sběrnice I2C initSAA1064 (); } void loop () {// přečte vstupy banky A Wire.beginTransmission (0x20); Wire.write (0x12); Wire.endTransmission (); Wire.requestFrom (0x20, 1); GPIOA = Wire.read (); // tento byte obsahuje data přepínače pro číslice 1 a 2 // čte vstupy banky B Wire.beginTransmission (0x20); Wire.write (0x13); Wire.endTransmission (); Wire.requestFrom (0x20, 1); GPIOB = Wire.read (); // tento byte obsahuje data přepínače pro číslice 3 a 4 // extrahovací hodnota pro každý přepínač // dig1 LHS, dig4 RHS dig4 = GPIOB >> 4; dig3 = GPIOB & B00001111; dig2 = GPIOA >> 4; dig1 = GPIOA & B00001111; // odeslání všech dat GPIO a jednotlivých přepínačů na sériový monitor // kvůli ladění a zájmu Serial.print ("GPIOA ="); Serial.println (GPIOA, BIN); Serial.print ("GPIOB ="); Serial.println (GPIOB, BIN); Serial.println (); Serial.print ("číslice 1 ="); Serial.println (dig1, BIN); Serial.print ("číslice 2 ="); Serial.println (dig2, BIN); Serial.print ("digit 3 ="); Serial.println (dig3, BIN); Serial.print ("číslice 4 ="); Serial.println (dig4, BIN); Serial.println (); Serial.print ("číslice 1 ="); Serial.println (dig1, DEC); Serial.print ("číslice 2 ="); Serial.println (dig2, DEC); Serial.print ("digit 3 ="); Serial.println (dig3, DEC); Serial.print ("číslice 4 ="); Serial.println (dig4, DEC); Serial.println (); // odeslání hodnoty spínače na LED displej přes 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 (); zpoždění (10); zpoždění (1000); }

A pro nevěřící … video ukázka.

Tak tady to máte. Čtyři číslice místo jedné a přes sběrnici I2C šetřící digitální I/O piny Arduino. Pomocí osmi MCP23017 můžete přečíst 32 číslic najednou. Bavte se s tím!

U PMD Way si můžete objednat BCD i desítkové přepínače v různých velikostech s doručením zdarma po celém světě.

Tento příspěvek vám přinesl web pmdway.com - vše pro výrobce a nadšence do elektroniky s doručením zdarma po celém světě.

Doporučuje: