Съдържание:

Превключватели Arduino и Thumbwheel: 9 стъпки
Превключватели Arduino и Thumbwheel: 9 стъпки

Видео: Превключватели Arduino и Thumbwheel: 9 стъпки

Видео: Превключватели Arduino и Thumbwheel: 9 стъпки
Видео: Драм-секвенсор Arduino: 8 дорожек, 16 шагов на такт, 8 тактов на паттерн 2024, Юли
Anonim
Превключватели Arduino и Thumbwheel
Превключватели Arduino и Thumbwheel

В тази статия разглеждаме използването на превключватели с бутало/колело с нашите системи Arduino. Ето някои примери, получени от PMD Way.

Етап 1:

Образ
Образ

За непосветените всеки превключвател е един вертикален сегмент и те могат да бъдат свързани заедно, за да образуват различни размери. Можете да използвате бутоните, за да избирате от цифри от нула до девет. Налични са алтернативи, които имат колело, което можете да движите с палец вместо с бутоните за увеличаване/намаляване.

Преди дните на фантастични потребителски интерфейси тези ключове бяха доста популярни методи за настройка на цифрово въвеждане на данни. Те обаче са налични и днес, така че нека да видим как работят и как можем да ги използваме. Стойността на превключвателя се предоставя чрез двоично кодиран десетичен или прав десетичен знак. Помислете за задната част на превключвателя под формата на BCD.

Стъпка 2:

Образ
Образ

Имаме общи отляво, след това контакти за 1, 2, 4 и 8. Ако приложите малко напрежение (да речем 5V) към общото, стойността на превключвателя може да бъде измерена чрез добавяне на стойностите на контактите, които са в ВИСОКО състояние. Например, ако изберете 3 - контактите 1 и 2 ще бъдат при общо напрежение. Стойностите между нула и девет могат да бъдат представени като такива в таблицата.

Стъпка 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 #define q2 9 # define 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); // колело '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: Множество превключватели

Образ
Образ

Сега ще разгледаме как да четем четири цифри - и да не пропиляваме всички тези цифрови щифтове в процеса. Вместо това ще използваме IC IC за разширение на 16-битовия порт Microchip MCP23017, който комуникира чрез I2C шината. Той има шестнадесет цифрови входни/изходни пина, които можем да използваме, за да прочетем състоянието на всеки превключвател.

Преди да продължите напред, имайте предвид, че за тази статия са необходими някои предполагаеми познания - I2C шината (първа и втора част) и MCP23017. Първо ще опишем хардуерните връзки, а след това скицата на Arduino. Припомнете схемата, използвана за примера с единичен превключвател.

Когато превключвателят беше директно свързан към Arduino, четем състоянието на всеки пин, за да определим стойността на превключвателя. Ще направим това отново, в по -голям мащаб, използвайки MCP23017. Помислете за схемата на извеждане:

Стъпка 8:

Имаме 16 пина, което позволява да се свържат четири превключвателя. Общите за всеки превключвател все още се свързват към 5V и всеки контакт на превключвателя все още има 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 - банка А ще върне 0010 0001, а банка В ще върне 0100 0011.

Използваме някои операции за преместване на битове, за да разделим всеки четири бита в отделна променлива - което ни оставя стойността на всяка цифра. Например, за да отделим стойността на превключвател четири, изместваме битовете от банка В >> 4. Това изтласква стойността на превключвател три навън и празните битове вляво стават нула.

За да разделим стойността за превключвател три, използваме съединение побитово & - което оставя стойността на превключвател три. Изображението показва разбивка на стойностите на двоичния превключвател - показва необработените стойности на GPIOA и B байтове, след това двоичната стойност на всяка цифра и десетичната стойност.

Стъпка 9:

Нека да видим демонстрационната скица:

/ * Пример 40а-Прочетете четири BCD превключвателя с колело чрез MCP23017, дисплей на 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; void initSAA1064 () {// настройка 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 (); 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 цифри наведнъж. Забавлявайте се с това!

Можете да поръчате както BCD, така и десетични ключове в различни размери от PMD Way, с безплатна доставка по целия свят.

Тази публикация ви е предоставена от pmdway.com - всичко за производители и любители на електрониката, с безплатна доставка по целия свят.

Препоръчано: