Работа с RTC
- Войдите на сайт для отправки комментариев
Пт, 27/05/2016 - 13:53
Помогите нубу разобраться.
Купил в "Амперке" Arduino UNO и модуль часов реального времени http://amperka.ru/product/troyka-rtc?utm_source=man&utm_campaign=troyka-rtc&utm_medium=wiki.
Всё подключил как полагается, скачал библиотеку к часам. Залил скетч:
#include <TroykaRTC.h>
#include <Wire.h>
#include <EEPROM.h>
// размер массива для времени с учётом завершающего нуля
#define LEN_TIME 12
// размер массива для даты с учётом завершающего нуля
#define LEN_DATE 12
// размер массива для дня недели с учётом завершающего нуля
#define LEN_DOW 12
// создаём объект для работы с часами реального времени
RTC clock;
void setup()
{
// открываем последовательный порт
Serial.begin(9600);
// инициализация часов
clock.begin();
// метод установки времени и даты в модуль вручную
// clock.set(10,25,45,27,07,2005,THURSDAY);
// метод установки времени и даты автоматически при компиляции
clock.set(__TIMESTAMP__);
}
void loop()
{
// массив для хранения текущего времени
char time[LEN_TIME]={0};
// массив для хранения текущей даты
char date[LEN_DATE]={0};
// массив для хранения текущего дня недели
char dow[LEN_DOW]={0};
// запрашиваем данные с часов
clock.read();
// сохраняем текущее время в массив time
clock.getTimeStr(time, LEN_TIME);
// сохраняем текущую дату в массив date
clock.getDateStr(date, LEN_DATE);
// сохраняем текущий день недели в массив dow
clock.getDOWStr(dow, LEN_DOW);
// выводим в serial порт текущее время, дату и день недели
Serial.print(time);
Serial.print("--");
Serial.print(date);
Serial.print("--");
Serial.println(dow);
// ждём одну секунду
delay(1000);
}
прямо с сайта, соответственно, как заведомо работающий пример... Ну и ожидал в консоли увидеть что-то вроде "21:57--27.05.2016--FRI", подключил putty к serial порту arduino, а там вывод такого плана
45:@5:85--@5.@5.2165--
45:@5:85--@5.@5.2165--
45:@5:85--@5.@5.2165--▒▒@5.@5.2
45:@5:85--@5.@5.2165--
45:@5:85--@5.@5.2165--
45:@5:85--@5.@5.2165--
45:@5:85--@5.@5.2165--
45:@5:85--@5.@5.2165--
45:@5:85--@5.@5.2165--
45:@5:85--@5.@5.2165--
45:@5:85--@5.@5.2165--▒▒@5.@5.2
45:@5:85--@5.@5.2165--
45:@5:85--@5.@5.2165--
Может кто-нибудь подсказать, это вообще что? Как из этого вытащить время и дату?
да, да именно ждём одну секунду, что бы что-то делать с RTC - правильной дорогой идёшь, товарищь.
Забейте в гугл, "45:@5:85--@5.@5.2165" - и вы поймете, что нужно было купить искру. Ну заодно узнаете, кто-такой айтуси (подпольная кличка тэвиай), и где его искать.
Спору нет, посыпаю голову пеплом. Самое простое решение вылетело из головы.
Всё оказалось просто - необходимо было поменять местами SCL и SDA.
Подскажите, кто работал с этой конкретной библиотекой - как добыть целочисленные значения часов, минут и прочего, без обратного частичного преобразования возвращаемой строки времени и даты ? Что то я туплю совсем.
UPD: открыл файл .h библиотеки и доперло! - getHour(), getMinute() и тд. всем спасибо :))
все свободны...
Товарищи, всем привет!
подскажите почему не могу получить время с DS1307 в обработчике прерывания таймера?
В лупе работает, как только обращаюсь в timer_it к RTC все виснет
#include <TimerOne.h> #include <RTClib.h> #include <Wire.h> RTC_DS1307 RTC; void setup () { Serial.begin(115200); Wire.begin(); RTC.begin(); Timer1.initialize(10000000); Timer1.attachInterrupt(timer_it); } void loop () { if (RTC.isrunning()) { DateTime now = RTC.now(); Serial.print(now.hour(), DEC); Serial.print(':'); Serial.print(now.minute(), DEC); Serial.print(':'); Serial.print(now.second(), DEC); Serial.println(); } else { Serial.println("No RTC"); } delay(5000); } void timer_it () { DateTime now = RTC.now(); Serial.print(now.hour(), DEC); Serial.print(':'); Serial.print(now.minute(), DEC); Serial.print(':'); Serial.println(now.second(), DEC); }