Задать вопрос
@Shinigamy

Как запрограммировать таймер на ardruino UNO?

Хочу сделать таймер, чтобы 16 часов лампочка горела, и 8 часов не горела. Для этого взял Ardruino UNO и реле к нему. Нашёл библиотеку "TimeLib" для реализации таймера. Но почему-то работает криво. Иногда сбрасывается и начинает отчёт заново. Что делаю неправильно?

#include <TimeLib.h>

#define RELAY_IN 3 
time_t t;
int m;
int h;
int check;
int check_h;

void setup() {
  // пин реле как выход
  pinMode(RELAY_IN, OUTPUT);
  Serial.begin(9600);
  check, check_h = 0;
  m, h = 0;
}
void loop() {
  // prog
  t = now();
  if(t == 0){ 
    if(check == 0){
      digitalWrite(RELAY_IN, HIGH);
      Serial.println("on");
      check = 1;
    }
  } else if(h == 16) {
    if(check_h == 0){
      digitalWrite(RELAY_IN, LOW); 
      Serial.println("off");
      check_h = 1;
    }
  }

  // debug
  if(hour(t) <= 15){
    if(m != minute(t)){
      m = minute(t);
      Serial.println(m);
      if(h != hour(t)){
          h = hour(t);
          Serial.println("ho:");
          Serial.println(h);
      }
    }   
  } else if(hour(t) > 15) {
    if(m != minute(t)){
      m = minute(t);
      Serial.println(m);
      if(h != hour(t)){
          h = hour(t);
          Serial.println("ho:");
          Serial.println(h);
      }
    }
  }     

  if (day(t) == 2){
    Serial.println("end");
    t, check, check_h = 0;
    setTime(t);
  }
}
  • Вопрос задан
  • 105 просмотров
Подписаться 1 Простой 1 комментарий
Решения вопроса 1
@WaterSmith
Android-разработчик. Java, Kotlin
С кодом скорее всего всё в порядке. Но детально я не всматриался. Сбрасываться и начинать отсчет заново, согласно этого кода, оно должно при перезапуске. Перезапуски у ардуино могут происходить произвольно, из-за помех по питанию.
Для реализации таймера лучше использовать модуль часов, например DS1302 или подобных.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@vanyamba-electronics
Попробуйте исправить эти строки:
check = check_h = 0;  // check, check_h = 0;
m = h = 0;  // m, h = 0;
t = check = check_h = 0; // t, check, check_h = 0;
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы