Как сделать "поворотник" с 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" там не так, как у Вас написано.