Доброго времени суток, уважаемые форумчане. Прошу помощи с решением задачи.
Алгоритм скрипта ниже задумывался таким:
1. на проходе цикла n-раз, сгенерировать переменную.
1.1 поместить ее в массив
1.2 подать высокий сигнал на соответствующий пин.
2. считать нажатие кнопки
2.1 если номер кнопки соответствует цифре в массиве, увеличить n на 1 и т.д.
2.2 если n больше 2, после нажатия 1й кнопки и верного сравнения с записью в массиве, ждать нажатие второй кнопки и сравнить её с соответствующей ячейкой в массиве, после чего увеличить n на 1.
На деле выходит, что после первого нажатия кнопки, скрипт не ждет второго нажатия а сразу считает что была нажата эта же кнопка, что автоматически сбрасывает n на 1
в Wokwi скрипт работает как надо, там и писался, на плате, увы нет.
Алгоритм скрипта ниже задумывался таким:
1. на проходе цикла n-раз, сгенерировать переменную.
1.1 поместить ее в массив
1.2 подать высокий сигнал на соответствующий пин.
2. считать нажатие кнопки
2.1 если номер кнопки соответствует цифре в массиве, увеличить n на 1 и т.д.
2.2 если n больше 2, после нажатия 1й кнопки и верного сравнения с записью в массиве, ждать нажатие второй кнопки и сравнить её с соответствующей ячейкой в массиве, после чего увеличить n на 1.
На деле выходит, что после первого нажатия кнопки, скрипт не ждет второго нажатия а сразу считает что была нажата эта же кнопка, что автоматически сбрасывает n на 1
в Wokwi скрипт работает как надо, там и писался, на плате, увы нет.
C++:
int lastButton = 0;
int key() {
int val = analogRead(5);
if (val != lastButton) {
delay(10); // Ждем пока состояние стабилизируется - игнорируем дребезг
int val = analogRead(5);
}
if (val < 50) return 3;
else if (val < 513) return 4;
else if (val < 683) return 5;
else if (val < 768) return 6;
else if (val < 819) return 7;
else if (val < 853) return 8;
else if (val < 878) return 9;
else if (val < 896) return 10;
else if (val < 910) return 11;
else if (val < 922) return 12;
else if (val < 931) return 13;
else if (val < 939) return 14;
else return 0;
} //int key()
int r, c, n, i, j, q, w, u, l, t, ww;
int arr[50];
long randNumber;
int game2() {
labelNO:
for (q = 0; q < 10; q++) { // Цикл1 Большой цикл
n++;
t = t - ((t / 100) * 5); // t + 5%
Serial.print("----------");
Serial.print("n:");
Serial.println(n);
for (i = 0; i < n; i++) { // Цикл2 Малый цикл
label:
randNumber = random(3, 14);
if (r == randNumber) {
goto label;
}
r = randNumber;
arr[i] = randNumber;
digitalWrite(randNumber, HIGH);
delay(t);
digitalWrite(randNumber, LOW);
Serial.print("randNumber:");
Serial.println(randNumber);
}
label2:
for (w = 0; w < n; w++) {
int k = arr[w];
for (ww = 0; ww < 55555; ww++) { // Цикл таймер
if (k == key()) {
Serial.println("OK");
Serial.print("arr[w]: ");
Serial.println(k);
Serial.print("key(): ");
Serial.println(key());
digitalWrite(key(), HIGH);
delay(50);
digitalWrite(key(), LOW);
break;
} else if (key() != 0 && k != key()) {
Serial.println("NO");
Serial.print("arr[w]: ");
Serial.println(k);
Serial.print("key(): ");
Serial.println(key());
digitalWrite(key(), HIGH);
delay(50);
digitalWrite(key(), LOW);
Serial.println(analogRead(0));
n = 0;
goto labelNO;
}
} //for (ww
} //for (w
} //Цикл1 Большой цикл
}
void setup() {
Serial.begin(9600);
randomSeed(analogRead(17));
n = 0;
t = 500;
}
void loop() {
game2();
} //void loop()