Indholdsfortegnelse:
Video: Arduino- og tommelhjulskontakter: 9 trin
2024 Forfatter: John Day | [email protected]. Sidst ændret: 2024-01-30 08:28
I denne artikel undersøger vi brugen af push-wheel/thumbwheel switches med vores Arduino-systemer. Her er nogle eksempler hentet fra PMD Way.
Trin 1:
For de uindviede er hver switch et lodret segment, og de kan forbindes sammen til forskellige størrelser. Du kan bruge knapperne til at vælge fra cifre nul til ni. Der er alternativer tilgængelige, der har et hjul, du kan flytte med tommelfingeren i stedet for knapperne forøg/sænk.
Før de smarte brugergrænseflader var disse switches ret populære metoder til indstilling af numerisk dataindtastning. De er dog stadig tilgængelige i dag, så lad os se, hvordan de fungerer, og hvordan vi kan bruge dem. Omskifterens værdi gøres tilgængelig via binært kodet decimal eller lige decimal. Overvej kontakten bag på kontakten i BCD -form.
Trin 2:
Vi har fælles til venstre, derefter kontakter til 1, 2, 4 og 8. Hvis du anvender en lille spænding (f.eks. 5V) til fælles, kan værdien af kontakten måles ved at tilføje værdierne for de kontakter, der er i HØJ tilstand. For eksempel, hvis du vælger 3 - kontakterne 1 og 2 vil være ved den fælles spænding. Værdierne mellem nul og ni kan repræsenteres som sådan i tabellen.
Trin 3:
Nu skulle du indse, at det ville være let at aflæse værdien af en switch - og du har ret, det er det. Vi kan tilslutte 5V til fælles, output til digitale input -pins på vores Arduino -kort og derefter bruge digitalRead () til at bestemme værdien af hver output. I skitsen bruger vi nogle grundlæggende matematik til at konvertere BCD -værdien til et decimaltal. Så lad os gøre det nu.
Fra et hardwareperspektiv er vi nødt til at tage endnu en ting i betragtning-skubbehjulskontakten opfører sig elektrisk som fire normalt åbne trykknapper. Det betyder, at vi skal bruge pull-down-modstande for at have en klar forskel mellem høje og lave tilstande. Så skematikken for en switch er som vist ovenfor.
Trin 4:
Nu er det en simpel sag at tilslutte udgangene mærket 1, 2, 4 og 8 til (f.eks.) Digitale ben 8, 9, 10 og 11. Tilslut 5V til kontakten ‘C’, og GND til … GND. Dernæst skal vi have en skitse, der kan læse input og konvertere BCD -output til decimal. Overvej følgende skitse:
/ * Bruger SAA1064 numerisk displayskærm https://www.gravitech.us/7segmentshield.html Bruger seriel skærm, hvis du ikke har SAA1064 -skjoldet */ #inkluderer "Wire.h" #define q1 8 #define q2 9 # definere q4 10 #define q8 11 void setup () {Serial.begin (9600); Wire.begin (); // slutte sig til i2c -bus (adresse valgfri til master) forsinkelse (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) // sender heltal 'Count' til Gravitech SAA1064 shield {const int lookup [10] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F}; int Tusinder, hundredvis, tiere, base; Wire.beginTransmission (0x38); Wire.write (0); Wire.write (B01000111); Wire.endTransmission (); Wire.beginTransmission (0x38); Wire.write (1); Tusinder = tælle/1000; Hundreder = (Count- (Tusinder*1000))/100; Tens = (Count-((Tusinder*1000)+(Hundreder*100))))/10; Base = Count-((Tusinder*1000)+(Hundreder*100)+(Ti*10)); Wire.write (opslag [Base]); Wire.write (opslag [Tens]); Wire.write (opslag [Hundreder]); Wire.write (opslag [tusinder]); Wire.endTransmission (); forsinkelse (10); } int readSwitch () {int total = 0; hvis (digitalRead (q1) == HIGH) {total+= 1; } hvis (digitalRead (q2) == HIGH) {total+= 2; } hvis (digitalRead (q4) == HIGH) {total+= 4; } hvis (digitalRead (q8) == HIGH) {total+= 8; } total retur; } void loop () {dispSAA1064 (readSwitch ()); // sender switchværdi til at vise skjold Serial.println (readSwitch ()); // sender switchværdi til seriel monitorboks}
Funktionen readSwitch () er nøglen. Den beregner switchens værdi ved at tilføje den numeriske repræsentation for hver switchoutput og returnerer totalen som dens resultat. I dette eksempel brugte vi et numerisk displayskærm, der styres af NXP SAA1064.
Trin 5:
Funktionen readSwitch () er nøglen. Det beregner switchens værdi ved at tilføje den numeriske repræsentation for hver switchoutput og returnerer totalen som dens resultat. I dette eksempel brugte vi et numerisk displayskærm, der styres af NXP SAA1064.
Hvis du ikke har en, er det ok - resultaterne sendes også til den serielle skærm. Lad os nu se det i aktion i videoen.
Trin 6:
Ok det ligner ikke meget, men hvis du har brug for numerisk indtastning, sparer det meget fysisk plads og tilbyder en præcis metode til indtastning.
Så der har du det. Vil du faktisk bruge disse i et projekt? For et ciffer - ja. For fire? Sandsynligvis ikke-måske ville det være lettere at bruge et 12-cifret tastatur. Der er en idé…
Trin 7: Flere kontakter
Nu vil vi undersøge, hvordan man læser fire cifre - og ikke spilde alle de digitale stifter i processen. I stedet vil vi bruge Microchip MCP23017 16-bit port expander IC, der kommunikerer via I2C-bussen. Den har seksten digitale input/output pins, som vi kan bruge til at læse status for hver switch.
Inden du går videre, skal du være opmærksom på, at der kræves en vis viden om denne artikel - I2C -bussen (del et og to) og MCP23017. Vi vil først beskrive hardwareforbindelserne og derefter Arduino -skitsen. Husk den skematiske, der blev brugt til eksemplet med enkelt switch.
Da kontakten var direkte forbundet til Arduino, læste vi status for hver pin for at bestemme switchens værdi. Vi vil gøre dette igen i større skala ved hjælp af MCP23017. Overvej pinout -diagrammet:
Trin 8:
Vi har 16 ben, som gør det muligt at tilslutte fire kontakter. Almuen for hver switch er stadig forbundet til 5V, og hver switchkontakt har stadig en 10k pull-down modstand til GND. Derefter forbinder vi 1, 2, 4, 8 ben af ciffer et til GPBA0 ~ 3; ciffer to’s 1, 2, 4, 8 til GPA4 ~ 7; ciffer tre’s 1, 2, 4, 8 til GPB0 ~ 3 og ciffer fire’s 1, 2, 4, 8 til GPB4 ~ 7.
Nu, hvordan læser vi switchene? Alle disse ledninger kan få dig til at synes, at det er svært, men skitsen er ganske enkel. Når vi læser værdien af GPBA og B, returneres en byte for hver bank, med den mest betydende bit først. Hver fire bit matcher indstillingen af kontakten tilsluttet de matchende I/O -ben. For eksempel, hvis vi anmoder om dataene for både IO -banker og switchene er sat til 1 2 3 4 - vil bank A returnere 0010 0001 og bank B returnere 0100 0011.
Vi bruger nogle bitshift -operationer til at adskille hver fire bit til en separat variabel - hvilket efterlader os med værdien af hvert ciffer. For eksempel for at adskille værdien af switch fire, flytter vi bitene fra bank B >> 4. Dette skubber værdien af switch tre ud, og de tomme bits til venstre bliver nul.
For at adskille værdien for switch tre bruger vi en forbindelse bitvis & - som efterlader værdien af switch tre. Billedet viser en opdeling af de binære switchværdier - det viser de rå GPIOA- og B -byteværdier, derefter hvert cifers binære værdi og decimalværdi.
Trin 9:
Så lad os se demonstrationsskitsen:
/ * Eksempel 40a-Læs fire push-hjul BCD-switches via MCP23017, display på SAA1064/4-cifret 7-segment LED display */// MCP23017 ben 15 ~ 17 til GND, I2C busadresse er 0x20 // SAA1064 I2C busadresse 0x38 # omfatte "Wire.h" // for definition af LED -cifre int cifre [16] = {63, 6, 91, 79, 102, 109, 125, 7, 127, 111, 119, 124, 57, 94, 121, 113 }; byte GPIOA, GPIOB, dig1, dig2, dig3, dig4; ugyldig initSAA1064 () {// setup 0x38 Wire.beginTransmission (0x38); Wire.write (0); Wire.write (B01000111); // 12mA output, no digit blanking Wire.endTransmission (); } ugyldig opsætning () {Serial.begin (9600); Wire.begin (); // start I2C bus initSAA1064 (); } void loop () {// læs input fra bank A Wire.beginTransmission (0x20); Wire.write (0x12); Wire.endTransmission (); Wire.requestFrom (0x20, 1); GPIOA = Wire.read (); // denne byte indeholder switchdataene for cifrene 1 og 2 // læs input fra bank B Wire.beginTransmission (0x20); Wire.write (0x13); Wire.endTransmission (); Wire.requestFrom (0x20, 1); GPIOB = Wire.read (); // denne byte indeholder switchdata for cifrene 3 og 4 // ekstraktværdi for hver switch // dig1 LHS, dig4 RHS dig4 = GPIOB >> 4; dig3 = GPIOB & B00001111; dig2 = GPIOA >> 4; dig1 = GPIOA & B00001111; // sende alle GPIO og individuelle switchdata til seriel monitor // for fejlfinding og interessers skyld Serial.print ("GPIOA ="); Serial.println (GPIOA, BIN); Serial.print ("GPIOB ="); Serial.println (GPIOB, BIN); Serial.println (); Serial.print ("ciffer 1 ="); Serial.println (dig1, BIN); Serial.print ("ciffer 2 ="); Serial.println (dig2, BIN); Serial.print ("ciffer 3 ="); Serial.println (dig3, BIN); Serial.print ("ciffer 4 ="); Serial.println (dig4, BIN); Serial.println (); Serial.print ("ciffer 1 ="); Serial.println (dig1, DEC); Serial.print ("ciffer 2 ="); Serial.println (dig2, DEC); Serial.print ("ciffer 3 ="); Serial.println (dig3, DEC); Serial.print ("ciffer 4 ="); Serial.println (dig4, DEC); Serial.println (); // sende switchværdi til LED -display via 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 (); forsinkelse (10); forsinkelse (1000); }
Og for de ikke-troende … en videodemonstration.
Så der har du det. Fire cifre i stedet for et, og over I2C -bussen, der bevarer Arduino digitale I/O -ben. Ved hjælp af otte MCP23017s kunne du læse 32 cifre på én gang. God fornøjelse med at gøre det!
Du kan bestille både BCD og decimalafbrydere i forskellige størrelser fra PMD Way, med gratis levering over hele verden.
Dette indlæg blev bragt til dig af pmdway.com - alt for producenter og elektronikentusiaster, med gratis levering over hele verden.
Anbefalede:
Arduino bil omvendt parkering alarmsystem - Trin for trin: 4 trin
Arduino bil omvendt parkering alarmsystem. Trin for trin: I dette projekt vil jeg designe en simpel Arduino bil omvendt parkeringssensorkreds ved hjælp af Arduino UNO og HC-SR04 ultralydssensor. Dette Arduino -baserede bilomvendt alarmsystem kan bruges til en autonom navigation, robotafstand og andre rækkevidde
Trin for trin pc -bygning: 9 trin
Trin for trin PC Building: Supplies: Hardware: MotherboardCPU & CPU -køler PSU (strømforsyningsenhed) Opbevaring (HDD/SSD) RAMGPU (ikke påkrævet) CaseTools: Skruetrækker ESD -armbånd/mathermal pasta m/applikator
Akustisk levitation med Arduino Uno trin for trin (8 trin): 8 trin
Akustisk levitation med Arduino Uno Step-by Step (8-trin): ultralyds lydtransducere L298N Dc kvindelig adapter strømforsyning med en han-DC-pin Arduino UNOBreadboard Sådan fungerer det: Først uploader du kode til Arduino Uno (det er en mikrokontroller udstyret med digital og analoge porte til konvertering af kode (C ++)
RC -sporet robot ved hjælp af Arduino - Trin for trin: 3 trin
RC Tracked Robot Using Arduino - Step by Step: Hey guys, I are back with another cool Robot chassis from BangGood. Håber du har gennemgået vores tidligere projekter - Spinel Crux V1 - Gesture Controlled Robot, Spinel Crux L2 - Arduino Pick and Place Robot med Robotic Arms og The Badland Braw
DIY Arduino robotarm, trin for trin: 9 trin
DIY Arduino robotarm, trin for trin: Denne vejledning lærer dig, hvordan du bygger en robotarm selv