Перемещение символа по LCD-экрану - есть ли лучший способ?
У меня есть некоторый базовый опыт программирования, но я новичок как в C, так и в Arduino.
Я повозился с примером ЖК-кода, чтобы попытаться переместить символ с помощью встроенной клавиатуры. Я также хотел, чтобы фактическое перемещение происходило только после того, как кнопка будет отпущена, как и следовало ожидать от клавиатуры.
Код работает, но у меня такое чувство, что все пустые циклы внутри функции main loop (), которые я использовал, не являются лучшей практикой.. :)
Как я это сделал? Есть ли более удобное/элегантное решение, которое я пропустил и на котором могу учиться?
Спасибо и извините за беспорядочный код!
void loop()
{
lcd.clear();
lcd.setCursor(posCol,posRow); //initialized beforehand
lcd.print("O"); //random char to move
lcdOld = btnNONE;
while (read_LCD_buttons() == btnNONE) //do nothing while nothing is pressed
{
}
lcdOld = read_LCD_buttons();
while (read_LCD_buttons() == lcdOld) //do nothing while button is down
{
}
switch (lcdOld) // depending on which button was pushed, we perform an action
{
case btnRIGHT:
{
posCol++;
break;
}
case btnLEFT:
{
posCol--;
break;
}
case btnUP:
{
if (posRow == 1)
{
posRow = 0;
break;
}
else
{
break;
}
}
case btnDOWN:
{
if (posRow == 0)
{
posRow = 1;
break;
}
else
{
break;
}
}
case btnSELECT:
{
break;
}
case btnNONE:
{
break;
}
}
}
@Navot, 👍0
Обсуждение1 ответ
Вы могли бы инкапсулировать логику обнаружения нажатия кнопки в ее собственную функцию:
// Вернуть только что отпущенную кнопку или btnNONE.
int releasedButton()
{
static int last_button = btnNONE;
int previous_button = last_button;
last_button = read_LCD_buttons();
if (last_button == btnNONE)
return previous_button;
else
return btnNONE;
}
Затем логика в туалете упрощается:
void loop()
{
switch (releasedButton()) {
...
}
}
- Печать string and integer LCD
- Как отобразить символ º на ЖК-дисплее?
- Отправка значения с одного Arduino на другой
- Черные квадраты дисплея Arduino 16x2
- NodeMCU с RFID RC522 и LCD-модулем интерфейса I2C вместе
- ЖК-дисплей I2C отображает странные символы
- Экран LCD 16*02 I2C показывает только первый напечатанный символ
- Потенциометр 10 кОм против резистора 10 кОм на ЖК-дисплее
Это нормально, если вы не хотите, чтобы ваша программа делала что-то еще одновременно (например, мигала светодиодом). Если вы хотите этого, вы можете просто заставить код запомнить последние состояния кнопки и запускать часть кода переключателя только тогда, когда какая-либо кнопка переходит от не нажатой к нажатой. (PS не забудьте принять во внимание отскок кнопки, так как это может все испортить. Не уверен, что "read_LCD_buttons ()" уже позаботится об этом), @Gerben
Я знаю, что прошло много времени с тех пор, как вы опубликовали этот пост, но есть ли какой-нибудь способ опубликовать весь исходный код?, @Duchyas Yesgat