Orodha ya maudhui:

Swichi za Arduino na Thumbwheel: Hatua 9
Swichi za Arduino na Thumbwheel: Hatua 9

Video: Swichi za Arduino na Thumbwheel: Hatua 9

Video: Swichi za Arduino na Thumbwheel: Hatua 9
Video: Тестовый регулировочный переключатель | Функция регулировочного переключателя BCD 2024, Julai
Anonim
Swichi za Arduino na Thumbwheel
Swichi za Arduino na Thumbwheel

Katika kifungu hiki tunachunguza matumizi ya swichi za gurudumu / gumba gumba na mifumo yetu ya Arduino. Hapa kuna mifano inayopatikana kutoka kwa Njia ya PMD.

Hatua ya 1:

Picha
Picha

Kwa wasiojua, kila swichi ni sehemu moja ya wima na zinaweza kushikamana pamoja kuunda saizi anuwai. Unaweza kutumia vifungo kuchagua kutoka nambari sifuri hadi tisa. Kuna njia mbadala zinazopatikana ambazo zina gurudumu unaweza kusonga na kidole gumba chako badala ya vifungo vya kuongeza / kupungua.

Kabla ya siku za mwingiliano mzuri wa watumiaji swichi hizi zilikuwa njia maarufu sana za kuweka uingizaji wa data ya nambari. Walakini bado zinapatikana leo, kwa hivyo wacha tuone jinsi wanavyofanya kazi na jinsi tunaweza kuzitumia. Thamani ya ubadilishaji inapatikana kupitia desimali iliyo na nambari za binary au desimali moja kwa moja. Fikiria nyuma ya kubadili katika fomu ya BCD.

Hatua ya 2:

Picha
Picha

Tuna kawaida upande wa kushoto, kisha mawasiliano ya 1, 2, 4 na 8. Ikiwa unatumia voltage ndogo (sema 5V) kwa kawaida, thamani ya swichi inaweza kupimwa kwa kuongeza maadili ya anwani zilizo kwenye JUU JUU. Kwa mfano, ukichagua 3 - anwani 1 na 2 zitakuwa kwenye voltage kawaida. Thamani kati ya sifuri na tisa zinaweza kuwakilishwa kama vile kwenye jedwali.

Hatua ya 3:

Picha
Picha

Kufikia sasa unapaswa kutambua kuwa itakuwa rahisi kusoma thamani ya swichi - na uko sawa, ni kweli. Tunaweza kuunganisha 5V kwa kawaida, matokeo kwa pini za pembejeo za dijiti za bodi zetu za Arduino, halafu tumia digitalRead () kuamua dhamana ya kila pato. Katika mchoro tunatumia hesabu kadhaa za kimsingi kubadilisha thamani ya BCD kuwa nambari ya decimal. Basi hebu tufanye hivyo sasa.

Kwa mtazamo wa vifaa, tunahitaji kuzingatia jambo moja zaidi - swichi ya gurudumu hufanya kama umeme kama vifungo vinne vya kawaida vya kushinikiza. Hii inamaanisha tunahitaji kutumia vipinga-vuta ili kuwa na tofauti wazi kati ya majimbo ya juu na ya chini. Kwa hivyo mpango wa kubadili moja umeonyeshwa hapo juu.

Hatua ya 4:

Sasa ni jambo rahisi kuunganisha matokeo yaliyoandikwa 1, 2, 4, na 8 kwa (kwa mfano) pini za dijiti 8, 9, 10 na 11. Unganisha 5V kwenye kiwambo cha kubadili 'C', na GND kwa… GND. Ifuatayo, tunahitaji kuwa na mchoro ambao unaweza kusoma pembejeo na kubadilisha pato la BCD kuwa desimali. Fikiria mchoro ufuatao:

