делаю проект на реакцию, есть 4 кнопки и 4 светодиода, подсчет очков должен начаться спустя 60 секунд после начала, но эти строки пропускаются, почему?
эта часть кода выделена жирным шрифтом
int SEC = 60;
unsigned long timer;
int d1 = 1000; // начальный интервал включения в миллисекундах
int d2 = 2000; // конечный интервал включения в миллисекундах
int d3 = 3000; // время ожидания для кнопки
byte knp = 4; // количество пар кнопок и светодиодов
/* остальной код игры не меняется */
byte pinD = 4 + knp; // светодиоды подключаются строго с pin4 и до pin9
byte pinA = 14 + knp; // кнопки подключаются строго c pinA0 и до pinA5
byte ext = 9; // переменная для выхода из while
byte hit; // верно нажатые кнопки
byte err; // неверно нажатые или пропущенные кнопки
byte tarrgn; // подсчет количества попыток
boolean finich = true; // переменная для вывода результатов
unsigned long timing; // переменная для точки отсчета
unsigned long setreakt; // время реакции нажатия
unsigned long bestreakt = 99999; // лучшее время реакции
unsigned long medreakt; // среднее время реакции
void setup() {
Serial.begin(9600);
timer = millis();
// подключаем цифровые пины для светодиодов
for (byte i = 4; i < pinD; i++) { pinMode(i, OUTPUT); digitalWrite(i, HIGH); }
delay(2000);
// после паузы выключаем светодиоды
for (byte i = 4; i < pinD; i++) { digitalWrite(i, LOW); }
// инициализируем аналоговые пины для кнопок
for (byte i = 14; i < pinA; i++) { pinMode(i, INPUT); }
// отключаем аналоговые пины для кнопок
for (byte i = 14; i < pinA; i++) { analogWrite(i, LOW); }
}
void loop() {
// если прошло 1000 мс - отбавляем одну секунду от переменной SEC
if (millis() - timer == 1000) {
timer = millis();
SEC = SEC - 1;
Serial.println(String(SEC));
}
while (SEC > 0) {
// рандомно задаем пин для включения светодиода
int LED = random(4, 4 + knp);
int BTN = LED + 10;
// задаем временной интервал, через который включится светодиод
int DEL = random(d1, d2);
delay(DEL);
digitalWrite(LED, HIGH);
timing = millis();
ext = 9;
while (ext < 10 ) {
if (digitalRead(BTN) == HIGH) {
digitalWrite(LED, LOW);
setreakt = millis() - timing;
delay(300); hit++; tarrgn++; ext = 11;
}
if (millis() - timing > d3) {
digitalWrite(LED, LOW);
delay(300); setreakt = 0; err++; tarrgn++; ext = 11;
}
}
// запоминаем лучшее время реакции, исключая промахи
// суммируем общее время реакции
if (setreakt < bestreakt && setreakt > 100) { bestreakt = setreakt; }
medreakt = medreakt + setreakt;
}
if (SEC==0 && finich == true) {
// вычисляем среднее время реакции
medreakt = medreakt / hit;
if (medreakt > 99998) { medreakt = 0; }
if (bestreakt > 99998) { bestreakt = 0; }
// выводим итоговые результаты на монитор порта
Serial.println();
Serial.println("--- End of Raund ---");
Serial.println();
Serial.println("Hits - " + String(hit));
Serial.println("Errors - " + String(err));
Serial.println("Bestreakt - " + String(bestreakt));
Serial.println("Medreakt - " + String(medreakt));
Serial.println();
Serial.println("Please reboot for restart");
finich = false;
}
}
эта часть кода выделена жирным шрифтом
int SEC = 60;
unsigned long timer;
int d1 = 1000; // начальный интервал включения в миллисекундах
int d2 = 2000; // конечный интервал включения в миллисекундах
int d3 = 3000; // время ожидания для кнопки
byte knp = 4; // количество пар кнопок и светодиодов
/* остальной код игры не меняется */
byte pinD = 4 + knp; // светодиоды подключаются строго с pin4 и до pin9
byte pinA = 14 + knp; // кнопки подключаются строго c pinA0 и до pinA5
byte ext = 9; // переменная для выхода из while
byte hit; // верно нажатые кнопки
byte err; // неверно нажатые или пропущенные кнопки
byte tarrgn; // подсчет количества попыток
boolean finich = true; // переменная для вывода результатов
unsigned long timing; // переменная для точки отсчета
unsigned long setreakt; // время реакции нажатия
unsigned long bestreakt = 99999; // лучшее время реакции
unsigned long medreakt; // среднее время реакции
void setup() {
Serial.begin(9600);
timer = millis();
// подключаем цифровые пины для светодиодов
for (byte i = 4; i < pinD; i++) { pinMode(i, OUTPUT); digitalWrite(i, HIGH); }
delay(2000);
// после паузы выключаем светодиоды
for (byte i = 4; i < pinD; i++) { digitalWrite(i, LOW); }
// инициализируем аналоговые пины для кнопок
for (byte i = 14; i < pinA; i++) { pinMode(i, INPUT); }
// отключаем аналоговые пины для кнопок
for (byte i = 14; i < pinA; i++) { analogWrite(i, LOW); }
}
void loop() {
// если прошло 1000 мс - отбавляем одну секунду от переменной SEC
if (millis() - timer == 1000) {
timer = millis();
SEC = SEC - 1;
Serial.println(String(SEC));
}
while (SEC > 0) {
// рандомно задаем пин для включения светодиода
int LED = random(4, 4 + knp);
int BTN = LED + 10;
// задаем временной интервал, через который включится светодиод
int DEL = random(d1, d2);
delay(DEL);
digitalWrite(LED, HIGH);
timing = millis();
ext = 9;
while (ext < 10 ) {
if (digitalRead(BTN) == HIGH) {
digitalWrite(LED, LOW);
setreakt = millis() - timing;
delay(300); hit++; tarrgn++; ext = 11;
}
if (millis() - timing > d3) {
digitalWrite(LED, LOW);
delay(300); setreakt = 0; err++; tarrgn++; ext = 11;
}
}
// запоминаем лучшее время реакции, исключая промахи
// суммируем общее время реакции
if (setreakt < bestreakt && setreakt > 100) { bestreakt = setreakt; }
medreakt = medreakt + setreakt;
}
if (SEC==0 && finich == true) {
// вычисляем среднее время реакции
medreakt = medreakt / hit;
if (medreakt > 99998) { medreakt = 0; }
if (bestreakt > 99998) { bestreakt = 0; }
// выводим итоговые результаты на монитор порта
Serial.println();
Serial.println("--- End of Raund ---");
Serial.println();
Serial.println("Hits - " + String(hit));
Serial.println("Errors - " + String(err));
Serial.println("Bestreakt - " + String(bestreakt));
Serial.println("Medreakt - " + String(medreakt));
Serial.println();
Serial.println("Please reboot for restart");
finich = false;
}
}