Не работает delay() или альтернативный тайминг.
- Войдите на сайт для отправки комментариев
Сб, 06/06/2015 - 10:42
Нужен был наипростейший тайминг. Включение на 15 минут и выключение на 5 минут. Больше ничего.
Использовал такой код:
void setup()
{
pinMode(12, OUTPUT);
}
void loop()
{
//включение реле на 15 минут
digitalWrite(12, LOW);
delay(900000);
//выключение реле на 5 минут
digitalWrite(12, HIGH);
delay(300000);
}
Но на деле через некоторое время перестаёт работать совсем, на 12 пин перестаёт идти сигнал. Взялся всё переделать под mills(); но ума не хватает как это реализовать. Ребята, помогите пожалуйста. Буду благодарен хоть маленьким подсказкам, хоть примерному похожему коду.
Еще раз мигаем светодиодом без Delay.
Взялся всё переделать под mills(); но ума не хватает как это реализовать.
Какой смысл браться за более сложный код, если не получилось заставить работать простой?
Тогда в чём может быть причина? На коротких интервалах с миганием светодиода всё в порядке, но как задаю 15 минут через 5 потом перестаёт.
Я не знаю, а запускать и тестировать сейчас некогда.
- попробуйте явно указать, что ваши числа "длинного" типа: delay(900000L);
- проверьте тип параметра функции delay - возможно, ваши числа просто "не умещаются" в этот тип - тогда придётся заменить один "длинный" delay на несколько коротких. Лучше, конечно, написать для этого отдельную небольшую функцию.
Попробуйте так:
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(); } }У тебя HTML в код попал
Спасибо!!!