Мазмұны:

Arduino және Thumbwheel қосқыштары: 9 қадам
Arduino және Thumbwheel қосқыштары: 9 қадам

Бейне: Arduino және Thumbwheel қосқыштары: 9 қадам

Бейне: Arduino және Thumbwheel қосқыштары: 9 қадам
Бейне: Arduino ҚАЗАҚША [2] Ардуино және Макеталық тақта 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 цифрлық түйреуіштерге қосу 5В қосқышты 'C' нүктесіне, ал GND -ді… GND -ге қосу қарапайым мәселе. Әрі қарай, бізге кірісті оқуға және BCD шығысын ондық бөлшекке түрлендіретін эскиз болуы керек. Келесі эскизді қарастырыңыз:

/ * SAA1064 сандық дисплей қалқанын қолданады https://www.gravitech.us/7segmentshield.html SAA1064 қалқаны болмаса сериялық мониторды қолданады */#include «Wire.h» #define q1 8 #define q2 9 # q4 10 анықтау #qf 11 анықта 11 жарамсыз күйге келтіру () {Serial.begin (9600); Wire.begin (); // қосылыңыз i2c шинасы (мекенжай мастер үшін міндетті емес) кешіктіру (500); pinMode (q1, INPUT); // дөңгелек '1' pinMode (q2, INPUT); // руль дөңгелегі '2' pinMode (q4, INPUT); // дөңгелек '4' pinMode (q8, INPUT); // дөңгелек дөңгелегі '8'} жарамсыз dispSAA1064 (int Count) // «Count» бүтін санын Gravitech SAA1064 қалқанына жібереді {const int searchup [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; Жүздеген = (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) {барлығы+= 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 -қадам: бірнеше қосқыштар

Кескін
Кескін

Енді біз төрт цифрды қалай оқу керектігін қарастырамыз - және бұл процесте барлық цифрлық түйреуіштерді ысырап етпейміз. Оның орнына біз I2C шинасы арқылы байланысатын Microchip MCP23017 16 разрядты порт кеңейткішін қолданамыз. Онда әр қосқыштың күйін оқу үшін қолдануға болатын он алты цифрлық кіріс/шығыс түйреуіштері бар.

Алға жылжымас бұрын, осы мақала үшін кейбір болжамды білім қажет екенін ескеріңіз - I2C шинасы (бірінші және екінші бөліктер) және MCP23017. Біз алдымен аппараттық қосылыстарды, содан кейін Arduino эскизін сипаттайтын боламыз. Бір қосқыш мысалы үшін қолданылатын схеманы еске түсіріңіз.

Коммутатор Arduino -ға тікелей қосылған кезде, біз қосқыштың мәнін анықтау үшін әр істіктің күйін оқимыз. Біз мұны MCP23017 көмегімен кеңірек түрде жасаймыз. Бекіту диаграммасын қарастырыңыз:

8 -қадам:

Бізде 16 түйреуіш бар, бұл төрт қосқышты қосуға мүмкіндік береді. Әр коммутатордың ортақ нүктелері әлі де 5В-қа қосылады, және әр коммутатордың контактісінде GND-ге дейін 10к төмен түсетін резистор бар. Содан кейін біз GPBA0 ~ 3 -ке бірінші цифрдың 1, 2, 4, 8 түйреуіштерін қосамыз; 2, 1, 2, 4, 8 цифрлары GPA4 ~ 7 дейін; GPB0 ~ 3 -ке дейінгі 3, 1, 2, 4, 8 цифрлары және GPB4 ~ 7 -ге дейінгі төртінші цифрлар 1, 2, 4, 8.

Енді қосқыштарды қалай оқимыз? Барлық сымдар сізге қиын деп ойлауы мүмкін, бірақ эскиз өте қарапайым. GPBA және B мәндерін оқығанда, әр банк үшін бір байт қайтарылады, ең алдымен маңызды бит. Әрбір төрт бит сәйкес келетін енгізу -шығару түйреуіштеріне қосылған коммутатордың параметріне сәйкес келеді. Мысалы, егер біз IO банктері үшін де, коммутаторлар үшін де 1 2 3 4 мәніне деректерді сұрасақ - А банкі 0010 0001 қайтарады, ал В банкі 0100 0011 қайтарады.

Біз әрбір төрт битті бөлек айнымалыға бөлу үшін кейбір бит ауыстыру операцияларын қолданамыз, бұл бізге әр цифрдың мәнін қалдырады. Мысалы, төрт коммутатордың мәнін ажырату үшін біз В >> 4 банкінен биттерді ауыстырамыз. Бұл үш қосқыштың мәнін сыртқа шығарады, ал сол жақтағы бос биттер нөлге айналады.

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

9 -қадам:

Сонымен демонстрациялық эскизді көрейік:

/ * Мысал 40а-MCP23017 арқылы төрт дөңгелекті BCD қосқышын оқыңыз, SAA1064 дисплейінде көрсетіңіз/4-разрядты 7-сегментті жарықдиодты дисплейде */// 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 () {// орнату 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 (); // қосқыш мәнін 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 цифрды оқи аласыз. Мұнымен рахаттаныңыз!

Сіз PMD Way -ден әр түрлі өлшемдегі BCD және ондық қосқыштарға тапсырыс бере аласыз, бүкіл әлем бойынша ақысыз жеткізіліммен.

Бұл хабарламаны pmdway.com сізге жеткізді - бұл өндірушілер мен электроникаға әуесқойлар үшін, бүкіл әлем бойынша ақысыз жеткізу.

Ұсынылған: