Суточный таймер на DS3231

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

  1. electron56

    electron56 Нуб

    Здрасти. Собрал тут суточный таймер, имея под рукой Nano и ds3231, ну и дисплей обычный. Всё работает всё супер только вот при отключении время сбрасывается. Есть ли какой нибудь способ чтобы время шло дальше при отключении питания с Nano. Не зря же батарейка на модуле часов стоит. Или она не для этого?
    Вот скетч:

    Код (Text):

    #include <Wire.h>
    #include <DS3231.h>
    #include <LiquidCrystal_I2C.h>

    LiquidCrystal_I2C lcd(0x27, 16, 2);
    DS3231 Clock;
    bool h12 = false;
    bool PM;
    bool Century = false;

    void setup() {


      lcd.begin(16, 2);
      lcd.clear();
      lcd.setBacklight(HIGH);
      Wire.begin();
      pinMode(10, OUTPUT);
    }

    void loop() {
      int second, minute, hour, date, month, year, temperature;

      year = Clock.getYear();
      month = Clock.getMonth(Century);
      date = Clock.getDate();
      hour = Clock.getHour(h12, PM);
      minute = Clock.getMinute();
      second = Clock.getSecond();
      temperature = Clock.getTemperature();

      if ( hour >= 9 && hour <= 17 )
      {
        digitalWrite(10, HIGH);
      }
      else
      {
      digitalWrite(10, LOW);
      }

      lcd.print("20");
      lcd.print(year, DEC);
      lcd.print('-');
      if (month < 10) lcd.print('0');
      lcd.print(month, DEC);
      lcd.print('-');
      if (date < 10) lcd.print('0');
      lcd.print(date, DEC);

      lcd.setCursor(0, 1);
      if (hour < 10) lcd.print('0');
      lcd.print(hour, DEC);
      lcd.print(':');
      if (minute < 10) lcd.print('0');
      lcd.print(minute, DEC);
      lcd.print(':');
      if (second < 10) lcd.print('0');
      lcd.print(second, DEC);
      lcd.print(' ');
      lcd.print("Temp:");
      lcd.print(temperature);
      delay(500);
      lcd.setCursor(0, 0);


    }
     
     
  2. electron56

    electron56 Нуб

    Извиняюсь не тот скетч кинул. Выкладываю верный ниже. Впринципе отличается только наличием установки времени.

    Код (Text):

    #include <Wire.h>
    #include <DS3231.h>
    #include <LiquidCrystal_I2C.h>

    LiquidCrystal_I2C lcd(0x27, 16, 2);
    DS3231 Clock;
    bool h12 = false;
    bool PM;
    bool Century = false;

    void setup() {

      Wire.begin();
      Clock.setSecond(50);
      Clock.setMinute(52);
      Clock.setHour(16);
      Clock.setDoW(3);
      Clock.setDate(12);
      Clock.setMonth(8);
      Clock.setYear(15);
      lcd.begin(16, 2);
      lcd.clear();
      lcd.setBacklight(HIGH);
      Wire.begin();
      pinMode(13, OUTPUT);
    }

    void loop() {
      int second, minute, hour, date, month, year, temperature;

      year = Clock.getYear();
      month = Clock.getMonth(Century);
      date = Clock.getDate();
      hour = Clock.getHour(h12, PM);
      minute = Clock.getMinute();
      second = Clock.getSecond();
      temperature = Clock.getTemperature();

      if ( hour <= 18 && hour >= 9 )
      {
        digitalWrite(13, HIGH);
      }
      else
      {
      digitalWrite(13, HIGH);
      delay(10000);            
      digitalWrite(13, LOW);
      delay(10000);
      }

      lcd.print("20");
      lcd.print(year, DEC);
      lcd.print('-');
      if (month < 10) lcd.print('0');
      lcd.print(month, DEC);
      lcd.print('-');
      if (date < 10) lcd.print('0');
      lcd.print(date, DEC);

      lcd.setCursor(0, 1);
      if (hour < 10) lcd.print('0');
      lcd.print(hour, DEC);
      lcd.print(':');
      if (minute < 10) lcd.print('0');
      lcd.print(minute, DEC);
      lcd.print(':');
      if (second < 10) lcd.print('0');
      lcd.print(second, DEC);
      lcd.print(' ');
      lcd.print("Temp:");
      lcd.print(temperature);
      delay(500);
      lcd.setCursor(0, 0);


    }
     
     
  3. 9xA59kK

    9xA59kK Гик

    Если используешь всегда второй скетч без изменений, то время всгда будет сбрасываться при перезагрузке ардуины, на то что у тебя в Setup. Надо один раз прошить с установкой времени, а потом отредактировать скетч - убрать(или закомментировать) из Setup установку времени и снова прошить. Если батарейка исправная то время очень долго не сброситься при отключении питания.

     
    electron56 нравится это.
  4. electron56

    electron56 Нуб

    Спасибо добрый человек. Как же я сам то не додумал)) Собирался уже городить что то с EEPROM. Мало полезной информации в инете по таймерам DS3231, в основном везде DS1307.
     
  5. Уважаемые форум профи! Почему при компиляции этого скеча куча ошибок? Я долго рисовал свой рабочий скечь , добавил библиотеки, аккуратно добавляя данные с этого сечта и пиии моему тоже пришел пиии.. ощущение не верная библиотека и на фига так делать, Ваш скечь не поддается компиляции изначально! первые ошибки валятся с
    void loop() {
    int second, minute, hour, date, month, year, temperature;

    year = Clock.getYear();
    month = Clock.getMonth(Century);
    date = Clock.getDate();
    hour = Clock.getHour(h12, PM);
    minute = Clock.getMinute();
    second = Clock.getSecond();
     
  6. vvr

    vvr Инженерище

    это делается не так
    покажите ваш код и ошибки которые компилятор написал
     
  7. Скечь выложеный elektron56, ошибка
    Arduino: 1.8.2 Hourly Build 2017/02/02 11:56 (Windows 7), Плата:"Arduino Nano, ATmega328"

    C:\Users\Titan\Documents\Arduino\sketch_feb18b\sketch_feb18b.ino: In function 'void setup()':

    sketch_feb18b:14: error: 'class DS3231' has no member named 'setSecond'

    Clock.setSecond(50);

    ^

    sketch_feb18b:15: error: 'class DS3231' has no member named 'setMinute'

    Clock.setMinute(52);

    ^

    sketch_feb18b:16: error: 'class DS3231' has no member named 'setHour'

    Clock.setHour(16);

    ^

    sketch_feb18b:17: error: 'class DS3231' has no member named 'setDoW'

    Clock.setDoW(3);

    ^

    sketch_feb18b:18: error: 'class DS3231' has no member named 'setDate'

    Clock.setDate(12);

    ^

    sketch_feb18b:19: error: 'class DS3231' has no member named 'setMonth'

    Clock.setMonth(8);

    ^

    sketch_feb18b:20: error: 'class DS3231' has no member named 'setYear'

    Clock.setYear(15);

    ^

    C:\Users\Titan\Documents\Arduino\sketch_feb18b\sketch_feb18b.ino: In function 'void loop()':

    sketch_feb18b:31: error: 'class DS3231' has no member named 'getYear'

    year = Clock.getYear();

    ^

    sketch_feb18b:32: error: 'class DS3231' has no member named 'getMonth'

    month = Clock.getMonth(Century);

    ^

    sketch_feb18b:33: error: 'class DS3231' has no member named 'getDate'

    date = Clock.getDate();

    ^

    sketch_feb18b:34: error: 'class DS3231' has no member named 'getHour'

    hour = Clock.getHour(h12, PM);

    ^

    sketch_feb18b:35: error: 'class DS3231' has no member named 'getMinute'

    minute = Clock.getMinute();

    ^

    sketch_feb18b:36: error: 'class DS3231' has no member named 'getSecond'

    second = Clock.getSecond();

    ^

    sketch_feb18b:37: error: 'class DS3231' has no member named 'getTemperature'

    temperature = Clock.getTemperature();

    ^

    exit status 1
    'class DS3231' has no member named 'setSecond'

    Этот отчёт будет иметь больше информации с
    включенной опцией Файл -> Настройки ->
    "Показать подробный вывод во время компиляции"
     

    Вложения:

    • FORUMTIMER.ino
      Размер файла:
      1,5 КБ
      Просмотров:
      333
  8. vvr

    vvr Инженерище

    У ВАС ХОТЬ ОДИН ПРИМЕР ИЗ БИБЛИОТЕКИ КОМПИЛИРУЕТСЯ?
     
  9. Стандартный пример DS3231_alarm компилируется без ошибок.
     
  10. ZAZ-965

    ZAZ-965 Гуру

  11. Понадобилось мне 2 дня для решения проблемы. Проблема не в коде и даже не в библиотеке, проблема в версии среды разработки, похоже библиотеки пишутся для своей версии и в более новой среде они работают не корректно, мало того, функционал резко падает. Прошу прощения, код более чем познавательный, автору Респект!
     
  12. dobic

    dobic Нуб

    Ну вот ещё одна тема и опять не компилируется Ваша программа. Ошибки аналогичные указанные в данной теме. Пробовал разные библиотеки подключать... летят ошибки.
    Вот с какими библиотеками пробовал:

    #include <RtcDateTime.h>
    #include <RtcDS1307.h>
    #include <RtcDS3231.h>
    #include <RtcTemperature.h>
    #include <RtcUtility.h>
    #include <RtcDS1307.h>
    #include <RtcDS3231.h>
    #include <RTClib.h>
    #include <MD_DS3231.h>
    #include <Sodaq_DS3231.h>
    #include <DS3231.h>
    #include <Wire.h>
    #include <LiquidCrystal_I2C.h>
    Я не знаю можно ли давать здесь ссылки на другие сайты, но поверьте я где-то конкретно туплю.
    Работаю по шине I2C
     
  13. Попробуйте версию arduino 1.6.0 только не забудьте подключить библиотеки