Arduino Shield: назначение, подключение, программирование на примере LCD Keypad shield: различия между версиями
Нет описания правки |
Нет описания правки |
||
(не показано 6 промежуточных версий 1 участника) | |||
Строка 1: | Строка 1: | ||
'''Arduino Shields''' – платы расширения для ардуино | [[Файл:Многофункциональный Arduino Shield.png|мини|400x400пкс|Многофункциональный Arduino Shield]] | ||
'''Arduino Shields''' – платы расширения для ардуино. | |||
== Плата расширения или Arduino shield? == | Плата расширения Arduino – это законченное устройство, предназначенное для выполнения определенных функций и подключаемое к основному контроллеру с помощью стандартных разъемов. Такие платы, совершенно логично называемые "платами расширения", служат для выполнения самых разнообразных задач и могут существенно упростить жизнь "ардуинщика". | ||
Давайте сперва разберемся в терминах. Плата расширения | |||
== Плата расширения или Arduino shield? == | |||
Давайте сперва разберемся в терминах. Плата расширения Ардуино – это законченное устройство, предназначенное для выполнения определенных функций и подключаемое к основному контроллеру с помощью стандартных разъемов. Другое популярное название платы расширения – англоязычное Arduino shield или просто "шилд". На плате расширения установлены все необходимые электронные компоненты, а взаимодействие с микроконтроллером и другими элементами основной платы происходят через стандартные пины ардуино. Чаще всего питание на шилд тоже подается с основной платы arduino, хотя во многих случаях есть возможность запитки с других источников. В любом шилде остаются несколько свободных пинов, которые вы можете использовать по своему усмотрению, подключив к ним любые другие компоненты. | |||
Англоязычное слово Shield переводится как щит, экран, ширма. В нашем контексте его следует понимать как нечто, покрывающее плату контроллера, создающего дополнительный слой устройства, ширму, за которой скрываются различные элементы. | Англоязычное слово Shield переводится как щит, экран, ширма. В нашем контексте его следует понимать как нечто, покрывающее плату контроллера, создающего дополнительный слой устройства, ширму, за которой скрываются различные элементы. | ||
== | ==Подключение к Arduino на примере шилда LCD Keypad Shield== | ||
Подключение шилда очень простое – нужно попасть ножками в соответствующие разъемы платы ардуино и аккуратно совместить их. Ничего дополнительно подсоединять или припаивать не надо. Нужно помнить и учитывать тот факт, что часть пинов зарезервированы для управления дисплеем и кнопками и не может быть использована для других нужд! Для удобства подключения дополнительного оборудования на плате выведены дополнительные разъемы 5В и GND к каждой контактной площадке аналоговых пинов. Это, безусловно, упрощает работу с датчиками. Также можно подключать цифровые устройства через свободные пины 0-3 и 11-13. Подключив шилд, мы можем работать с экраном и кнопками на нем так же, как с отдельными устройствами, учитывая только номера пинов, к которым припаяны соответствующие контакты. | |||
[[Файл:Подключение LCD Keypad Shield.png|мини|575x575пкс|Распиновка LCD Shield]] | |||
{| class="wikitable" | |||
|Контакт дисплея 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 Shield.png|мини|LCD Keypad Shield]] | |||
==Cкетч для работы с экраном и кнопками меню 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; | |||
} | |||
} |
Текущая версия от 21:24, 11 мая 2022
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 |
Cкетч для работы с экраном и кнопками меню 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; } }