Բովանդակություն:

Arduino և Thumbwheel անջատիչներ `9 քայլ
Arduino և Thumbwheel անջատիչներ `9 քայլ

Video: Arduino և Thumbwheel անջատիչներ `9 քայլ

Video: Arduino և Thumbwheel անջատիչներ `9 քայլ
Video: Փորձարկել մատնահետքի անջատիչը | Hexadecimal-ից BCD Thumbwheel Switch-ի գործառույթ և փորձարկում 2024, Հուլիսի
Anonim
Arduino և Thumbwheel անջատիչներ
Arduino և Thumbwheel անջատիչներ

Այս հոդվածում մենք ուսումնասիրում ենք հրում/բութ անիվների անջատիչների օգտագործումը մեր Arduino համակարգերով: Ահա PMD Way- ի աղբյուրներից մի քանի օրինակ:

Քայլ 1:

Պատկեր
Պատկեր

Անտեղյակ մարդկանց համար յուրաքանչյուր անջատիչ մեկ ուղղահայաց հատված է, և դրանք կարող են միացվել իրար ՝ ձևավորելով տարբեր չափսեր: Theրոյից մինչև ինը թվանշաններից կարող եք ընտրել կոճակները: Կան այլընտրանքներ, որոնք ունեն անիվ, որը կարող եք շարժել ձեր բութ մատով ՝ մեծացման/նվազման կոճակների փոխարեն:

Նախքան շքեղ օգտագործողի ինտերֆեյսը, այս անջատիչները բավականին տարածված մեթոդներ էին թվային տվյալների մուտքագրման համար: Այնուամենայնիվ, դրանք դեռ հասանելի են այսօր, ուստի եկեք տեսնենք, թե ինչպես են դրանք աշխատում և ինչպես կարող ենք դրանք օգտագործել: Անջատիչի արժեքը հասանելի է դառնում երկուական ծածկագրված տասնորդական կամ ուղիղ տասնորդականի միջոցով: Մտածեք անջատիչի հետևի հատվածը BCD տեսքով:

Քայլ 2:

Պատկեր
Պատկեր

Մենք ձախ կողմում ունենք ընդհանուր, այնուհետև ՝ 1, 2, 4 և 8. կոնտակտներ: ԲԱՐՁՐ վիճակ: Օրինակ, եթե ընտրեք 3 -ը, 1 և 2 կոնտակտները կլինեն ընդհանուր լարման դեպքում: Zeroրոյից ինը արժեքները կարող են որպես այդպիսին ներկայացված լինել աղյուսակում:

Քայլ 3:

Պատկեր
Պատկեր

Մինչ այժմ դուք պետք է գիտակցեք, որ հեշտ կլինի կարդալ անջատիչի արժեքը - և ճիշտ եք, այդպես է: Մենք կարող ենք 5V- ը միացնել սովորականին, ելքերը ՝ մեր Arduino տախտակների թվային մուտքային կապերին, այնուհետև օգտագործել digitalRead () -ը ՝ յուրաքանչյուր ելքի արժեքը որոշելու համար: Էսքիզում մենք օգտագործում ենք որոշ հիմնական մաթեմատիկա ՝ BCD արժեքը տասնորդական թվին փոխարկելու համար: Այսպիսով, եկեք դա անենք հիմա:

Սարքավորման տեսանկյունից մենք պետք է հաշվի առնենք ևս մեկ բան. Մղիչով անջատիչն էլեկտրականորեն իրեն պահում է այնպես, ինչպես սովորաբար բացված չորս կոճակները: Սա նշանակում է, որ մենք պետք է օգտագործենք քաշվող դիմադրիչներ `բարձր և ցածր վիճակների հստակ տարբերություն ունենալու համար: Այսպիսով, մեկ անջատիչի սխեմատիկ պատկերը վերևում է:

Քայլ 4:

Այժմ պարզ խնդիր է 1, 2, 4 և 8 պիտակավորված ելքերը միացնել (օրինակ) 8, 9, 10 և 11. թվային կապումներին (5V) միացնել «C» անջատիչին, իսկ GND- ին ՝ … GND- ին: Հաջորդը, մենք պետք է ունենանք ուրվագիծ, որը կարող է կարդալ մուտքերը և BCD- ի ելքը վերածել տասնորդականի: Հաշվի առեք հետևյալ ուրվագիծը.

/ * Օգտագործում է SAA1064 թվային ցուցադրման վահան https://www.gravitech.us/7segmentshield.html Օգտագործում է սերիական մոնիտոր, եթե չունեք SAA1064 վահանը */ #ներառել «Wire.h» #սահմանել q1 8 #սահմանել q2 9 # սահմանել q4 10 #սահմանել q8 11 void setup () {Serial.begin (9600); Wire.begin (); // միանալ i2c ավտոբուսին (հասցեն ՝ ըստ ցանկության հիմնական) ուշացում (500); pinMode (q1, Մուտք); // thumbwheel '1' pinMode (q2, INPUT); // thumbwheel '2' pinMode (q4, INPUT); // thumbwheel '4' pinMode (q8, INPUT); // thumbwheel '8'} void dispSAA1064 (int Count) // ուղարկում է «Count» ամբողջ թիվը Gravitech SAA1064 վահանին {const int lookup [10] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F}; int Հազարավոր, հարյուրավոր, տասնյակ, բազա; Wire.beginTransmission (0x38); Wire.write (0); Wire.write (B01000111); Wire.endTransmission (); Wire.beginTransmission (0x38); Wire.write (1); Հազարավոր = Հաշվել/1000; Հարյուրավոր = (Հաշվարկ- (Հազարավոր*1000))/100; Տասնյակ = (Հաշվել-((Հազարավոր*1000)+(Հարյուրավոր*100)))/10; Հիմք = Հաշվիչ-((Հազարավոր*1000)+(Հարյուրավոր*100)+(Տասնյակ*10)); Wire.write (որոնում [Հիմք]); Wire.write (փնտրել [տասնյակ]); Wire.write (որոնում [Հարյուրավոր]); Wire.write (որոնում [Հազարավոր]); Wire.endTransmission (); ուշացում (10); } int readSwitch () {int ընդհանուր = 0; if (digitalRead (q1) == HIGH) {ընդհանուր+= 1; } if (digitalRead (q2) == HIGH) {ընդհանուր+= 2; } if (digitalRead (q4) == HIGH) {ընդհանուր+= 4; } if (digitalRead (q8) == HIGH) {ընդհանուր+= 8; } վերադարձի ընդհանուր; } void loop () {dispSAA1064 (readSwitch ()); // անջատիչի արժեքը ուղարկում է վահանի ցուցադրման Serial.println (readSwitch ()); // ուղարկում է անջատիչի արժեքը սերիական մոնիտորի տուփին}

ReadSwitch () գործառույթը բանալին է: Այն հաշվարկում է անջատիչի արժեքը `ավելացնելով յուրաքանչյուր անջատիչի ելքային թվային պատկերը և արդյունքում վերադարձնում է ընդհանուրը: Այս օրինակի համար մենք օգտագործեցինք թվային ցուցադրման վահան, որը վերահսկվում է NXP SAA1064- ի կողմից:

Քայլ 5:

Image
Image

ReadSwitch () գործառույթը բանալին է: Այն հաշվարկում է անջատիչի արժեքը `ավելացնելով յուրաքանչյուր անջատիչի ելքային թվային պատկերը և արդյունքում վերադարձնում է ընդհանուրը: Այս օրինակի համար մենք օգտագործեցինք թվային ցուցադրման վահան, որը վերահսկվում է NXP SAA1064- ի կողմից:

Եթե չունեք մեկը, ապա դա նորմալ է. Արդյունքները ուղարկվում են նաև սերիական մոնիտոր: Այժմ, եկեք տեսնենք այն գործողության մեջ տեսանյութում:

Քայլ 6:

Դե, դա շատ նման չէ, բայց եթե թվային մուտքագրման կարիք ունեք, դա շատ ֆիզիկական տարածք է խնայում և առաջարկում է մուտքի ճշգրիտ մեթոդ:

Այսպիսով, դուք ունեք այն: Դուք իրականում կօգտագործե՞ք դրանք նախագծում: Մեկ նիշի համար `այո: Չորսի՞ համար: Հավանաբար ոչ, գուցե ավելի հեշտ կլիներ օգտագործել 12 նիշանոց ստեղնաշար: Գաղափար կա…

Քայլ 7: Բազմաթիվ անջատիչներ

Պատկեր
Պատկեր

Այժմ մենք կքննարկենք, թե ինչպես կարդալ չորս թվանշան և գործընթացում չկորցնել այդ բոլոր թվային կապանքները: Փոխարենը, մենք կօգտագործենք Microchip MCP23017 16-բիթանոց նավահանգստի ընդլայնիչ IC, որը հաղորդակցվում է I2C ավտոբուսի միջոցով: Այն ունի տասնվեց թվային մուտքային/ելքային կապ, որոնք մենք կարող ենք օգտագործել յուրաքանչյուր անջատիչի կարգավիճակը կարդալու համար:

Նախքան առաջ շարժվելը, խնդրում ենք նկատի ունենալ, որ այս հոդվածի համար անհրաժեշտ են ենթադրյալ գիտելիքներ ՝ I2C ավտոբուսը (մասեր մեկ և երկրորդ) և MCP23017: Սկզբում մենք նկարագրելու ենք ապարատային միացումները, այնուհետև Arduino էսքիզը: Հիշեցրեք մեկ անջատիչի օրինակի համար օգտագործված սխեմատիկան:

Երբ անջատիչն անմիջապես միացված էր Arduino- ին, մենք կարդում էինք յուրաքանչյուր կապի կարգավիճակը `անջատիչի արժեքը որոշելու համար: Մենք դա նորից կանենք ՝ ավելի մեծ մասշտաբով ՝ օգտագործելով MCP23017: Հաշվի առեք ճեղքման դիագրամը.

Քայլ 8:

Մենք ունենք 16 կապում, ինչը թույլ է տալիս միացնել չորս անջատիչ: Յուրաքանչյուր անջատիչի ընդհանուր միավորները դեռ միանում են 5 Վ-ին, և յուրաքանչյուր անջատիչ կոնտակտ դեռևս ունի 10k քաշվող դիմադրություն GND- ին: Այնուհետեւ մենք միացնում ենք թվանշանի 1, 2, 4, 8 կապում GPBA0 ~ 3; երկուսի թվանշանները ՝ 1, 2, 4, 8, GPA4 ~ 7; թվանշանի երեքը ՝ 1, 2, 4, 8 GPB0 ~ 3 -ին և չորս թվերը ՝ 1, 2, 4, 8 ՝ GPB4 ~ 7:

Հիմա ինչպե՞ս ենք կարդում անջատիչները: Այդ բոլոր լարերը կարող են ձեզ մտածել, որ դա դժվար է, բայց ուրվագիծը բավականին պարզ է: Երբ կարդում ենք GPBA- ի և B- ի արժեքը, յուրաքանչյուր բանկի համար վերադարձվում է մեկ բայթ, առաջինը `ամենաէական բիթով: Յուրաքանչյուր չորս բիթ կհամապատասխանի անջատիչի կարգավորմանը, որը միացված է համապատասխան I/O կապում: Օրինակ, եթե մենք խնդրենք տվյալները ինչպես IO բանկերի համար, այնպես էլ անջատիչները սահմանվում են 1 2 3 4 - A բանկը կվերադարձնի 0010 0001, իսկ B բանկը `0100 0011:

Մենք օգտագործում ենք որոշ bitshift գործողություններ ՝ յուրաքանչյուր չորս բիթը առանձին փոփոխականի բաժանելու համար, ինչը մեզ թողնում է յուրաքանչյուր նիշի արժեքը: Օրինակ, չորս անջատիչի արժեքը առանձնացնելու համար մենք բիթերը տեղափոխում ենք B >> 4. բանկից: Սա երեքի անջատիչի արժեքը դուրս է մղում, իսկ ձախ կողմում դատարկ բիթերը դառնում են զրո:

Երեքի անջատիչի արժեքը առանձնացնելու համար մենք օգտագործում ենք մի բիթով և - որը թողնում է երեքի անջատիչի արժեքը: Պատկերը ցույց է տալիս երկուական անջատիչի արժեքների խզումը. Այն ցույց է տալիս GPIOA և B բայթ արժեքների հումքը, այնուհետև յուրաքանչյուր նիշի երկուական արժեքը և տասնորդական արժեքը:

Քայլ 9:

Այսպիսով, եկեք տեսնենք ցուցադրման ուրվագիծը.

/ * Օրինակ 40a-Կարդացեք MCP23017- ի միջոցով չորս BW անջատիչներ, ցուցադրեք SAA1064/4-նիշանի 7-հատվածի LED էկրանով */// MCP23017 կապում է 15 ~ 17 դեպի GND, I2C ավտոբուսի հասցեն `0x20 // SAA1064 I2C ավտոբուսի հասցե 0x38 # ներառել «Wire.h» // լուսադիոդային նիշերի սահմանումների համար int թվեր [16] = {63, 6, 91, 79, 102, 109, 125, 7, 127, 111, 119, 124, 57, 94, 121, 113 }; բայթ GPIOA, GPIOB, dig1, dig2, dig3, dig4; void initSAA1064 () {// setup 0x38 Wire.beginTransmission (0x38); Wire.write (0); Wire.write (B01000111); // 12mA ելք, ոչ մի թվանշան բացակայում է Wire.endTransmission (); } void setup () {Serial.begin (9600); Wire.begin (); // գործարկել I2C ավտոբուս initSAA1064 (); } void loop () {// կարդալ A բանկի մուտքերը Wire.beginTransmission (0x20); Wire.write (0x12); Wire.endTransmission (); Մետաղալար. Խնդրում ենք (0x20, 1); GPIOA = Wire.read (); // այս բայթը պարունակում է 1 և 2 թվանշանների անջատիչի տվյալները // կարդալ B Wire.beginTransmission բանկի մուտքերը (0x20); Wire.write (0x13); Wire.endTransmission (); Մետաղալար. Խնդրում ենք (0x20, 1); GPIOB = Wire.read (); // այս բայթը պարունակում է 3 և 4 թվանշանների անջատիչի տվյալները // հանեք յուրաքանչյուր անջատիչի արժեքը // dig1 LHS, dig4 RHS dig4 = GPIOB >> 4; dig3 = GPIOB & B00001111; dig2 = GPIOA >> 4; dig1 = GPIOA & B00001111; // ուղարկել GPIO- ի և առանձին անջատիչների տվյալները սերիական մոնիտորին // վրիպազերծման և շահերի համար Serial.print ("GPIOA ="); Serial.println (GPIOA, BIN); Serial.print ("GPIOB ="); Serial.println (GPIOB, BIN); Serial.println (); Serial.print ("թվանշան 1 ="); Serial.println (dig1, BIN); Serial.print ("թվանշան 2 ="); Serial.println (dig2, BIN); Serial.print ("թվանշան 3 ="); Serial.println (dig3, BIN); Serial.print ("թվանշան 4 ="); Serial.println (dig4, BIN); Serial.println (); Serial.print ("թվանշան 1 ="); Serial.println (dig1, DEC); Serial.print ("թվանշան 2 ="); Serial.println (dig2, DEC); Serial.print ("թվանշան 3 ="); Serial.println (dig3, DEC); Serial.print ("թվանշան 4 ="); Serial.println (dig4, DEC); Serial.println (); // ուղարկեք անջատիչի արժեքը LED էկրանին SAA1064 Wire.beginTransmission (0x38) միջոցով; Wire.write (1); Wire.write (թվանշաններ [dig4]); Wire.write (թվեր [dig3]); Wire.write (թվանշաններ [dig2]); Wire.write (թվեր [dig1]); Wire.endTransmission (); ուշացում (10); ուշացում (1000); }

Իսկ անհավատների համար … տեսաֆիլմերի ցուցադրում:

Այսպիսով, դուք ունեք այն: Չորս թվանշան մեկի փոխարեն, և I2C ավտոբուսի վրայով, որը պահպանում է Arduino թվային մուտքի/ելքի կապում: Օգտագործելով ութ MCP23017, դուք կարող եք կարդալ միանգամից 32 թվանշան: Funվարճացեք դա անելով:

Դուք կարող եք պատվիրել ինչպես BCD, այնպես էլ տասնորդական անջատիչներ տարբեր չափերի PMD Way- ից ՝ անվճար առաքում ամբողջ աշխարհում:

Այս գրառումը ձեզ է բերել pmdway.com- ը `ամեն ինչ արտադրողների և էլեկտրոնիկայի սիրահարների համար` անվճար առաքում ամբողջ աշխարհով:

Խորհուրդ ենք տալիս: