Arduino Shield: назначение, подключение, программирование на примере LCD Keypad shield: различия между версиями
м (Artem Bakulin, KT-32 переименовал страницу Arduino Shield: назначение, подключение, программирование в Arduino Shield: назначение, подключение, программирование на примере LCD Keypad shield) |
Нет описания правки |
||
Строка 11: | Строка 11: | ||
== Подключение к Arduino на примере шилда LCD Keypad Shield == | == Подключение к Arduino на примере шилда LCD Keypad Shield == | ||
Подключение шилда очень простое – нужно попасть ножками в соответствующие разъемы платы ардуино и аккуратно совместить их. Ничего дополнительно подсоединять или припаивать не надо. Нужно помнить и учитывать тот факт, что часть пинов зарезервированы для управления дисплеем и кнопками и не может быть использована для других нужд! Для удобства подключения дополнительного оборудования на плате выведены дополнительные разъемы 5В и GND к каждой контактной площадке аналоговых пинов. Это, безусловно, упрощает работу с датчиками. Также можно подключать цифровые устройства через свободные пины 0-3 и 11-13. Подключив шилд, мы можем работать с экраном и кнопками на нем так же, как с отдельными устройствами, учитывая только номера пинов, к которым припаяны соответствующие контакты. | Подключение шилда очень простое – нужно попасть ножками в соответствующие разъемы платы ардуино и аккуратно совместить их. Ничего дополнительно подсоединять или припаивать не надо. Нужно помнить и учитывать тот факт, что часть пинов зарезервированы для управления дисплеем и кнопками и не может быть использована для других нужд! Для удобства подключения дополнительного оборудования на плате выведены дополнительные разъемы 5В и GND к каждой контактной площадке аналоговых пинов. Это, безусловно, упрощает работу с датчиками. Также можно подключать цифровые устройства через свободные пины 0-3 и 11-13. Подключив шилд, мы можем работать с экраном и кнопками на нем так же, как с отдельными устройствами, учитывая только номера пинов, к которым припаяны соответствующие контакты. | ||
[[Файл:Подключение LCD Keypad Shield.png|мини|575x575пкс|Распиновка LCD Shield]] | |||
{| class="wikitable" | {| class="wikitable" | ||
|Контакт дисплея LCD 1602 | |Контакт дисплея LCD 1602 | ||
Строка 120: | Строка 121: | ||
|0, 1 | |0, 1 | ||
|} | |} | ||
[[Файл:LCD Shield.png|мини|LCD Keypad Shield]] | |||
== Программирование на примере LCD Keypad shield == | |||
Пример скетча для работы с экраном и кнопками меню | |||
В данном примере мы определяем текущую нажатую кнопку и выводим ее название на экран. Обратите внимание, что для удобства мы выделили операцию определения кнопки в отдельную функцию. Также в скетче мы выделили отдельный метод для вывода текста на экран. В ней мы показываем сообщение (параметр message) и очищаем его через секунду. Нужно помнить, что в течение этой секунды нажатия кнопок не обрабатываются | |||
#include <LiquidCrystal.h> | |||
LiquidCrystal lcd(8, 9, 4, 5, 6, 7); | |||
#define BTN_UP 1 | |||
#define BTN_DOWN 2 | |||
#define BTN_LEFT 3 | |||
#define BTN_RIGHT 4 | |||
#define BTN_SELECT 5 | |||
#define BTN_NONE 10 | |||
int detectButton() { | |||
int keyAnalog = analogRead(A0); | |||
if (keyAnalog < 100) { | |||
// Значение меньше 100 – нажата кнопка right | |||
return BTN_RIGHT; | |||
} else if (keyAnalog < 200) { | |||
// Значение больше 100 (иначе мы бы вошли в предыдущий блок результата сравнения, но меньше 200 – нажата кнопка UP | |||
return BTN_UP; | |||
} else if (keyAnalog < 400) { | |||
// Значение больше 200, но меньше 400 – нажата кнопка DOWN | |||
return BTN_DOWN; | |||
} else if (keyAnalog < 600) { | |||
// Значение больше 400, но меньше 600 – нажата кнопка LEFT | |||
return BTN_LEFT; | |||
} else if (keyAnalog < 800) { | |||
// Значение больше 600, но меньше 800 – нажата кнопка SELECT | |||
return BTN_SELECT; | |||
} else { | |||
// Все остальные значения (до 1023) будут означать, что нажатий не было | |||
return BTN_NONE; | |||
} | |||
} | |||
void clearLine(int line){ | |||
lcd.setCursor(0, 1); | |||
lcd.print(" "); | |||
} | |||
void printDisplay(String message){ | |||
Serial.println(message); | |||
lcd.setCursor(0, 1); | |||
lcd.print(message); | |||
delay(1000); | |||
clearLine(1); | |||
} | |||
void setup() { | |||
Serial.begin(9600); | |||
lcd.begin(16, 2); | |||
lcd.print("Arduino Master"); | |||
delay(3000); | |||
lcd.setCursor(0, 0); | |||
lcd.print("Arduino Master"); | |||
} | |||
void loop() { | |||
int button = detectButton(); | |||
switch (button) { | |||
case BTN_UP: | |||
printDisplay("UP"); | |||
break; | |||
case BTN_DOWN: | |||
printDisplay("DOWN"); | |||
break; | |||
case BTN_LEFT: | |||
printDisplay("LEFT"); | |||
break; | |||
case BTN_RIGHT: | |||
printDisplay("RIGHT"); | |||
break; | |||
case BTN_SELECT: | |||
printDisplay("SELECT"); | |||
break; | |||
default: | |||
//printDisplay("Press any key"); | |||
break; | |||
} | |||
} |
Версия от 10:28, 24 июня 2021
Arduino Shields – платы расширения для ардуино.
Плата расширения Arduino – это законченное устройство, предназначенное для выполнения определенных функций и подключаемое к основному контроллеру с помощью стандартных разъемов. Такие платы, совершенно логично называемые "платами расширения", служат для выполнения самых разнообразных задач и могут существенно упростить жизнь "ардуинщика".
Плата расширения или Arduino shield?
Давайте сперва разберемся в терминах. Плата расширения Ардуино – это законченное устройство, предназначенное для выполнения определенных функций и подключаемое к основному контроллеру с помощью стандартных разъемов. Другое популярное название платы расширения – англоязычное Arduino shield или просто "шилд". На плате расширения установлены все необходимые электронные компоненты, а взаимодействие с микроконтроллером и другими элементами основной платы происходят через стандартные пины ардуино. Чаще всего питание на шилд тоже подается с основной платы arduino, хотя во многих случаях есть возможность запитки с других источников. В любом шилде остаются несколько свободных пинов, которые вы можете использовать по своему усмотрению, подключив к ним любые другие компоненты.
Англоязычное слово Shield переводится как щит, экран, ширма. В нашем контексте его следует понимать как нечто, покрывающее плату контроллера, создающего дополнительный слой устройства, ширму, за которой скрываются различные элементы.
Подключение к Arduino на примере шилда LCD Keypad Shield
Подключение шилда очень простое – нужно попасть ножками в соответствующие разъемы платы ардуино и аккуратно совместить их. Ничего дополнительно подсоединять или припаивать не надо. Нужно помнить и учитывать тот факт, что часть пинов зарезервированы для управления дисплеем и кнопками и не может быть использована для других нужд! Для удобства подключения дополнительного оборудования на плате выведены дополнительные разъемы 5В и GND к каждой контактной площадке аналоговых пинов. Это, безусловно, упрощает работу с датчиками. Также можно подключать цифровые устройства через свободные пины 0-3 и 11-13. Подключив шилд, мы можем работать с экраном и кнопками на нем так же, как с отдельными устройствами, учитывая только номера пинов, к которым припаяны соответствующие контакты.
Контакт дисплея LCD 1602 | Описание | Контакт на LCD Shield |
Пины LCD экрана | ||
GND | Земля | |
VDD | Питание 5В | |
Contrast | Управление контрастом | Потенциометр |
RS | Команды/Данные | 8 |
R/W | Чтение/Запись | |
Enable | Включение (активирование) | 9 |
DB0 | Не используется | |
DB1 | Не используется | |
DB2 | Не используется | |
DB3 | Не используется | |
DB4 | Дата 1 | 4 |
DB5 | Дата 2 | 5 |
DB6 | Дата 3 | 6 |
DB7 | Дата 4 | 7 |
Back LED + | Включение подсветки | 10 |
Back LED – | Питание подсветки | |
Пины для кнопок | ||
Кнопка UP | Управляющая кнопка | A0 |
Кнопка DOWN | Управляющая кнопка | A0 |
Кнопка LEFT | Управляющая кнопка | A0 |
Кнопка RIGHT | Управляющая кнопка | A0 |
Кнопка SELECT | Управляющая кнопка | A0 |
Reset | Перезагрузка платы | Reset |
ICSP | ICSP для перепрошивки встроенного микроконтроллера HD44780U | |
UART | Контакты для UART соединения | 0, 1 |
Программирование на примере LCD Keypad shield
Пример скетча для работы с экраном и кнопками меню
В данном примере мы определяем текущую нажатую кнопку и выводим ее название на экран. Обратите внимание, что для удобства мы выделили операцию определения кнопки в отдельную функцию. Также в скетче мы выделили отдельный метод для вывода текста на экран. В ней мы показываем сообщение (параметр message) и очищаем его через секунду. Нужно помнить, что в течение этой секунды нажатия кнопок не обрабатываются
#include <LiquidCrystal.h> LiquidCrystal lcd(8, 9, 4, 5, 6, 7); #define BTN_UP 1 #define BTN_DOWN 2 #define BTN_LEFT 3 #define BTN_RIGHT 4 #define BTN_SELECT 5 #define BTN_NONE 10 int detectButton() { int keyAnalog = analogRead(A0); if (keyAnalog < 100) { // Значение меньше 100 – нажата кнопка right return BTN_RIGHT; } else if (keyAnalog < 200) { // Значение больше 100 (иначе мы бы вошли в предыдущий блок результата сравнения, но меньше 200 – нажата кнопка UP return BTN_UP; } else if (keyAnalog < 400) { // Значение больше 200, но меньше 400 – нажата кнопка DOWN return BTN_DOWN; } else if (keyAnalog < 600) { // Значение больше 400, но меньше 600 – нажата кнопка LEFT return BTN_LEFT; } else if (keyAnalog < 800) { // Значение больше 600, но меньше 800 – нажата кнопка SELECT return BTN_SELECT; } else { // Все остальные значения (до 1023) будут означать, что нажатий не было return BTN_NONE; } } void clearLine(int line){ lcd.setCursor(0, 1); lcd.print(" "); } void printDisplay(String message){ Serial.println(message); lcd.setCursor(0, 1); lcd.print(message); delay(1000); clearLine(1); } void setup() { Serial.begin(9600); lcd.begin(16, 2); lcd.print("Arduino Master"); delay(3000); lcd.setCursor(0, 0); lcd.print("Arduino Master"); } void loop() { int button = detectButton(); switch (button) { case BTN_UP: printDisplay("UP"); break; case BTN_DOWN: printDisplay("DOWN"); break; case BTN_LEFT: printDisplay("LEFT"); break; case BTN_RIGHT: printDisplay("RIGHT"); break; case BTN_SELECT: printDisplay("SELECT"); break; default: //printDisplay("Press any key"); break; } }