Помогите с таймером на голосовом управлении
- Войдите на сайт для отправки комментариев
Вс, 19/01/2014 - 21:33
Здравствуйте. Вопрос мой наверное будет весьма глупым но моих скромных знаний нехватает поэтому спрошу. Суть такова, перед нами код голосового и Ик управления реле, записанно 5 голосовых комманд к ним прикручено реле и светодиод, я пытаюсь сделать защиту от случайного срабатывания, тоесть я сначало говорю определенное слово кторое записанно в case ox11 и только потом говорю комманду которая переключит реле, всё работает замечательно но мне нужно что бы когда я говорю проверочное слово ардуино зажигает лампочку и ждёт 7 секунд комманду и если она не поступила то лампочка гаснет и нужно снова говорить проверочное слово а потом опять комманду, тоесть нужен некий таймер на 7 секунд в case 0x11 который не стопорил бы программу, что бы считывание других голосовых комманд было активно, естественно delay не подходит а millis туда запилить у меня не получилось. Пожалуйста подскажите как быть, я только недавно познакомился с ардуино и вот мой первый программнй ступор) Подскажите если не сложно где и как код оптимизировать можно, зараннее благодарен! #include <IRremote.h> int RECV_PIN = 4; IRrecv irrecv(RECV_PIN); decode_results results; int a=0; long previousMillis = 0; long interval = 4000; int ledPin = 13; //Реле int yPin = 8; //Диод 1 int i=0; // переменная для триггера int sPin = 7; byte com = 0; //для инициализации голосового модуля void setup() { irrecv.enableIRIn(); // включить приемник Serial.begin(9600); pinMode(ledPin, OUTPUT); pinMode(yPin, OUTPUT); pinMode(sPin, OUTPUT);// все 3 пина как выходы delay(2000); Serial.write(0xAA); Serial.write(0x37); delay(1000); Serial.write(0xAA); Serial.write(0x21); } void loop() { if (irrecv.decode(&results)) { if (results.value == 0x10EFE31C) {a=a+1;} // обработка нажитя клавиши, здесь переменная принимает значение +1 if (a==1){digitalWrite(ledPin, LOW);} else {digitalWrite(ledPin, HIGH),digitalWrite(yPin, LOW); a=0;} // действие после нажатия кнопки irrecv.resume(); } while(Serial.available()) { com = Serial.read(); switch(com) { case 0x11: i=1;// Сам триггер, включён digitalWrite(sPin, HIGH); break; case 0x12:// переключение реле if (i==1){digitalWrite(ledPin, LOW),digitalWrite(sPin, LOW);} i=0; //возвращает триггер в начальное состояние break; case 0x13: if (i==1){digitalWrite(yPin, HIGH),digitalWrite(sPin, LOW);} i=0; break; case 0x14://выключение всего digitalWrite(yPin, LOW); digitalWrite(ledPin, HIGH); digitalWrite(sPin, LOW); i=0; break; case 0x15: break; } } }