attiny 13 проблема со временем
- Войдите на сайт для отправки комментариев
Здравствуйте Всем кто читает данную тему.
Сталкнулся с проблемой времени на тини 13, начну по порядку.
Основное управление контролером это одна кнопка (без фиксации, подтянутая на минус через резистор) и три светодиода (индикация включения определенного режима) включает нагрузку реле ( реле подключено через транзистор)
Алгоритм работы следующий:
1) если нажать кнопку и отпустить, включится первый режим ( соответственно включится светодиод первого режима и включится реле) отключится через 30 минут.
2) если нажать и удержать кнопку включается второй режим,( горят светодиоды первого и второго режима, реле также включится) отключается через 20 минут
3) если нажать и удержать кнопку еще дольше включится третий режим (соответсвенно будут гореть все три светодиода, а так же включится реле) отключается через 10 десять минут.
Режимы работают все включается и выключается, проблема со временем отключения. Первый режим 30 мин., а работает 45 секунд, второй режим 20 мин., а работает 30 секунд, и третий должен работать 10 мин., а работает 15секунд.
int flag=0; void setup() { pinMode(3, OUTPUT); pinMode(0, OUTPUT); pinMode(4, OUTPUT); pinMode(1, OUTPUT); digitalWrite(1,LOW); } void loop() { if(digitalRead(2)==HIGH&&flag==0) { delay(1000); digitalWrite(3,HIGH); delay(1000); if(digitalRead(2)==LOW&&flag==0){ digitalWrite(1,HIGH); delay(1000*60*30); digitalWrite(3,LOW); digitalWrite(1,LOW); } if(digitalRead(2)==HIGH&&flag==0) { delay(1000); digitalWrite(4,HIGH); delay(1000); if(digitalRead(2)==LOW&&flag==0){ digitalWrite(1,HIGH); delay(1000*60*20); digitalWrite(4,LOW); digitalWrite(1,LOW); digitalWrite(3,LOW); } } if(digitalRead(2)==HIGH&&flag==0) { delay(1000); digitalWrite(0,HIGH); delay(1000); flag=1;} } if(digitalRead(2)==LOW&&flag==1){ digitalWrite(1,HIGH); delay(1000*60*10); digitalWrite(0,LOW); digitalWrite(4,LOW); digitalWrite(1,LOW); digitalWrite(3,LOW); flag=0; } }
delay писал и без умножений то есть 30 мин (1800000) 20 мин (1200000) и 10 мин (600000) результат такой же.
Но самое интересное когда код отлаживал на UNO все работало.
Почему так происходит? Я в коде напортачил? Подскажите пожалуйста.
Прошивал этим кодом 2 тини работают одинаково. Прошиваю через UNO
Прошу прощения что код без пояснений, он приметивный, наверно и так понятен.
попробуйте написать время как delay(1000*60*10ul);
Но вообще код отвратительный и работать нормально все равно не будет.
Все как у Вас оставил, дэлэй и все что вы писали
andrikll, у вас та же ошибка. Что убедиться в этом, вставьте перед строкой 31 оператор Serial.print((1000*60*count_but); - и посмотрите, какие значения он выведет.
Эту ошибку он и сам может исправить, не работало у него не из-за ul. (проверял на <32000 задержках... работает)
а так конечно спасибо за коментарий..
Посмотрел -16800 (или около того)