Задержка без delay

restiv
Offline
Зарегистрирован: 03.01.2016

Доброго времени суток уважаемые форумчане!

Есть задумка сделать простой светильник с функцией закат и рассвет. Я понимаю, что тут уже обсужалось и приводилось куча разных проектов, но они для меня слишком сложные, для новичка и содержат кучу не нужных (для меня функций). Мне нужно просто в определенное время подать ШИМ-сигнал на диммируемый драйвер, для плавного включения, задержка на 10-12 часов без функции delay, и плавно отключить ШИМ-сигналом.

У меня получается плавно включать и плавно отключать светодиоды, но сколько я не пытаюсь понять и применить функцию millis, для создания задержки отключения, никак не получается. Уже разные варианты пробовал, но либо вообще не работает, либо работает не так как надо.

Подскажите пожалуйста:

- как организовать начало включения ШИМ сигнала по команде RTC-модуля

- как создать задержку между включением и отключением ШИМ-сигнала?

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

restiv пишет:

- как создать задержку между включением и отключением ШИМ-сигнала?

if ((millis()-prevMillis) < 39600000) { // 11 hours
 prevMillis = millis();
 // do pwm
}

 

b707
Offline
Зарегистрирован: 26.05.2017

restiv пишет:

сколько я не пытаюсь понять и применить функцию millis, для создания задержки отключения, никак не получается. Уже разные варианты пробовал, но либо вообще не работает, либо работает не так как надо.

приведите ваши варианты

restiv
Offline
Зарегистрирован: 03.01.2016

Пока пытаюсь применить данный код:

void setup()
{
  pinMode(led,OUTPUT);
  pinMode(relay, OUTPUT); 
}

void loop()
{
for(int i=0; i<=100; i=i+10)
{
  analogWrite(led,i);
  delay(100);
}
  for(int i=100; i>=1; i=i-10)
  {
  analogWrite(led,i);
  delay(100);
  }
  static bool state;
  static unsigned long time;
 if((millis() - time) > (state ? 5000 : 10000)) 
 {
  state = !state;
  digitalWrite(relay, state);
  time = millis();
 }
}

 

 

restiv
Offline
Зарегистрирован: 03.01.2016

пробовал так, но видимо руки корявые. не работает как надо.

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Вы когда нибудь ели еду, в которую сами и нагадили.  В программах с millis() использование delay() это нагадить.

b707
Offline
Зарегистрирован: 26.05.2017

restiv пишет:

Пока пытаюсь применить данный код

И какие проблемы? - Этот код вроде должен работать.

Хотя в целом qwone прав - если используете миллис, delay в коде надо убирать везде