На арду Нано повешать 12 диодов и 12 кнопок. Решил вешать диод и кнопу на один пин
Смысл работы такой: Зажечь светодиод от рандома, ждать 3 сек, нажать соответствующую кнопку, считать нажатие, ... дальше сам)
Но вот незадача, Delay вешает контроллер и не считывает нажатие, millis не ждет 3 секунды, Ниже представлю код, может где то я ошибся?
И получается: или цикл пробегает и я не успеваю нажать кнопу или вешается делеем и не считывает нажатие
Если не использовать рандом а прописать +5 на конкретный пин, то нажатие кнопки считывается.
Код: Выделить всё
long randNumber;
unsigned long timing;
int p, r, d;
void setup() {
Serial.begin(9600);
for (p = 4; p < 9; p++) {pinMode(p, INPUT_PULLUP);}
pinMode(17, OUTPUT);
for (d = 4; d < 9; d++) {digitalWrite(d, LOW);}
}
void loop() {
if (millis() - timing > 3000) { // Таймер задержки, который не работает
timing = millis();
label:
randNumber = random(4, 8); // Выбрать число
if (r == randNumber) {goto label;} //что бы рандом не повторялся
r = randNumber;
//delay(3000);
digitalWrite(randNumber, HIGH); // вкл светодиод
bool buttonState = digitalRead(randNumber); // считать состояние пина в переменную для дальнейшего определения нажатия кнопки путем падения напряжения при замыкании пина на землю
if (!buttonState) { // замкнуть пин на землю - определить нажатие кнопки
digitalWrite(randNumber, LOW);
}}}