Сэр, я использую матрицу светодиодов 3 * 3 с кнопкой 3 * 3, и мне нужна программа, которая должна подсвечивать верхний светодиод слева и ждать ответа пользователя. Если соответствующая кнопка нажата, светодиод выключится, и загорится ближайший соседний светодиод, и процесс продолжится. Этот код работает для этого, проблема в том, что когда пользователь нажимает 1-ю кнопку, 1-й светодиод гаснет, а 2-й светодиод горит, а когда нажимается 2-я кнопка, 2-й светодиод гаснет, а 3-й светодиод гаснет, НО, когда пользователь ошибочно касается2-ая кнопка снова в середине процесса начинает мигать случайный светодиод, что не должно происходить, код должен ждать, пока нажата правильная кнопка и процесс продолжается, может кто-нибудь помочь мне с кодом. Спасибо.
#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();
}
}