Оглавление:
Видео: Переключатели Arduino и колесико: 9 шагов
2024 Автор: John Day | [email protected]. Последнее изменение: 2024-01-30 11:51
В этой статье мы исследуем использование переключателей с колесиком / диском в наших системах Arduino. Вот несколько примеров из PMD Way.
Шаг 1:
Для непосвященных каждый переключатель представляет собой один вертикальный сегмент, и они могут быть соединены вместе, образуя различные размеры. Вы можете использовать кнопки для выбора цифр от нуля до девяти. Существуют альтернативы, в которых вместо кнопок увеличения / уменьшения есть колесико, которое можно перемещать большим пальцем.
До появления модных пользовательских интерфейсов эти переключатели были довольно популярными методами для настройки ввода числовых данных. Однако они все еще доступны сегодня, поэтому давайте посмотрим, как они работают и как мы можем их использовать. Значение переключателя доступно через двоичное десятичное или прямое десятичное число. Рассмотрим заднюю часть переключателя в форме BCD.
Шаг 2:
У нас есть общий слева, затем контакты для 1, 2, 4 и 8. Если вы подаете небольшое напряжение (скажем, 5 В) на общий, значение переключателя можно измерить, сложив значения контактов, которые находятся в ВЫСОКОЕ состояние. Например, если вы выберете 3 - контакты 1 и 2 будут под общим напряжением. Значения от нуля до девяти могут быть представлены как таковые в таблице.
Шаг 3:
К настоящему времени вы должны понимать, что значение переключателя будет легко прочитать - и вы правы, это так. Мы можем подключить 5 В к общему, выходы к цифровым входным контактам наших плат 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 # define q4 10 #define q8 11 void setup () {Serial.begin (9600); Wire.begin (); // подключаемся к шине i2c (для ведущего адрес необязателен) delay (500); pinMode (q1, ВХОД); // колесико '1' pinMode (q2, INPUT); // колесико '2' pinMode (q4, INPUT); // колесико '4' pinMode (q8, INPUT); // колесико '8'} void dispSAA1064 (int Count) // отправляет целое число 'Count' в Gravitech SAA1064 shield {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 () {общее число = 0; if (digitalRead (q1) == HIGH) {всего + = 1; } if (digitalRead (q2) == HIGH) {total + = 2; } if (digitalRead (q4) == HIGH) {всего + = 4; } if (digitalRead (q8) == HIGH) {всего + = 8; } вернуть итог; } недействительный цикл () {dispSAA1064 (readSwitch ()); // отправляет значение переключателя на экран дисплея Serial.println (readSwitch ()); // отправляет значение переключателя в окно последовательного монитора}
Функция readSwitch () является ключевой. Он вычисляет значение переключателя, добавляя числовое представление каждого выхода переключателя, и возвращает общую сумму в качестве результата. В этом примере мы использовали экран цифрового дисплея, которым управляет NXP SAA1064.
Шаг 5:
Функция readSwitch () является ключевой. Он вычисляет значение переключателя, добавляя числовое представление каждого выхода переключателя, и возвращает общую сумму в качестве результата. В этом примере мы использовали экран цифрового дисплея, которым управляет NXP SAA1064.
Если у вас его нет, ничего страшного - результаты также отправляются на серийный монитор. Теперь давайте посмотрим, как это работает на видео.
Шаг 6:
Ладно, это не так уж и много, но если вам нужен числовой ввод, он экономит много физического места и предлагает точный метод ввода.
Вот и все. Вы бы действительно использовали их в проекте? По одной цифре - да. Для четырех? Наверное, нет - возможно, проще было бы использовать 12-значную клавиатуру. Есть идея…
Шаг 7: несколько переключателей
Теперь мы рассмотрим, как читать четыре цифры - и не тратить впустую все эти цифровые контакты в процессе. Вместо этого мы будем использовать микросхему 16-битного расширителя портов Microchip MCP23017, которая обменивается данными через шину I2C. Он имеет шестнадцать цифровых входов / выходов, которые мы можем использовать для чтения состояния каждого переключателя.
Прежде чем двигаться дальше, обратите внимание, что для этой статьи требуются некоторые предполагаемые знания - шина I2C (первая и вторая части) и MCP23017. Сначала мы опишем аппаратные соединения, а затем скетч Arduino. Вспомните схему, использованную для примера с одним переключателем.
Когда переключатель был напрямую подключен к Arduino, мы считываем состояние каждого вывода, чтобы определить значение переключателя. Мы сделаем это снова, в большем масштабе, используя MCP23017. Рассмотрим распиновку:
Шаг 8:
У нас есть 16 контактов, что позволяет подключить четыре переключателя. Общие для каждого переключателя по-прежнему подключаются к 5 В, и каждый контакт переключателя по-прежнему имеет понижающий резистор 10 кОм на 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, для каждого банка возвращается один байт, причем первым идет самый старший бит. Каждые четыре бита будут соответствовать настройке переключателя, подключенного к соответствующим контактам ввода / вывода. Например, если мы запрашиваем данные для обоих банков ввода-вывода и переключатели установлены на 1 2 3 4 - банк A вернет 0010 0001, а банк B вернет 0100 0011.
Мы используем несколько операций битового сдвига, чтобы разделить каждые четыре бита в отдельную переменную, что оставляет нам значение каждой цифры. Например, чтобы разделить значение четвертого переключателя, мы сдвигаем биты из банка B >> 4. Это выталкивает значение третьего переключателя, и пустые биты слева становятся нулевыми.
Чтобы разделить значение третьего переключателя, мы используем составное побитовое & -, которое оставляет значение третьего переключателя. На изображении показана разбивка значений двоичного переключателя - на нем показаны необработанные значения байтов GPIOA и B, затем двоичное значение каждой цифры и десятичное значение.
Шаг 9:
Итак, давайте посмотрим на демонстрационный эскиз:
/ * Пример 40a - Чтение четырех кнопочных переключателей BCD через MCP23017, отображение на SAA1064 / 4-разрядный 7-сегментный светодиодный дисплей * / // Выводы MCP23017 с 15 по 17 на GND, адрес шины I2C - 0x20 // Адрес шины I2C SAA1064 0x38 # include "Wire.h" // для определения цифр светодиодов int digits [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 (); // отправляем значение переключателя на светодиодный дисплей через SAA1064 Wire.beginTransmission (0x38); Wire.write (1); Wire.write (цифры [dig4]); Wire.write (цифры [dig3]); Wire.write (цифры [цифра2]); Wire.write (цифры [цифра1]); Wire.endTransmission (); задержка (10); задержка (1000); }
А для неверующих… демонстрация видео.
Вот и все. Четыре цифры вместо одной и по шине I2C с сохранением цифровых контактов ввода / вывода Arduino. Используя восемь MCP23017, вы можете прочитать сразу 32 цифры. Получайте удовольствие от этого!
Вы можете заказать в PMD Way как двоично-десятичные, так и десятичные переключатели различных размеров с бесплатной доставкой по всему миру.
Этот пост предоставлен pmdway.com - все для производителей и любителей электроники с бесплатной доставкой по всему миру.
Рекомендуемые:
Руль и педали из картона своими руками! (Обратная связь, переключатели весла, дисплей) для гоночных симуляторов и игр: 9 шагов
Руль и педали из картона своими руками! (Обратная связь, переключатели весла, дисплей) для гоночных симуляторов и игр: Привет всем! В эти скучные времена мы все валяемся, ища чем заняться. Реальные гонки были отменены и заменены симуляторами. Я решил построить недорогой симулятор, который работает безупречно, если
Модернизация освещения с помощью пульта дистанционного управления - существующие настенные переключатели продолжают работать: 8 шагов
Модернизация освещения с помощью пульта дистанционного управления - существующие настенные переключатели продолжают работать: обновление от 4 октября 2017 года - см. Дистанционно управляемый переключатель света - модернизация. Выключатель света по-прежнему работает, никаких дополнительных писем для улучшенной версии Bluetooth с низким энергопотреблением (BLE). Обновление 8 ноября 2016 г. - Обновлено с изменениями, внесенными в проект «Модернизированные таймеры вентилятора»
ЧАСТЬ 2 - СБОРКА GPIO ARM - RGB - ФУНКЦИОНАЛЬНЫЕ ВЫЗОВЫ - Переключатели: 6 шагов
ЧАСТЬ 2 - СБОРКА GPIO ARM - RGB - ФУНКЦИОНАЛЬНЫЕ ВЫЗОВЫ - Переключатели: В части 1 мы узнали, как переключать один красный светодиод на плате разработки MSP432 LaunchPad от Texas Instruments, используя сборку вместо C / C ++. В этой инструкции мы будет делать что-то подобное - управлять светодиодом RGB, который также находится на этом сэме
Напольные переключатели / коврики: 11 шагов (с изображениями)
Напольные переключатели / коврики: в этом руководстве я расскажу, как я построил напольные переключатели для установки. Есть много замечательных руководств о том, как сделать напольные переключатели, но я хотел попробовать сделать их как можно более модульными, дешевыми, заменяемыми и моющимися, используя т
Сделайте свои собственные дистанционные переключатели питания: 9 шагов (с изображениями)
Сделайте свои собственные удаленные переключатели питания: большинство людей знают о резервном питании (то есть о том, что многие электронные устройства продолжают потреблять определенную мощность, даже когда они выключены). Один из способов избавиться от резервного питания - использовать линейку питания или устройство защиты от перенапряжения со встроенным переключателем, чтобы отключить