Кто-нибудь модифицировал ЖК-экран 16x2 для работы с Arduino DUE?
Поскольку DUE работает от напряжения 3,3 В, кто-нибудь успешно модифицировал ЖК-экран 16x2 на 5 В для работы с Arduino DUE? Я думаю, что 3,3 В будет рассматриваться как логическая «1». экраном ЖК-дисплея 5 В, и нет выходов 5 В, которые возвращают напряжение 3,3 В, поскольку линия R/~W на ЖК-дисплее просто заземлена.
Хотелось бы услышать чьё-либо мнение по этому поводу.
Спасибо, Чарли
@w5cdt, 👍3
Обсуждение1 ответ
Я понимаю, что это тема для восьмилетних пользователей, однако мой ответ может кому-то помочь. Я подключил немодифицированный ЖК-экран без какой-либо марки к Arduino DUE, и он работает отлично — единственное, что мне пришлось изменить, — это аналоговые пороги для идентификации кнопок. Просто загрузите скетч и считайте реальные значения на дисплее, а затем введите средние значения между соседними кнопками в функции read_LCD_buttons.
//Пример с использованием библиотеки LiquidCrystal
#include <LiquidCrystal.h>
/*******************************************************
This program will test the LCD panel and the buttons
Mark Bramwell, July 2010
********************************************************/
// выбираем контакты, используемые на ЖК-панели
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
// определяем некоторые значения, используемые панелью и кнопками
int lcd_key = 0;
int adc_key_in = 0;
#define btnRIGHT 0
#define btnUP 1
#define btnDOWN 2
#define btnLEFT 3
#define btnSELECT 4
#define btnNONE 5
// читаем кнопки
int read_LCD_buttons()
{
adc_key_in = analogRead(0); // считываем значение с датчика
if (adc_key_in < 90) return btnRIGHT;
if (adc_key_in < 297) return btnUP;
if (adc_key_in < 533) return btnDOWN;
if (adc_key_in < 814) return btnLEFT;
if (adc_key_in < 1000) return btnSELECT;
return btnNONE; // когда все остальные терпят неудачу, возвращаем это...
}
int button_count=1;
// На большинстве плат Arduino к контакту 13 подключен светодиод.
// даем ему имя:
int led = 13;
int i;
void setup()
{
lcd.begin(16, 2); // запускаем библиотеку
lcd.setCursor(0,0);
lcd.print("Push the buttons"); // печатаем простое сообщение
// инициализируем цифровой вывод как выход.
pinMode(led, OUTPUT);
}
void loop()
{
delay(100);
lcd.setCursor(9,1); // перемещаем курсор на вторую строку "1" и 9 пробелов больше
lcd.print(" ");
lcd.setCursor(9,1); // перемещаем курсор на вторую строку "1" и 9 пробелов больше
lcd.print(analogRead(0)); // отображаем аналоговый вход A0 для калибровки значений
lcd.setCursor(0,1); // переходим в начало второй строки
lcd_key = read_LCD_buttons(); // читаем кнопки
switch (lcd_key) // в зависимости от того, какая кнопка была нажата, выполняем действие
{
case btnRIGHT:
lcd.print("RIGHT ");
button_count = 2;
break;
case btnLEFT:
lcd.print("LEFT ");
button_count = 3;
break;
case btnUP:
lcd.print("UP ");
button_count = 4;
break;
case btnDOWN:
lcd.print("DOWN ");
button_count = 5;
break;
case btnSELECT:
lcd.print("SELECT");
button_count = 6;
break;
case btnNONE:
lcd.print("NONE ");
button_count = 1;
break;
}
}
- Arduino Due vs Mega 2560
- Точность часов времени Arduino
- Регистры ввода-вывода SAM3X8E (Arduino Due)
- Построение графика на Python с использованием Tkinter Canvas
- Ручная установка Arduino Due
- analogRead всегда 1023 на Arduino Due
- Как выбрать пару SDA/SCL на Arduino Due?
- Как упаковать 16-битное целое число, чтобы отправить его с помощью serial.write?
Линия чтения/записи оборвана или всегда заземлена? Во время запуска контакты плавают, что ЖК-дисплей может интерпретировать как ВЫСОКИЙ, выдавая 5 В на контакты данных. На всякий случай вы можете добавить к этому выводу внешний понижающий резистор. В остальном вы совершенно правы. Без проблем., @Gerben