Как сделать "поворотник" с millis?
- Войдите на сайт для отправки комментариев
Вс, 31/12/2017 - 21:15
Нацарапал такой скетч для Arduino Uno:
#include <IRremote.h>; IRrecv recv(0); decode_results res; bool a=false; void setup () { pinMode(1,OUTPUT); digitalWrite(1,HIGH); recv.enableIRIn(); } void loop () { if (a==1) { digitalWrite(1,LOW); delay(500); digitalWrite(1,HIGH); delay(500); } if (recv.decode(&res)) { if (res.value==16736925) { a=!a; } recv.resume(); } }
При нажатии на кнопку пульта, ИК-приемник принимает сигнал, который обрабатывается ардуиной и запускает цикл "поворотника" - включения и выключения реле. С delay как я понял, лучше не связываться. Решил попробоавть с millis, но никак не получается, ардуинка никак не реагирует на нажатие клавиши (принять-то принимает, а вот "мигать" не хочет):
#include <IRremote.h>; IRrecv recv(0); decode_results res; bool a=false; unsigned long mils=0; void setup () { pinMode(1,OUTPUT); digitalWrite(1,HIGH); recv.enableIRIn(); } void loop () { if (a==1) { unsigned long nwmils=millis(); if (nwmils-mils>1000) { digitalWrite(1,LOW); mils=millis(); } else { digitalWrite(1,HIGH); } } if (recv.decode(&res)) { if (res.value==16736925) { a=!a; } recv.resume(); } }
И еще почему-то получается так, что при подачи напряжения (HIGH) реле выключена, а при LOW включается, т.е. если в setup не написать digitalWrite(1,HIGH); , то реле будет почему-то включена, почему так?
Спасибо)
А по вопросу. Ну, допустим Вы его включили и обновили mils в строке 19. И что потом? А ничего - приследующем проходе loop Вы его тут же и выключите в строке 22.
Т.е. она у Вас "мигает", только настолько быстро ....
Изучайте пример "blink без delay" там не так, как у Вас написано.