/ * Inatumia ngao ya nambari ya SAA1064 https://www.gravitech.us/7segmentshield.html Inatumia mfuatiliaji wa serial ikiwa huna ngao ya SAA1064 * / # pamoja na "Wire.h" #fafanua q1 8 #fafanua q2 9 # fafanua q4 10 #fafanua q8 11 usanidi batili () {Serial.begin (9600); Wire.begin (); // jiunge na i2c basi (anwani ya hiari kwa bwana) ucheleweshaji (500); pinMode (q1, INPUT); // thumbwheel '1' pinMode (q2, INPUT); // thumbwheel '2' pinMode (q4, INPUT); // thumbwheel '4' pinMode (q8, INPUT); // thumbwheel '8'} batili dispSAA1064 (int Count) // hutuma idadi kamili ya 'Count' kwa Gravitech SAA1064 ngao {const int lookup [10] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F}; maelfu, mamia, makumi, msingi; Uwasilishaji wa waya (0x38); Andika waya (0); Andika waya (B01000111); Uwasilishaji wa waya (); Uwasilishaji wa waya (0x38); Andika waya (1); Maelfu = Hesabu / 1000; Mamia = (Hesabu- (Maelfu * 1000)) / 100; Makumi = (Hesabu - ((Maelfu * 1000) + (Mamia * 100))) / 10; Msingi = Hesabu - ((Maelfu * 1000) + (Mamia * 100) + (Makumi * 10)); Andika waya (tafuta [Msingi]); Andika waya (tafuta [Makumi]); Andika waya (angalia [Mamia]); Andika waya (angalia [Maelfu]); Uwasilishaji wa waya (); kuchelewesha (10); } int readSwitch () {int total = 0; ikiwa (digitalRead (q1) == HIGH) {total + = 1; } ikiwa (digitalRead (q2) == HIGH) {total + = 2; } ikiwa (digitalRead (q4) == HIGH) {total + = 4; } ikiwa (digitalRead (q8) == HIGH) {total + = 8; } jumla ya kurudi; } kitanzi batili () {dispSAA1064 (somaSwitch ()); // hutuma thamani ya kubadili kuonyesha ngao Serial.println (readSwitch ()); // hutuma thamani ya swichi kwenye sanduku la kufuatilia serial}

Kazi kusomaSwitch () ni ufunguo. Hukokotoa thamani ya ubadilishaji kwa kuongeza uwakilishi wa nambari wa kila pato la kubadili na kurudisha jumla kama matokeo yake. Kwa mfano huu tulitumia ngao ya kuonyesha nambari inayodhibitiwa na NXP SAA1064.

Hatua ya 5:

Image
Image

Kazi kusomaSwitch () ni ufunguo. Hukokotoa thamani ya ubadilishaji kwa kuongeza uwakilishi wa nambari wa kila pato la kubadili na kurudisha jumla kama matokeo yake. Kwa mfano huu tulitumia ngao ya kuonyesha nambari ambayo inadhibitiwa na NXP SAA1064.

Ikiwa huna moja, hiyo ni sawa - matokeo pia yanatumwa kwa mfuatiliaji wa serial. Sasa, wacha tuione ikifanya kazi kwenye video.

Hatua ya 6:

Ok haionekani kama mengi, lakini ikiwa unahitaji kuingia kwa nambari huhifadhi nafasi nyingi za mwili na inatoa njia sahihi ya kuingia.

Kwa hivyo hapo unayo. Je! Utatumia hizi katika mradi? Kwa tarakimu moja - ndio. Kwa nne? Labda sio - labda itakuwa rahisi kutumia keypad yenye tarakimu 12. Kuna wazo…

Hatua ya 7: Swichi nyingi

Picha
Picha

Sasa tutachunguza jinsi ya kusoma nambari nne - na sio kupoteza pini zote za dijiti katika mchakato. Badala yake, tutatumia Microchip MCP23017 16-bit expander IC inayowasiliana kupitia basi ya I2C. Ina pini kumi na sita za pembejeo / pato za dijiti ambazo tunaweza kutumia kusoma hali ya kila swichi.

Kabla ya kusonga mbele, tafadhali kumbuka kuwa maarifa kadhaa ya kudhani yanahitajika kwa nakala hii - basi ya I2C (sehemu ya kwanza na mbili) na MCP23017. Kwanza tutaelezea unganisho la vifaa, na kisha mchoro wa Arduino. Kumbuka muundo uliotumika kwa mfano wa kubadili moja.

Wakati swichi iliunganishwa moja kwa moja na Arduino, tulisoma hali ya kila pini ili kubaini thamani ya swichi. Tutafanya hivyo tena, kwa kiwango kikubwa kutumia MCP23017. Fikiria mchoro wa pinout:

Hatua ya 8:

Tuna pini 16, ambayo inaruhusu swichi nne kuunganishwa. Kawaida kwa kila swichi bado inaunganisha kwa 5V, na kila mawasiliano ya swichi bado ana kipinzani cha kuvuta-10k kwa GND. Kisha tunaunganisha pini 1, 2, 4, 8 za nambari moja kwa GPBA0 ~ 3; nambari mbili 1, 2, 4, 8 hadi GPA4 ~ 7; nambari tatu 1, 2, 4, 8 hadi GPB0 ~ 3 na nambari nne 1, 2, 4, 8 hadi GPB4 ~ 7.

Sasa tunasoma vipi swichi? Waya zote hizo zinaweza kukusababisha ufikirie kuwa ni ngumu, lakini mchoro ni rahisi sana. Tunaposoma thamani ya GPBA na B, baiti moja inarejeshwa kwa kila benki, na muhimu zaidi kwanza. Kila bits nne zitalingana na mpangilio wa swichi iliyounganishwa na pini zinazofanana za I / O. Kwa mfano, ikiwa tunaomba data ya benki zote za IO na swichi zimewekwa 1 2 3 4 - benki A itarudi 0010 0001 na benki B itarudi 0100 0011.

