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
#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