先生,我使用的是3*3 -matrix和3*3按钮,我需要一个程序,应该点燃左上角,等待用户的反应。如果按下相应的按钮,则led关闭,相邻的led灯亮起,进程继续进行。此代码适用于此,问题是当用户按下第一个led的第一个按钮和第二个led的启动时,当第二个按键被按下,第二个led启动和第三个led启动时,但是当用户在进程中间再次错误地触摸第二个按钮时,随机的led就会开始发光,这是不应该发生的,代码应该等到正确的按钮被按下,进程才会继续,谁能帮我处理代码吗?谢谢。
#include <Keypad.h>
int led_rows[]={ 2 , 3 , 4 };
int led_cols[]={ 5 , 6 , 7 };
int led_matriz[3][3]= {
{0, 0, 0},
{0, 0, 0},
{0, 0, 0}, };
const byte rows = 3;
const byte cols = 3;
char keys[rows][cols] = {
{'1','2','3'},
{'4','5','6'},
{'7','8','9'},
};
byte rowPins[rows] = {10,9,8};
byte colPins[cols] = {13,12,11};
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, rows, cols );
void setup(){
Serial.begin(9600);
for(int i=0;i<3;i++){
pinMode(led_cols[i], OUTPUT);
digitalWrite (led_cols[i], HIGH);
}
for(int i=0;i<3;i++){
pinMode(led_rows[i], OUTPUT);
digitalWrite (led_rows[i], LOW);
}
Led1_On();
}
void Led1_On(){
digitalWrite (led_rows[0], HIGH);
digitalWrite (led_cols[0], LOW);
}
void Led1_Off(){
digitalWrite (led_rows[0], LOW);
digitalWrite (led_cols[0], HIGH);
}
void Led2_On(){
digitalWrite (led_rows[0], HIGH);
digitalWrite (led_cols[1], LOW);
}
void Led2_Off(){
digitalWrite (led_rows[0], LOW);
digitalWrite (led_cols[1], HIGH);
}
void Led3_On(){
digitalWrite (led_rows[0], HIGH);
digitalWrite (led_cols[2], LOW);
}
void Led3_Off(){
digitalWrite (led_rows[0], LOW);
digitalWrite (led_cols[2], HIGH);
}
void Led4_On(){
digitalWrite (led_rows[1], HIGH);
digitalWrite (led_cols[0], LOW);
}
void Led4_Off(){
digitalWrite (led_rows[1], LOW);
digitalWrite (led_cols[0], HIGH);
}
void Led5_On(){
digitalWrite (led_rows[1], HIGH);
digitalWrite (led_cols[1], LOW);
}
void Led5_Off(){
digitalWrite (led_rows[1], LOW);
digitalWrite (led_cols[1], HIGH);
}
void Led6_On(){
digitalWrite (led_rows[1], HIGH);
digitalWrite (led_cols[2], LOW);
}
void Led6_Off(){
digitalWrite (led_rows[1], LOW);
digitalWrite (led_cols[2], HIGH);
}
void Led7_On(){
digitalWrite (led_rows[2], HIGH);
digitalWrite (led_cols[0], LOW);
}
void Led7_Off(){
digitalWrite (led_rows[2], LOW);
digitalWrite (led_cols[0], HIGH);
}
void Led8_On(){
digitalWrite (led_rows[2], HIGH);
digitalWrite (led_cols[1], LOW);
}
void Led8_Off(){
digitalWrite (led_rows[2], LOW);
digitalWrite (led_cols[1], HIGH);
}
void Led9_On(){
digitalWrite (led_rows[2], HIGH);
digitalWrite (led_cols[2], LOW);
}
void Led9_Off(){
digitalWrite (led_rows[2], LOW);
digitalWrite (led_cols[2], HIGH);
}
void loop(){
char key = keypad.getKey();
//Led1_On();
switch(key)
{
case '1' :
Led1_Off();
Led2_On();
break;
case '2' :
Led2_Off();
Led3_On();
break;
case '3':
Led3_Off();
Led4_On();
break;
case '4':
Led4_Off();
Led5_On();
break;
case '5' :
Led5_Off();
Led6_On();
break;
case '6' :
Led6_Off();
Led7_On();
break;
case '7' :
Led7_Off();
Led8_On();
break;
case '8' :
Led8_Off();
Led9_On();
break;
case '9' :
Led9_Off();
}
}发布于 2019-10-27 07:30:57
您需要检查用户是否只按下预期的键。
为此,您需要跟踪哪个键是预期的,并检查它。
首先,使用最初期望的键设置一个全局变量。
char expected = '1';然后将switch语句放入条件中,只在满足条件时执行。
if (key==expected)
{
switch(key)
{然后,在每个开关情况下,将预期的键更新到下一个。
case '1' :
expected = '2';
Led1_Off();
Led2_On();
break;https://stackoverflow.com/questions/58577178
复制相似问题