Tunatumia shughuli kadhaa za bitshift kutenganisha kila bits nne kuwa tofauti tofauti - ambayo inatuacha na thamani ya kila tarakimu. Kwa mfano, kutenganisha thamani ya swichi nne, tunahamisha bits kutoka benki B >> 4. Hii inasukuma thamani ya kubadili tatu nje, na vipande tupu upande wa kushoto huwa sifuri.

Ili kutenganisha thamani ya kubadili tatu, tunatumia kiwanja kidogo na - ambayo inaacha dhamana ya kubadili tatu. Picha hiyo inaonyesha kuvunjika kwa maadili ya ubadilishaji wa kibinadamu - inaonyesha nambari mbichi za GPIOA na B, halafu dhamana ya kila tarakimu, na thamani ya desimali.

Hatua ya 9:

Basi wacha tuone mchoro wa maonyesho:

/ * Mfano 40a - Soma swichi nne za kushinikiza za BCD kupitia MCP23017, onyesha kwenye SAA1064 / nambari 4 za sehemu 7 za onyesho la LED * / // MCP23017 pini 15 ~ 17 kwa GND, anwani ya basi ya I2C ni 0x20 // SAA1064 I2C anwani ya basi 0x38 # jumuisha "Wire.h" // kwa ufafanuzi wa nambari za LED katika tarakimu [16] = {63, 6, 91, 79, 102, 109, 125, 7, 127, 111, 119, 124, 57, 94, 121, 113 }; baiti GPIOA, GPIOB, dig1, dig2, dig3, dig4; utupu initSAA1064 () {// kuanzisha 0x38 Wire.beginTransmission (0x38); Andika waya (0); Andika waya (B01000111); // pato la 12mA, hakuna waya inayobadilisha waya. } usanidi batili () {Serial.begin (9600); Wire.begin (); // kuanza I2C basi initSAA1064 (); } kitanzi batili () {// soma pembejeo za benki A Wire.beginTransmission (0x20); Andika waya (0x12); Uwasilishaji wa waya (); Ombi la Wire. Toka (0x20, 1); GPIOA = soma ya waya (); // baiti hii ina data ya kubadili ya nambari 1 na 2 // soma pembejeo za benki B Wire.beginTransmission (0x20); Andika waya (0x13); Uwasilishaji wa waya (); Ombi la Wire. Toka (0x20, 1); GPIOB = soma ya waya (); // baiti hii ina data ya kubadili ya nambari 3 na 4 // thamani ya dondoo kwa kila swichi // dig1 LHS, dig4 RHS dig4 = GPIOB >> 4; dig3 = GPIOB & B00001111; dig2 = GPIOA >> 4; dig1 = GPIOA & B00001111; // tuma data yote ya GPIO na ubadilishaji wa kibinafsi kwa mfuatiliaji wa serial // kwa utatuzi na maslahi ya Serial.print ("GPIOA ="); Serial.println (GPIOA, BIN); Serial.print ("GPIOB ="); Serial.println (GPIOB, BIN); Serial.println (); Serial.print ("tarakimu 1 ="); Serial.println (dig1, BIN); Serial.print ("tarakimu 2 ="); Serial.println (dig2, BIN); Serial.print ("tarakimu 3 ="); Serial.println (dig3, BIN); Serial.print ("tarakimu 4 ="); Serial.println (dig4, BIN); Serial.println (); Serial.print ("tarakimu 1 ="); Serial.println (dig1, DEC); Serial.print ("tarakimu 2 ="); Serial.println (dig2, DEC); Serial.print ("tarakimu 3 ="); Serial.println (dig3, DEC); Serial.print ("tarakimu 4 ="); Serial.println (dig4, DEC); Serial.println (); // tuma thamani ya ubadilishaji kwa onyesho la LED kupitia SAA1064 Wire.beginTransmission (0x38); Andika waya (1); Andika waya (tarakimu [dig4]); Andika waya (tarakimu [dig3]); Andika waya (tarakimu [dig2]); Andika waya (tarakimu [dig1]); Uwasilishaji wa waya (); kuchelewesha (10); kuchelewesha (1000); }

Na kwa wasioamini … onyesho la video.

Kwa hivyo hapo unayo. Nambari nne badala ya moja, na juu ya basi ya I2C inayohifadhi pini za I / O za dijiti za Arduino. Kutumia MCP23017s nane unaweza kusoma tarakimu 32 mara moja. Furahiya na kufanya hivyo!

Unaweza kuagiza swichi zote za BCD na desimali kwa ukubwa anuwai kutoka kwa PMD Way, na uwasilishaji wa bure ulimwenguni.

Chapisho hili limeletwa kwako na pmdway.com - kila kitu kwa watengenezaji na wapenda umeme, na uwasilishaji wa bure ulimwenguni.

Ilipendekeza: