Как сделать "поворотник" с millis?

olodar
Offline
Зарегистрирован: 22.12.2017

Нацарапал такой скетч для 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); , то реле будет почему-то включена, почему так?

Спасибо)

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

olodar пишет:
получается так, что при подачи напряжения (HIGH) реле выключена, а при LOW включается, т.е. если в setup не написать digitalWrite(1,HIGH); , то реле будет почему-то включена, почему так?
Потому, что Вы его так подключили, что он землёй управляется.

А по вопросу. Ну, допустим Вы его включили и обновили mils в строке 19. И что потом? А ничего - приследующем проходе loop Вы его тут же и выключите в строке 22.

Т.е. она у Вас "мигает", только настолько быстро ....

Изучайте пример "blink без delay" там не так, как у Вас написано.