Ds3231 clock ошибка

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

Pick a username
Email Address
Password

By clicking “Sign up for GitHub”, you agree to our terms of service and
privacy statement. We’ll occasionally send you account related emails.

Already on GitHub?
Sign in
to your account

Offline

Зарегистрирован: 03.03.2019

Помогите разобраться.  Почему не выводится в монитор порта, время и дата?(пустая строка, потом строка Sleep, потом строка Wake UP и опять пустая строка. Хотя таймер работает. С ардуинкой только знакомлюсь. Пробовал другой скетч с таймером, таже ерунда, а если залить просто время, то выводится .

#include <DS3231.h>
#include <avr/sleep.h> 
#include <avr/power.h>

#define WakePin          2

DS3231 clock;
RTCDateTime dt;

void rtcUp() { }

void(*resetFunc) (void) = 0;

void setSleepTimer(int mins) {
  uint8_t hours = mins / 60;
  uint8_t mins_left = mins - hours * 60;
  dt = clock.getDateTime();
  uint8_t hnow = dt.hour;
  uint8_t mnow = dt.minute;
  uint8_t sec = dt.second;
  mnow += mins_left;
  if (mnow >= 60) {
    mnow -= 60;
    hnow += 1;
  }
  hnow += hours;
  if (hnow > 23) {
    hnow -= 24;
  }
  clock.setAlarm1(0, hnow, mnow, sec, DS3231_MATCH_H_M_S);
}


void sleepNow() {
  ADCSRA = 0;
  power_all_disable();
  set_sleep_mode(SLEEP_MODE_PWR_DOWN);
  attachInterrupt(0, rtcUp, LOW);
  sleep_enable();  
  sleep_mode();  
  sleep_disable();
  power_all_enable();
  detachInterrupt(0);
}


void setup() {
  pinMode(WakePin, INPUT_PULLUP);
  Serial.begin(9600);
  clock.begin();
  clock.enableOutput(false);
  clock.armAlarm1(false);
  clock.armAlarm2(false);
  clock.clearAlarm1();
  clock.clearAlarm2();
}

void loop() {
  dt = clock.getDateTime();
  Serial.println(clock.dateFormat("d-m-Y H:i:s - l", dt));
  setSleepTimer(1);
  Serial.println("Sleep");
  delay(100);
  sleepNow();
  Serial.println("Wake UP");
  //resetFunc();
}

Перейти к содержимому раздела

forum.rcl-radio.ru

Arduino

Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.

Активные темы Темы без ответов

Страницы 1

Чтобы отправить ответ, вы должны войти или зарегистрироваться

1 2019-09-28 16:05:19

  • liman324
  • Administrator
  • Неактивен
  • Зарегистрирован: 2019-08-21
  • Сообщений: 3,747

Тема: Проверка DS3231

http://forum.rcl-radio.ru/uploads/images/2019/09/a894ae03751d73abf9525b2c35564a8a.png

  #include <Wire.h>
  #include <DS3231.h>
   DS3231 clock;
   RTCDateTime DateTime;

 void setup() { Serial.begin(9600);clock.begin();
   // clock.setDateTime(__DATE__, __TIME__); // Устанавливаем время на часах, основываясь на времени компиляции скетча
 }

 void loop() {
    DateTime = clock.getDateTime(); 
   Serial.println(DateTime.second);
   delay(1000);
}

2 Ответ от fp 2019-11-25 02:05:10

  • fp
  • Новый участник
  • Неактивен
  • Зарегистрирован: 2019-11-17
  • Сообщений: 8

Re: Проверка DS3231

Хм… Не работает.
Какая библиотека используется? Эта — <DS3231.h>//https://github.com/jarzebski/Arduino-DS3231/archive/master.zip ?
У меня на неё компилятор ругается, выдаёт кучу предупреждений.

3 Ответ от liman324 2019-11-25 03:55:24

  • liman324
  • Administrator
  • Неактивен
  • Зарегистрирован: 2019-08-21
  • Сообщений: 3,747

Re: Проверка DS3231

Данный контент доступен только зарегистрированным пользователям.

4 Ответ от fp 2019-11-26 00:29:00

  • fp
  • Новый участник
  • Неактивен
  • Зарегистрирован: 2019-11-17
  • Сообщений: 8

Re: Проверка DS3231

Именно эту библиотеку я и использовал. Всё равно не работает. Скетч зависает на строке «clock.begin();»
При компиляции компилятор выдаёт:
…libraries\DS3231\DS3231.cpp:1206:11: warning: extra tokens at end of #endif directive
     #endif;
           ^
…libraries\DS3231\DS3231.cpp: In member function ‘char* DS3231::dateFormat(const char*, RTCDateTime)’:
…libraries\DS3231\DS3231.cpp:173:10: warning: address of local variable ‘buffer’ returned [-Wreturn-local-addr]
     char buffer[255];
и т.д.

5 Ответ от liman324 2019-11-26 06:47:42

  • liman324
  • Administrator
  • Неактивен
  • Зарегистрирован: 2019-08-21
  • Сообщений: 3,747

Re: Проверка DS3231

Вот тестовый скетч расположенный в самой библиотеке

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

DS3231 clock;
RTCDateTime dt;

void setup()
{
  Serial.begin(9600);

  // Initialize DS3231
  Serial.println("Initialize DS3231");;
  clock.begin();

  // Set sketch compiling time
  clock.setDateTime(__DATE__, __TIME__);
}

void loop()
{
  dt = clock.getDateTime();

  // For leading zero look to DS3231_dateformat example

  Serial.print("Raw data: ");
  Serial.print(dt.year);   Serial.print("-");
  Serial.print(dt.month);  Serial.print("-");
  Serial.print(dt.day);    Serial.print(" ");
  Serial.print(dt.hour);   Serial.print(":");
  Serial.print(dt.minute); Serial.print(":");
  Serial.print(dt.second); Serial.println("");

  delay(1000);
}

6 Ответ от liman324 2019-11-26 06:50:47

  • liman324
  • Administrator
  • Неактивен
  • Зарегистрирован: 2019-08-21
  • Сообщений: 3,747

Re: Проверка DS3231

В моем скетче не была подключена библиотека wire

#include <Wire.h>

7 Ответ от fp 2019-11-27 01:24:03

  • fp
  • Новый участник
  • Неактивен
  • Зарегистрирован: 2019-11-17
  • Сообщений: 8

Re: Проверка DS3231

1. Это ппц… Даже стыдно признаться, у модуля часов была трещина дорожки SDA. Поэтому и не проходила инициализация библиотеки clock.begin().
2. Про #include <Wire.h> не стоит волноваться, внутри DS3231.cpp это уже прописано.
3. Предупреждения компилятора остались. Что логично, это программная проблема.

P.S. Спасибо за помощь.

Сообщений 7

Страницы 1

Чтобы отправить ответ, вы должны войти или зарегистрироваться

Форум работает на PunBB, при поддержке Informer Technologies, Inc

При копировании материала сслыка на сайт обязательна!!!
| Помошь сайту — Сбербанк Visa: 4276 4500 1139 3002

JavaScript:

/*На 8266 SDA->D2; SCL->D1


  DS3231: Real-Time Clock.
  Read more: www.jarzebski.pl/arduino/komponenty/zegar-czasu-rzeczywistego-rtc-DS3231.html
  GIT: https://github.com/jarzebski/Arduino-DS3231
  Web: http://www.jarzebski.pl
  (c) 2014 by Korneliusz Jarzebski
*/

#include <Wire.h>             // Подключаем бибилиотеку для работы с I2C устройствами
#include <DS3231.h>           // Подключаем библиотеку для работы с RTC DS3231

DS3231 clock;                 // Связываем объект clock с библиотекой DS3231
RTCDateTime DateTime;         // Определяем сущность структуры RTCDateTime (описанной в библиотеке DS3231) для хранения считанных с часов даты и времени
//RTCAlarmTime Alarm1;          // Определяем сущность структуры RTCAlarmTime (описанной в библиотеке DS3231) для хранения считанных с первого будильника настроек даты и времени

boolean isAlarm = false;      // Логическая переменная для обработки сигнала о срабатывании будильника
//boolean alarmState = false;   // Логическая переменная для обработки индикации при срабатывании будильника
//int alarmLED = 4;             // Пин, к которому подключаем индикатор срабатывания будильника (светодиод)

/*void alarmFunction()                                  // Функция, вызываемая при срабатывании будильника
{
  isAlarm = true;                                     // Присваиваем значение "истина" переменной для обработки срабатывания будильника
}
*/
void setup()
{
  Serial.begin(9600);               // Инициализируем вывод данных на монитор серийного порта, со скоростью 9600 бод
  clock.begin();                    // Инициализируем работу с объектом библиотеки DS3231
  clock.enableOutput(false);        // Определяем назначение вывода SQW (INT) для генерации прерываний при сработке будильников

//  clock.setDateTime(__DATE__, __TIME__);                  // Устанавливаем время на часах, основываясь на времени компиляции скетча
//  clock.setDateTime(2016, 9, 15, 0, 0, 0);              // Установка времени вручную (Год, Месяц, День, Час, Минута, Секунда)
//  setAlarm1(Дата или день, Час, Минута, Секунда, Режим)
// clock.setAlarm1(0, 0, 0, 10, DS3231_MATCH_S);           // Устанавливаем первый будильник на срабатывание в 10 сек. каждой минуты. Режим DS3231_MATCH_S сообщает о том, что ориентироваться надо на секунды.
//  pinMode(alarmLED, OUTPUT);                              // Определяем пин подключения питания светодиода, как исходящий
//  attachInterrupt(0, alarmFunction, FALLING);             // Задаем функцию для обработки прерывания 0 (на пине 2)
}

void loop()
{
  DateTime = clock.getDateTime();                                                 // Считываем c часов текущие значения даты и времени в сущность DateTime
  //Alarm1 = clock.getAlarm1();                                                     // Считываем c первого будильника текущие настройки даты и времени в сущность Alarm1
  Serial.println(clock.dateFormat("d.m.Y H:i:s", DateTime));               // Определяем формат вывода даты и выводим на монитор серийного порта
  Serial.println("Temperature: " + String(clock.readTemperature()));              // Выводим значения температуры
  //Serial.println("Alarm: " + String(clock.dateFormat("__ __:__:s", Alarm1)));     // Выводим настройки будильника                               
  Serial.println();                                                               // Перевод строки
  /*if (isAlarm)                                                                    // Если поступил сигнал о сработке будильника
  {
    digitalWrite(alarmLED, alarmState);                                           // Отправляем логическое значение выводу питания светодиода при каждом срабатывании будильника
    alarmState = !alarmState;                                                     // Меняем это значение на противоположное
    isAlarm = false;                                                              // Отключаем сигнал о сработке будильника (меняем состояние события обработки индикатора на "ложь")
    clock.clearAlarm1();                                                          // Очищаем состояние сработки будильника
  }
  */
  delay(1000);                                                                    // Задержка в 1 секунду
}

I am posting a code please try it may be it can help you

    #include "RTClib.h"

RTC_DS3231 rtc;

char daysOfTheWeek[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};

void setup () {
  Serial.begin(57600);

#ifndef ESP8266
  while (!Serial); // wait for serial port to connect. Needed for native USB
#endif

  if (! rtc.begin()) {
    Serial.println("Couldn't find RTC");
    Serial.flush();
    abort();
  }

  if (rtc.lostPower()) {
    Serial.println("RTC lost power, let's set the time!");
    // When time needs to be set on a new device, or after a power loss, the
    // following line sets the RTC to the date & time this sketch was compiled
    rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
    // This line sets the RTC with an explicit date & time, for example to set
    // January 21, 2014 at 3am you would call:
     rtc.adjust(DateTime(2020, 10, 19, 10, 13, 0));
  }

  // When time needs to be re-set on a previously configured device, the
  // following line sets the RTC to the date & time this sketch was compiled
  // rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
  // This line sets the RTC with an explicit date & time, for example to set
  // January 21, 2014 at 3am you would call:
  // rtc.adjust(DateTime(2014, 1, 21, 3, 0, 0));
}

void loop () {
    DateTime now = rtc.now();

    Serial.print(now.year(), DEC);
    Serial.print('/');
    Serial.print(now.month(), DEC);
    Serial.print('/');
    Serial.print(now.day(), DEC);
    Serial.print(" (");
    Serial.print(daysOfTheWeek[now.dayOfTheWeek()]);
    Serial.print(") ");
    Serial.print(now.hour(), DEC);
    Serial.print(':');
    Serial.print(now.minute(), DEC);
    Serial.print(':');
    Serial.print(now.second(), DEC);
    Serial.println();

    Serial.print(" since midnight 1/1/1970 = ");
    Serial.print(now.unixtime());
    Serial.print("s = ");
    Serial.print(now.unixtime() / 86400L);
    Serial.println("d");

    // calculate a date which is 7 days and 30 seconds into the future
    DateTime future (now + TimeSpan(7,12,30,6));

    Serial.print(" now + 7d + 30s: ");
    Serial.print(future.year(), DEC);
    Serial.print('/');
    Serial.print(future.month(), DEC);
    Serial.print('/');
    Serial.print(future.day(), DEC);
    Serial.print(' ');
    Serial.print(future.hour(), DEC);
    Serial.print(':');
    Serial.print(future.minute(), DEC);
    Serial.print(':');
    Serial.print(future.second(), DEC);
    Serial.println();

    Serial.print("Temperature: ");
    Serial.print(rtc.getTemperature());
    Serial.println(" C");

    Serial.println();
    delay(3000);
}

Upload the above code and then upload the same code just comment the following part

if (rtc.lostPower()) {
        Serial.println("RTC lost power, let's set the time!");
        // When time needs to be set on a new device, or after a power loss, the
        // following line sets the RTC to the date & time this sketch was compiled
        rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
        // This line sets the RTC with an explicit date & time, for example to set
        // January 21, 2014 at 3am you would call:
         rtc.adjust(DateTime(2020, 10, 19, 10, 13, 0));
      }

This will work and even if you plug and unplug it from power the RTC time will not reset

Понравилась статья? Поделить с друзьями:

Интересное по теме:

  • Ds18b20 ошибка 127 градусов
  • Drakensang the dark eye ошибка
  • Ds0611 fanuc ошибка
  • Drakensang online ошибка nebula3 application error
  • Drakensang online ошибка dro client

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии