Не работает delay() или альтернативный тайминг.

offside747
Offline
Зарегистрирован: 06.06.2015

Нужен был наипростейший тайминг. Включение на 15 минут и выключение на 5 минут. Больше ничего.

Использовал такой код:

void setup()
{
  pinMode(12, OUTPUT);
}
 
void loop()
{
    //включение реле на 15 минут
  digitalWrite(12, LOW);
  delay(900000);
  
    //выключение реле на 5 минут
  digitalWrite(12, HIGH);
  delay(300000);
}

Но на деле через некоторое время перестаёт работать совсем, на 12 пин перестаёт идти сигнал. Взялся всё переделать под mills(); но ума не хватает как это реализовать. Ребята, помогите пожалуйста. Буду благодарен хоть маленьким подсказкам, хоть примерному похожему коду.

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013
Datak
Offline
Зарегистрирован: 09.10.2014

offside747 пишет:

Взялся всё переделать под mills(); но ума не хватает как это реализовать.

Какой смысл браться за более сложный код, если не получилось заставить работать простой?

offside747
Offline
Зарегистрирован: 06.06.2015

Тогда в чём может быть причина? На коротких интервалах с миганием светодиода всё в порядке, но как задаю 15 минут через 5 потом перестаёт. 

Datak
Offline
Зарегистрирован: 09.10.2014

Я не знаю, а запускать и тестировать сейчас некогда.

 - попробуйте явно указать, что ваши числа "длинного" типа: delay(900000L);

 - проверьте тип параметра функции delay - возможно, ваши числа просто "не умещаются" в этот тип - тогда придётся заменить один "длинный" delay на несколько коротких. Лучше, конечно, написать для этого отдельную небольшую функцию.

 

vosara
vosara аватар
Offline
Зарегистрирован: 08.02.2014

Попробуйте так:


unsigned long currentTime;
int interval;

void setup()
{
  pinMode(12, OUTPUT);
  currentTime = millis();
}

void pin12()
{
	interval++;
	if (digitalRead(12)==LOW)
 {   
	digitalWrite(12, HIGH);
	interval = 0;
 }
	
if (digitalRead(12)==HIGH)
    {   
  if (interval == 3)digitalWrite(12, LOW);

   }
}
 
void loop()
{
 if(millis()-currentTime >= 300000)
 {
   currentTime = millis();
    pin12(); 
 }
}
Radjah
Offline
Зарегистрирован: 06.08.2014

У тебя HTML в код попал

vosara
vosara аватар
Offline
Зарегистрирован: 08.02.2014

Спасибо!!!