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);
Но вообще код отвратительный и работать нормально все равно не будет.
Все как у Вас оставил, дэлэй и все что вы писали
int flag=0; int count_but=0; void setup() { pinMode(3, OUTPUT); pinMode(0, OUTPUT); pinMode(4, OUTPUT); pinMode(1, OUTPUT); pinMode(2, INPUT); } void loop() { //если нажата кнопка, подождать секунду if(digitalRead(2)==HIGH&&flag==0) {flag=1; delay(1000); } if(digitalRead(2)==HIGH&&flag==1) { // проверить нажата ли еще кнопка спустя секунду, режим 1 count_but++; //count_but счетчик нажатий digitalWrite(3,HIGH); delay(1000);} //индикация вкл 1 режима else flag=0; if(digitalRead(2)==HIGH&&flag==1) { // проверить нажата ли еще кнопка спустя 2с, режим 2 count_but++; digitalWrite(4,HIGH); delay(1000);} //индикация вкл 2 режима if(digitalRead(2)==HIGH&&flag==1) { // проверить нажата ли еще кнопка спустя 3с, режим 3 count_but++; digitalWrite(0,HIGH); } //индикация вкл 3 режима if(count_but>3)count_but=3; //Чтобы небыло больше 30 мин если передержал кнопку if(digitalRead(2)==LOW&&flag==1){ //Если кнопка не нажата, но были нажатия больше 1с digitalWrite(1,HIGH); delay(1000*60*count_but); //умножаем минуту на количество нажатий count_but=0; digitalWrite(0,LOW); digitalWrite(1,LOW); digitalWrite(3,LOW); digitalWrite(4,LOW); flag=0; } }andrikll, у вас та же ошибка. Что убедиться в этом, вставьте перед строкой 31 оператор Serial.print((1000*60*count_but); - и посмотрите, какие значения он выведет.
Эту ошибку он и сам может исправить, не работало у него не из-за ul. (проверял на <32000 задержках... работает)
а так конечно спасибо за коментарий..
Посмотрел -16800 (или около того)