gpt4 book ai didi

c++ - 除非按下按钮,否则保持先前状态

转载 作者:行者123 更新时间:2023-11-30 17:37:58 25 4
gpt4 key购买 nike

我这里有简单的代码。我正在调用两个功能显示液晶屏和检查键。默认情况下屏幕应显示日期和时间。如果按下向上箭头,则转到特定窗口并显示日期和时间。同样按下向下键。显示菜单应该递减。

问题:日期和时间显示正确。一旦按下向上键菜单就会被更改,但是一旦进入菜单就直接跳回日期和时间..枚举值声明:

typedef enum {
DATE_TIME,
COORDINATE,
WINDSPEED,
POSITIONTRACK,
DISPAY_PARAMETER,
SET_PARAMETER,
DISPLAY_TYPE_MAX
}
DISPLAY_SCREEN_TYPE;
//DISPLAY_SCREEN_TYPE display_screen_type=DATE_TIME;

按钮功能声明

#define btnRIGHT  0     // Okay
#define btnUP 1 // inc
#define btnDOWN 2 // dec
#define btnLEFT 3 // Select
#define btnSELECT 4 // Menu
#define btnNONE 5

功能:

void loop()
{
Display_LCD();
Chk_key();
}
void Display_LCD()
{
switch(display_screen_type)
{
case DATE_TIME:
digitalClockDisplay();
break;
case COORDINATE:
Display_coordinate();
break;
case WINDSPEED:
Display_Wind();
break;
case POSITIONTRACK:
Display_angle();
break;
case DISPAY_PARAMETER:
Display_fun();
break;
case SET_PARAMETER:
Set_Fun();
break;
case DISPLAY_TYPE_MAX:
break;
}
if(display_screen_type>DISPLAY_TYPE_MAX)
{
display_screen_type=DATE_TIME;
}
}
void Chk_key()
{
int button=read_LCD_buttons();
switch(button)
{
case btnRIGHT:
Action_RIGHT();
break;
case btnUP:
Action_UP();
break;
case btnDOWN:
Action_DOWN();
break;
case btnLEFT:
Action_LEFT();
break;
case btnSELECT:
Action_SELECT();
break;
}
}

void Action_UP()
{
switch(display_screen_type)
{
case DATE_TIME:
display_screen_type= COORDINATE;
Update_Display=1;
break;
case COORDINATE:
display_screen_type= WINDSPEED;
Update_Display=1;
break;
case WINDSPEED:
display_screen_type= POSITIONTRACK;
Update_Display=1;
break;
case POSITIONTRACK:
display_screen_type= DATE_TIME;
Update_Display=1;
break;
//default:display_screen_type= DATE_TIME; Update_Display=1;delay(500);break;
}

}

void Action_DOWN()
{
/* lcdClear();
lcd.print("DOWN");*/

switch(display_screen_type)
{
case DATE_TIME:
display_screen_type= POSITIONTRACK;
Update_Display=1;
break;
case COORDINATE:
display_screen_type= DATE_TIME;
Update_Display=1;
break;
case WINDSPEED:
display_screen_type= COORDINATE;
Update_Display=1;
break;
case POSITIONTRACK:
display_screen_type= WINDSPEED;
Update_Display=1;
break;
//default:display_screen_type= DATE_TIME; Update_Display=1;break;
}
}

修改后的代码在这里:

int display_screen_type=DATE_TIME; 


void loop()
{
Display_LCD();
Chk_key();
}

void Display_LCD()
{
switch(display_screen_type)
{

case DATE_TIME:
digitalClockDisplay();
timedBeep(beep,1);
break;
case COORDINATE:
Display_coordinate();
timedBeep(beep,1);
break;
case WINDSPEED:
Display_Wind();
timedBeep(beep,1);
break;
case POSITIONTRACK:
Display_angle();
timedBeep(beep,1);
break;
case DISPAY_PARAMETER:
Display_fun();
timedBeep(beep,1);
break;
case SET_PARAMETER:
Set_Fun();
timedBeep(beep,1);
break;
case GET_PASSWORD:
Get_Password();
timedBeep(beep,1);
break;
}
}

void Action_UP()
{

if(display_screen_type >=POSITIONTRACK)
display_screen_type=DATE_TIME;
else
display_screen_type++;
}

void Action_DOWN()
{
if(display_screen_type <=DATE_TIME)
display_screen_type=POSITIONTRACK;
else
display_screen_type--;
}


void Chk_key()
{
int button=read_LCD_buttons();
if(button!=prev_button)
{
prev_button = button;
}

switch(prev_button)
{
case btnRIGHT:// RIGHT/MENU BUTTON BEING SELECTED
Action_RIGHT();
break;
case btnUP:// UP KEY/INCREMENT PRESSED
Action_UP();
break;
case btnDOWN: // DOWN / DECREMENT KEY PRESSED
Action_DOWN();
break;
case btnLEFT://LEFT / ESCAPE KEY PRESSED
Action_LEFT();
break;
case btnSELECT://SELECT KEY PRESSED
Action_SELECT();
break;
}
}

最佳答案

您的代码似乎首先需要大量改进,这就是您比较 display_screen_type 的原因Display_LCD 函数?只需将其保留为仅显示并在 Action_UPAction_DOWN 中管理它

对于递增/递减display_screen_type,您必须将其视为类型int

int display_screen_type=DATE_TIME;

你的Action_UPAction_DOWN应该像这样

void Action_UP()
{
if(display_screen_type >=DISPLAY_TYPE_MAX)
display_screen_type=DATE_TIME
else
display_screen_type++;
}

void Action_DOWN()
{
if(display_screen_type <= DATE_TIME)
display_screen_type=SET_PARAMETER
else
display_screen_type--;
}

此外,Display_LCD 中不需要以下条件,因此请将其删除。

  if(display_screen_type>DISPLAY_TYPE_MAX)
{
display_screen_type=DATE_TIME;
}

关于c++ - 除非按下按钮,否则保持先前状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22242071/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com