int pinGreen = 10; // пин для зеленой галочки int pinRed = 11; // пин для красного крестика int pinShock = 12; // пин, который определяет встряска int pinBeep = 9; // пищалка bool startAnimate = false; // флаг работы анимации int timer_sec = 0; // таймеранимации int timer_sleep = 0; // таймер простоя int oldRnd = 2; // значение активного пина, нужно для сравнения void beep(unsigned char delayms){ analogWrite(pinBeep, 10); delay(delayms); analogWrite(pinBeep, 0); delay(delayms); } void setup() { pinMode(pinGreen, OUTPUT); pinMode(pinRed, OUTPUT); pinMode(pinShock, INPUT); pinMode(pinBeep, OUTPUT); digitalWrite(pinGreen, LOW); digitalWrite(pinRed, LOW); // пусть рандомное число генерится на основе шумов на аналоговом пине A0 randomSeed(analogRead(0)); } void loop() { // если была встряска, то начинаем моргать, пищать и через 3 сек выведем результат if(digitalRead(pinShock) == HIGH) startAnimate = true; if(startAnimate){ int pinRnd = random(0, 2); // рандомное число int arrayPins[2] = {pinGreen, pinRed}; // тушим два ответа digitalWrite(pinGreen, LOW); digitalWrite(pinRed, LOW); // зажигаем случайный ответ digitalWrite(arrayPins[pinRnd], HIGH); timer_sec = timer_sec + 50; // считаем время анимации // пищим если сменился вариант if(oldRnd != pinRnd){ beep(50); oldRnd = pinRnd; timer_sec = timer_sec + 50; // добавляем еще чуток } // время вышло, выводим результат if(timer_sec > 3000){ // выключаем анимацию и обнуляем переменные startAnimate = false; timer_sec = 0; oldRnd = 2; timer_sleep = 0; delay(3000); // останавливаем все на 3 секунды } delay(40); }else{ if(timer_sleep > 20000){ // если 20 сек шар не трусят, то выключаем результат digitalWrite(pinGreen, LOW); digitalWrite(pinRed, LOW); }else{ timer_sleep = timer_sleep + 10; } } delay(10); }