Слетает время после зарузки скетча на часах раьного времени. Помогите пожалуйста я новичок.

Тема в разделе "Arduino & Shields", создана пользователем DanilRyzhov, 18 мар 2017.

  1. DanilRyzhov

    DanilRyzhov Нерд

    Доброго времени суток! Написал скетч на включение реле по времени... использовал Arduino UNO, часы RTC DS3231 и реле.

    Настраиваю время на часах... Все вроде идет стабильно... Даже после отключения питания время остается в норме, но как только я заливаю именно этот скетч время сбивается и вся программа перестает работать, причем через пару секунд после запуска Arduino реле замыкается и находится в таком положения до выключения питания....

    Буду благодарен советам!

    Код (C++):
    #include <DS3231.h>
    #include <Wire.h>
    #include <RTC.h>
    #include <Time.h>
    #include <TimeLib.h>

    int Rele = 7; //пин реле
    int Green = 5; //пин зеленый светодиод
    int Blue = 9; //пин синий светодиод
    int Red = 11; //пин красный светодиод

    DS3231 Clock; //подключаем часики
    bool h12 = false; //24часовой формат
    bool PM; //тоже к часикам и формату
    bool Century;


    void setup() { //запускаемся
      Serial.begin(9600); //устанавливаем скорость передачи данных
      Wire.begin();
      digitalWrite(Rele, HIGH); //устанавливаем значение на реле - "выключено"
      pinMode(Rele, OUTPUT); //устанавливаем на реле "высокий" уровень
      pinMode(Green, OUTPUT); //зеленый светодиод
    }

    void loop() { //рабочий режим/алгоритмы

    Clock.setClockMode(false);
    int day, hour, minute, second; //объявляем переменные

    day = Clock.getDoW(); //получаем день недели
    hour = Clock.getHour(h12, PM); //присваиваем часы
    minute = Clock.getMinute(); //присваиваем минуты
    second = Clock.getSecond(); //присваиваем секунды

      if ( day == 1||2||3||4||5||6 && hour == 16 && minute == 25 && second == 00 )
      {
        digitalWrite(Rele, LOW);
        delay(5000);
        digitalWrite(Rele, HIGH);
      }

    if ( day == 1||2||3||4||5||6 && hour == 16 && minute == 28 && second == 00 )
      {
        digitalWrite(Rele, LOW);
        delay(5000);
        digitalWrite(Rele, HIGH);
      }

    if ( day == 1||2||3||4||5||6 && hour == 16 && minute == 30 && second == 00 )
      {
        digitalWrite(Rele, LOW);
        delay(5000);
        digitalWrite(Rele, HIGH);
      }

    if ( day == 1||2||3||4||5||6 && hour == 16 && minute == 32 && second == 00 )
      {
        digitalWrite(Rele, LOW);
        delay(5000);
        digitalWrite(Rele, HIGH);
      }

    if ( day == 1||2||3||4||5||6 && hour == 16 && minute == 35 && second == 00 )
      {
        digitalWrite(Rele, LOW);
        delay(5000);
        digitalWrite(Rele, HIGH);
      }

    /*if ( day == 1||2||3||4||5 && hour == 11 && minute == 10 && second == 00 )
      {
        digitalWrite(Rele, LOW);
        delay(5000);
        digitalWrite(Rele, HIGH);
      }

    if ( day == 1||2||3||4||5 && hour == 12 && minute == 15 && second == 00 )
      {
        digitalWrite(Rele, LOW);
        delay(5000);
        digitalWrite(Rele, HIGH);
      }

    if ( day == 1||2||3||4||5 && hour == 12 && minute == 30 && second == 00 )
      {
        digitalWrite(Rele, LOW);
        delay(5000);
        digitalWrite(Rele, HIGH);
      }

    if ( day == 1||2||3||4||5 && hour == 13 && minute == 15 && second == 00 )
      {
        digitalWrite(Rele, LOW);
        delay(5000);
        digitalWrite(Rele, HIGH);
      }

    if ( day == 1||2||3||4||5 && hour == 13 && minute == 25 && second == 00 )
      {
        digitalWrite(Rele, LOW);
        delay(5000);
        digitalWrite(Rele, HIGH);
      }

    if ( day == 1||2||3||4||5 && hour == 14 && minute == 10 && second == 00 )
      {
        digitalWrite(Rele, LOW);
        delay(5000);
        digitalWrite(Rele, HIGH);
      }

    if ( day == 1||2||3||4||5 && hour == 14 && minute == 20 && second == 00 )
      {
        digitalWrite(Rele, LOW);
        delay(5000);
        digitalWrite(Rele, HIGH);
      }

    if ( day == 1||2||3||4||5 && hour == 15 && minute == 05 && second == 00 )
      {
        digitalWrite(Rele, LOW);
        delay(5000);
        digitalWrite(Rele, HIGH);
      }

    if ( day == 1||2||3||4||5 && hour == 15 && minute == 25 && second == 00 )
      {
        digitalWrite(Rele, LOW);
        delay(5000);
        digitalWrite(Rele, HIGH);
      }

    if ( day == 1||2||3||4||5 && hour == 16 && minute == 10 && second == 00 )
      {
        digitalWrite(Rele, LOW);
        delay(5000);
        digitalWrite(Rele, HIGH);
      }

    if ( day == 1||2||3||4||5 && hour == 16 && minute == 30 && second == 00 )
      {
        digitalWrite(Rele, LOW);
        delay(5000);
        digitalWrite(Rele, HIGH);
      }

    if ( day == 1||2||3||4||5 && hour == 17 && minute == 15 && second == 00 )
      {
        digitalWrite(Rele, LOW);
        delay(5000);
        digitalWrite(Rele, HIGH);
      }

    if ( day == 1||2||3||4||5 && hour == 17 && minute == 25 && second == 00 )
      {
        digitalWrite(Rele, LOW);
        delay(5000);
        digitalWrite(Rele, HIGH);
      }

    if ( day == 1||2||3||4||5 && hour == 18 && minute == 10 && second == 00 )
      {
        digitalWrite(Rele, LOW);
        delay(5000);
        digitalWrite(Rele, HIGH);
      }

    if ( day == 1||2||3||4||5 && hour == 18 && minute == 20 && second == 00 )
      {
        digitalWrite(Rele, LOW);
        delay(5000);
        digitalWrite(Rele, HIGH);
      }

    if ( day == 1||2||3||4||5 && hour == 19 && minute == 05 && second == 00 )
      {
        digitalWrite(Rele, LOW);
        delay(5000);
        digitalWrite(Rele, HIGH);
      }*/

    }
    Вот этот код на другом ресурсе: http://pastebin.com/1USi0azT
     
    Последнее редактирование: 18 мар 2017
    Suyano нравится это.
  2. rkit

    rkit Гуру

    Что это такое? Может вам повторить приоритеты операторов?
     
    Tomasina нравится это.
  3. Suyano

    Suyano Нерд

    Это выбор, чтобы сработало реле в какой-нибудь из этих дней
     
  4. Unixon

    Unixon Оракул Модератор

    Это пишется так:
    Код (C):

    if ((day==1)||(day==2)||(day==3)) // ну и т.д.
     
     
  5. rkit

    rkit Гуру

    Код (C++):
    if ((1 << day) & 0b0111111)
    Вообще-то
     
    Unixon нравится это.
  6. Unixon

    Unixon Оракул Модератор

    Это следующий этап оптимизации :)
    Сначала нужно хотя бы "в лоб" правильно написать.