Мазмуну:

Arduino жана Thumbwheel которгучтары: 9 кадам
Arduino жана Thumbwheel которгучтары: 9 кадам

Video: Arduino жана Thumbwheel которгучтары: 9 кадам

Video: Arduino жана Thumbwheel которгучтары: 9 кадам
Video: Как запрограммировать модуль реле Wi-Fi ESP8266 ESP-01 2024, Ноябрь
Anonim
Arduino жана Thumbwheel которгучтары
Arduino жана Thumbwheel которгучтары

Бул макалада биз Arduino тутумдарыбыз менен дөңгөлөк/бармак дөңгөлөктөрүн колдонууну карап чыгабыз. Бул жерде PMD Wayден алынган кээ бир мисалдар.

1 кадам:

Сүрөт
Сүрөт

Билбегендер үчүн, ар бир которгуч бир тик сегмент болуп саналат жана алар ар кандай өлчөмдөрдү түзүү үчүн бири -бирине туташтырылышы мүмкүн. Сиз нөлдөн тогузга чейинки цифраларды тандоо үчүн баскычтарды колдоно аласыз. Көбөйтүү/азайтуу баскычтарынын ордуна бармагыңыз менен жылдыра турган дөңгөлөгү бар альтернативалар бар.

Колдонуучу интерфейстеринин күндөрүнө чейин, бул которгучтар сандык маалыматтарды киргизүүнүн абдан популярдуу ыкмалары болгон. Бирок алар бүгүнкү күндө дагы бар, андыктан алардын кантип иштээрин жана биз аларды кантип колдоно аларыбызды карап көрөлү. Которгучтун мааниси экилик коддуу ондук же түз ондук аркылуу жеткиликтүү болот. BCD түрүндөгү которгучтун арт жагын карап көрүңүз.

2-кадам:

Сүрөт
Сүрөт

Бизде сол жакта жалпы, анан 1, 2, 4 жана 8 үчүн байланыштар бар. Эгерде сиз кичинекей чыңалууну (5В дейли) жалпыга колдонсоңуз, которгучтун мааниси контакттардын маанилерин кошуу менен өлчөнөт. Жогорку абал. Мисалы, эгер сиз 3тү тандасаңыз - 1 жана 2 байланыштар жалпы чыңалууда болот. Нөлдөн тогузга чейинки маанилер столдо ушундай көрсөтүлүшү мүмкүн.

3 -кадам:

Сүрөт
Сүрөт

Азырынча сиз которгучтун маанисин окуу оңой болорун түшүнүшүңүз керек - жана сиз туура, туура. Биз 5Vны жалпыга, биздин Arduino такталарыбыздын санарип кирүү казыктарына туташтыра алабыз, андан кийин digitalRead () колдонуп, ар бир чыгарманын баасын аныктайбыз. Эскизде биз BCD маанисин ондук санга айландыруу үчүн кээ бир негизги математиканы колдонобуз. Андыктан азыр муну кылалы.

Аппараттык көз караштан алганда, биз дагы бир нерсени эске алышыбыз керек-түртүүчү дөңгөлөк электрдик түрдө кадимкидей ачылуучу төрт баскыч сыяктуу иштейт. Бул жогорку жана төмөнкү мамлекеттердин ортосунда так айырмачылыкка ээ болуу үчүн түшүүчү резисторлорду колдонуубуз керек дегенди билдирет. Ошентип, бир которгучтун схемасы жогоруда көрсөтүлгөндөй.

4 -кадам:

Эми 1, 2, 4 жана 8 деп белгиленген чыгууларды (мисалы) 8, 9, 10 жана 11. санарип казыктарына туташтыруу жөнөкөй маселе. Андан кийин, биз кириштерди окуй турган жана BCD чыгарылышын ондукка айландыра турган эскизге ээ болушубуз керек. Төмөнкү эскизди карап көрүңүз:

/ * SAA1064 сандык дисплей калканчын колдонот https://www.gravitech.us/7segmentshield.html SAA1064 калканы жок болсо, сериялык мониторду колдонот */#include "Wire.h" #define q1 8 #define q2 9 # q4 аныктоо 10 #define q8 11 void setup () {Serial.begin (9600); Wire.begin (); // i2c автобусуна кошулуңуз (дарек мастер үчүн милдеттүү эмес) кечигүү (500); pinMode (q1, INPUT); // бармак дөңгөлөгү '1' pinMode (q2, INPUT); // бармак дөңгөлөгү '2' pinMode (q4, INPUT); // бармак дөңгөлөгү '4' pinMode (q8, INPUT); // thumbwheel '8'} боштук dispSAA1064 (int Count) // Gravitech SAA1064 калканына 'Count' бүтүн сандарын жөнөтөт {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); Миңдер = Count/1000; Жүздөр = (Count- (Thousands*1000))/100; Ондогон = (Саноо-((Миң*1000)+(Жүз*100)))/10; База = Саноо-((Миң*1000)+(Жүз*100)+(Он*10)); Wire.write (издөө [Негизги]); Wire.write (издөө [Ондогон]); Wire.write (издөө [Жүздөгөн]); Wire.write (издөө [Миңдеген)); Wire.endTransmission (); кечигүү (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; } жалпы кайтаруу; } void loop () {dispSAA1064 (readSwitch ()); // калканчты көрсөтүү үчүн которгучтун маанисин жөнөтөт Serial.println (readSwitch ()); // которуу маанисин сериялык монитор кутусуна жөнөтөт}

ReadSwitch () функциясы ачкыч болуп саналат. Бул которуунун маанисин ар бир которгучтун сандык өкүлчүлүгүн кошуу менен эсептейт жана анын жыйынтыгы катары сумманы кайтарат. Бул мисал үчүн биз NXP SAA1064 тарабынан башкарылуучу сандык дисплей калканчын колдондук.

5 -кадам:

Image
Image

ReadSwitch () функциясы ачкыч болуп саналат. Бул которуунун маанисин ар бир которгучтун сандык өкүлчүлүгүн кошуу менен эсептейт жана анын жыйынтыгы катары сумманы кайтарат. Бул мисал үчүн биз NXP SAA1064 тарабынан башкарылуучу сандык дисплей калканчын колдондук.

Эгер сизде жок болсо, анда баары жакшы - жыйынтыктар сериялык мониторго да жөнөтүлөт. Эми муну видеодо иш жүзүндө көрөлү.

6 -кадам:

Макул, бул анча окшош эмес, бирок эгер сизге сандык жазуу керек болсо, анда ал физикалык мейкиндикти үнөмдөйт жана кирүүнүн так ыкмасын сунуштайт.

Демек, сизде бар. Чынында буларды долбоордо колдонмок белеңиз? Бир сан үчүн - ооба. Төрт үчүн? Балким, андай эмес-балким 12 орундуу баскычтопту колдонуу оңой болмок. Идея бар…

7 -кадам: Бир нече которуштуруу

Сүрөт
Сүрөт

Эми биз төрт цифраны кантип окуу керектигин карап чыгабыз жана процессте ошол санарип казыктарды текке кетирбейбиз. Анын ордуна, I2C шинасы аркылуу байланышкан Microchip MCP23017 16-разряддуу порт кеңейтүүчү IC колдонобуз. Ал он алты санариптик кирүү/чыгаруу казыгына ээ, биз аларды ар бир которгучтун абалын окуу үчүн колдоно алабыз.

Алга кетүүдөн мурун, бул макала үчүн I2C автобус (биринчи жана экинчи бөлүктөрү) жана MCP23017 үчүн кээ бир болжолдуу билим талап кылынарын эске алыңыз. Биз адегенде аппараттык байланыштарды, андан кийин Arduino эскизин сүрөттөп беребиз. Бир алмаштыруучу мисал үчүн колдонулган схеманы эстеп көрүңүз.

Которуу Arduino менен түз туташканда, биз которгучтун маанисин аныктоо үчүн ар бир пиндин статусун окуйбуз. Биз муну MCP23017ди колдонуп, чоңураак масштабда жасайбыз. Түзүү диаграммасын карап көрөлү:

8 -кадам:

Бизде 16 казык бар, бул төрт өчүргүчтү туташтырууга мүмкүндүк берет. Ар бир которгучтун жалпы тилкелери дагы эле 5Vга туташат жана ар бир которгучтун контактында дагы деле GND үчүн 10k тартылган каршылык бар. Андан кийин биз 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 деп коюлса - А банкы 0010 0001ди, В банкы 0100 0011ди кайтарат.

Биз ар бир төрт битти өзүнчө өзгөрмөгө бөлүү үчүн кээ бир бит алмаштыруу операцияларын колдонобуз - бул бизге ар бир цифранын маанисин калтырат. Мисалы, төртүнчү которгучтун маанисин ажыратуу үчүн биз биттерди В банкынан жылдырабыз. 4. Бул үч которгучтун маанисин сыртка чыгарат жана сол жактагы бош биттер нөлгө айланат.

Үчүнчү которгучтун маанисин ажыратуу үчүн биз бит разряддуу & кошулмасын колдонобуз - бул үчүнчү которгучтун маанисин калтырат. Сүрөт бинардык которуунун маанилеринин бөлүнүшүн көрсөтөт - GPIOA жана B байт чийкилерин, андан кийин ар бир цифранын экилик маанисин жана ондук маанисин көрсөтөт.

9 -кадам:

Ошентип, демонстрация эскизин көрөлү:

/ * Мисал 40а-MCP23017 аркылуу төрт дөңгөлөктүү BCD өчүргүчтөрүн окуңуз, SAA1064/4 орундуу 7 сегменттүү LED дисплейде көрсөтүңүз */// MCP23017 пиндери 15 ~ 17 чейин GND, I2C автобустун дареги 0x20 // SAA1064 I2C автобус дареги 0x38 # кирет "Wire.h" // LED цифраларынын аныктамалары үчүн int цифралары [16] = {63, 6, 91, 79, 102, 109, 125, 7, 127, 111, 119, 124, 57, 94, 121, 113 }; байт GPIOA, GPIOB, dig1, dig2, dig3, dig4; жараксыз initSAA1064 () {// орнотуу 0x38 Wire.beginTransmission (0x38); Wire.write (0); Wire.write (B01000111); // 12мА чыгаруу, цифралык боштук жок Wire.endTransmission (); } void setup () {Serial.begin (9600); Wire.begin (); // I2C автобусун ишке киргизүү initSAA1064 (); } void loop () {// A Wire.beginTransmission банкынын кириштерин окуу (0x20); Wire.write (0x12); Wire.endTransmission (); Wire.requestFrom (0x20, 1); GPIOA = Wire.read (); // бул байт 1 жана 2 сандары үчүн которуу маалыматын камтыйт // B Wire.beginTransmission банкынын кириштерин окуңуз (0x20); Wire.write (0x13); Wire.endTransmission (); Wire.requestFrom (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 (); // SAA1064 Wire.beginTransmission (0x38) аркылуу LED дисплейине которуу маанисин жөнөтүү; Wire.write (1); Wire.write (цифралар [dig4]); Wire.write (цифралар [dig3]); Wire.write (цифралар [dig2]); Wire.write (цифралар [dig1]); Wire.endTransmission (); кечигүү (10); кечигүү (1000); }

Ал эми ишенбегендер үчүн … видео демонстрация.

Демек, сизде бар. Бир ордуна төрт цифралуу жана I2C автобустун үстүндө Arduino санариптик I/O казыктарын сактайт. Сегиз MCP23017ди колдонуу менен сиз бир эле учурда 32 цифраны окуй аласыз. Муну менен көңүл ачыңыз!

Сиз дүйнө жүзү боюнча бекер жеткирүү менен PMD Wayден BCD жана ондук которгучтарга заказ бере аласыз.

Бул билдирүү сизге pmdway.com тарабынан келген - бүткүл дүйнө жүзү боюнча бекер жеткирүү менен, өндүрүүчүлөр жана электроника ышкыбоздору үчүн.

Сунушталууда: