Будем использовать LCD дисплей совместно с клавиатурой и отладочной платой Arduino, чтобы создать калькулятор.
Что нам понадобится:
- отладочная плата Arduino;
- LCD дисплей 1602: 2 строки по 16 символов;
- клавиатура 4x4;
- макетная плата;
- потенциометр, 1–10 кОм;
- резистор, 200–1000 Ом;
- перемычки.
Принцип действия
Это простое устройство стартует с очистки экрана LCD и ждет нажатий кнопок на клавиатуре. В зависимости от нажатых пользователем кнопок оно формирует числа. Как только пользователь нажимает на кнопку операции, оно запоминает первое число и операцию, которую необходимо выполнить, и продолжает обрабатывать ввод второго числа. Когда пользователь закончит ввод второго числа и нажмет кнопку «равно» на клавиатуре, программа выполнит требуемую операцию и выведет на экран результат. После чего она ожидает нажатия кнопки «очистить» ('C'), чтобы начать всё с начала (пользователь также может в любой момент сбросить программу).
LCD дисплей 1602
Arduino IDE обладает встроенной библиотекой (LiquidCrystal.h), которая поддерживает LCD дисплеи на базе чипсета Hitachi HD44780 (и на базе совместимых аналогов). Кроме отображения текста на LCD, эта библиотека также может обрабатывать печать чисел с плавающей запятой с заданным количеством цифр после запятой, что делает работу разработчика проще. Например:
double Pi = 3.1415926535;
Lcd.print (Pi,4);
Этот код напечатает на LCD дисплее 3.1415, так как число 4 в вызове функции означает вывод только 4 цифр после запятой.
LCD дисплей в данном примере использует 4-битный режим передачи данных через выводы D4-D7 (11-14 на плате). Потенциометр действует, как делитель напряжения, и управляет контрастностью отображаемого текста. Его средний вывод подключен к выводу V0 (вывод 3) дисплея.
Настройка
Давайте подключим наш LCD к плате Arduino. Сначала подключите выводы +5V и GND от Arduino к линиям питания на макетной плате. Подключите свой LCD к макетной плате и соедините вывод 1 с шиной корпуса, а вывод 2 с шиной +5V.
Далее установите на макетную плату потенциометр и подключите две его крайние ноги: первую к +5V, вторую к GND (какая из них будет первой или второй, значения не имеет). Теперь подключите средний вывод потенциометра к выводу 3 LCD дисплея.
Нам понадобится подать питание на подсветку дисплея. Выводы 15 и 16 LCD дисплея – это анод и катод встроенного светодиода, который служит в качестве подсветки LCD. Мы подключаем их к шинам питания, как и любой другой светодиод к источнику напряжения 5 вольт: анод к положительному выводу напряжения, а катод к GND, с последовательно включенным токоограничивающим резистором. Вы можете использовать резистор номиналом 100–220 Ом. Был использован 1 кОм, так как с резистором 220 Ом подсветка была слишком яркой для моей камеры, чтобы снять видео. Если хотите, то можете заменить резистор потенциометром и сделать подсветку регулируемой.
Продолжаем. Выполните следующие соединения: вывод 4 LCD дисплея к выводу 7 платы Arduino, вывод 5 LCD дисплея к GND, вывод 6 LCD дисплея к выводу 8 платы Arduino, и последние выводы 11, 12, 13, 14 LCD дисплея к выводам 9, 10, 11, 12 платы Arduno, соответственно. Если вы хотите убедиться, что выполнили все соединения правильно, был добавлен простой код для проверки дисплея. Вы можете просто записать его в свою плату Arduno и посмотреть, работает ли ваш LCD дисплей правильно.
TOP!!!! Клавиатура
Для Arduino существует библиотека Keypad.h, которая способна обрабатывать ввод с матричной клавиатуры и проста в использовании. Эта библиотека устраняет необходимость использования внешних подтягивающих резисторов, так как она использует встроенные в микросхему подтягивающие резисторы, а также обрабатывает/устанавливает высокое сопротивление на всех выводах неиспользуемого столбца. Она, по сути, сканирует столбец за столбцом. Выполняется это путем установки низкого уровня на выводе текущего столбца и чтения значений выводов строк для этого столбца, а затем перехода к следующему столбцу и так далее, пока не просканирует все подключенные/назначенные выводы. Кроме использования встроенных подтягивающих резисторов, библиотека также обрабатывает дребезг контактов. Библиотека не использует задержки; вместо этого, она периодически использует встроенную функцию millis() Arduino и определяет, как долго была нажата кнопка, и было изменение состояния определенной кнопки. Без задержек код выполняется более эффективно и не потребляет вычислительные ресурсы, устраняя необходимость обработки дребезга контактов с использованием программных задержек.
Желательно использовать выводы на плате Arduino только с одной стороны с 0 по 13, так как это как раз необходимое количество выводов (и было бы проще подключать провода, расположенные на одной стороне, и не получить в итоге спутанную лапшу из проводов). Но после нескольких тестов светодиод на выводе 13 может раздражать, поэтому разрешено не использовать вывод 13, а также не использовать выводы 0–1. Можно подключить LCD к выводам 7–12, а клавиатуру к выводам 2–5 и аналоговым выводам A2–A5 для строк и столбцов. Таким образом, вы можете подключить клавиатуру, как вам удобно; просто убедитесь, что разделили строки и столбцы. Либо подключите строки к выводам A2–A5 или к выводам 2–5, а столбцы подключите к оставшимся выводам на противоположной стороне платы Arduino. Так, если вы подключаете строку 1 к выводу A2, то подключайте столбец 1 к выводу 2.
Если вы подключили что-то не так, не волнуйтесь! Просто откройте исходный код программы калькулятора и измените порядок выводов клавиатуры в соответствии с вашей схемой:
Если вы хотите проверить вашу клавиатуру, есть простой код, который поможет вам сделать это. Просто скомпилируйте и загрузите его в плату Arduino с подключенной клавиатурой:
Программа/код
Код состоит из трех циклов. Первый цикл сканирует клавиатуру на наличие нажатий клавиш и выводит их на дисплей, одну клавишу за раз. В то же время, когда он сдвигает предыдущее число на один порядок вверх, он добавляет новую цифру на место единиц. Это продолжается, пока пользователь не нажмет на кнопку одного из операторов или не сбросит, нажав 'C'. Затем программа прерывает первый цикл и переходит ко второму.
Второй цикл в основном такой же, как и первый, но он ждет уже нажатия только кнопки '='. В этом месте, программа рассчитывает результат на основе выбранного оператора, печатает результат и переходит к следующему и завершающему циклу.
В третьем цикле программа просто ждет нажатия кнопки 'C' на клавиатуре. При нажатии кнопки 'C', программа перезапускается.
Если вы не хотите подключать клавиатуру к этому проекту (если у вас ее нет, и вы не хотите ее собирать), то можете исользовать, вместо нее, монитор последовательного порта Arduino. Вы можете сделать это, просто изменив несколько строк кода:
Заключение
Данная программа ограничена переменными и математикой платформы Arduino, поэтому не стоит ожидать от нее слишком многого – Arduino имеет свои ограничения, когда речь идет о больших числах и числах с плавающей запятой. Например, когда речь идет о числах с плавающей запятой, у нас есть типы float и double. Тип double должен иметь большую точность по сравнению с float, но на Arduino это не так. Поэтому использование double, вместо float, не даст вам большей точности, если вы не используете Arduino Due.
Что касается библиотеки работы с клавиатурой, если вы хотите глубже узнать, как она работает, то должны проверить эту ссылку и посмотреть ее возможности.