[英]Arduino with adafruit RGBLCDShield Buttons weird behavior
我有帶 rgb lcd 屏蔽的 Arduino uno。 一個特定功能中的按鈕有一種非常奇怪的行為。
該函數稱為是/否。 它在屏幕上顯示一條消息(工作),用戶可以使用向上/向下/向左/向右按鈕選擇回答是/否,並通過按下選擇按鈕批准答案。
功能如下:
bool yesno(String message)
{
//Serial.println("asking yesno question " + message);
bool answer = false;
bool answerSelected = false;
setColor('r');
setText(message+'?', "no");
while (!answerSelected)
{
uint8_t buttons = lcd.readButtons();
if (buttons){
if (buttons &(BUTTON_UP || BUTTON_DOWN || BUTTON_RIGHT || BUTTON_LEFT)) {
if (answer) {
answer = false;
setColor('r');
setText(message+'?', "no");
Serial.println(answer);
}
else {
answer = true;
setColor('g');
setText(message+'?', "yes");
Serial.println(answer);
}
}
else if (buttons & BUTTON_SELECT) {
setColor('w');
answerSelected = true;
Serial.println("selected ");
Serial.println(answer);
return answer;
}
}
delay(50);
}
}
出於某種原因,當按下左/右/上/下時,什么也沒有發生。 當按下選擇時,它會執行上/下/左/右功能
使用if (buttons &&(BUTTON_UP || BUTTON_DOWN || BUTTON_RIGHT || BUTTON_LEFT))
代替,按鈕向左/向右/向上/向下按預期工作,但按鈕選擇仍充當其他按鈕
菜單的類似代碼按預期工作:
void InitializeMenu()
{
// initialize
Serial.println("entering menu");
setColor('w');
while (!exitMenu)
{
if (menuItem != selectedItem)
{
Serial.println("switching menu to: "+menuItems[menuItem]);
setText("Menue", menuItems[menuItem]);
selectedItem = menuItem;
}
uint8_t buttons = lcd.readButtons();
if (buttons & BUTTON_UP) {
menuItem--;
Serial.println("menu up");
Serial.println(menuItem);
Serial.println(menuSize);
if (menuItem < 0)
{
menuItem = menuSize;
Serial.println("start of menu going to end");
}
}
if (buttons & BUTTON_DOWN) {
menuItem++;
Serial.println("menu down");
Serial.println(menuItem);
Serial.println(menuSize);
if (menuItem > menuSize) {
menuItem = 0;
Serial.println("end of menu going to start");
}
}
if (buttons & BUTTON_SELECT) {
Serial.println("enter");
if (menuItem == menuSize) exitMenu = true;
}
delay(50);
}
}
由於 arduino uno 上的空間非常有限,我希望代碼盡可能簡短。
BUTTON_UP || BUTTON_DOWN || BUTTON_RIGHT || BUTTON_LEFT
不會做你期望它做的事情。 ||
是邏輯or
,並且整個表達式的計算結果為true
。 要獲取位掩碼,請將其更改為按位or
( |
):
BUTTON_UP | BUTTON_DOWN | BUTTON_RIGHT | BUTTON_LEFT
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.