Работа с RTC

Mixael
Offline
Зарегистрирован: 27.05.2016

Помогите нубу разобраться.

Купил в "Амперке" 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--
 
Может кто-нибудь подсказать, это вообще что? Как из этого вытащить время и дату?
Клапауций 232
Offline
Зарегистрирован: 05.04.2016

да, да именно ждём одну секунду, что бы что-то делать с RTC - правильной дорогой идёшь, товарищь.

rigl
Offline
Зарегистрирован: 15.10.2014

Забейте в гугл, "45:@5:85--@5.@5.2165" -  и вы поймете, что нужно было купить искру. Ну заодно узнаете, кто-такой айтуси (подпольная кличка тэвиай), и где его искать.

Mixael
Offline
Зарегистрирован: 27.05.2016

Спору нет, посыпаю голову пеплом. Самое простое решение вылетело из головы.

Mixael
Offline
Зарегистрирован: 27.05.2016

Всё оказалось просто - необходимо было поменять местами SCL и SDA.

Voffcka
Offline
Зарегистрирован: 11.08.2016

Подскажите, кто работал с этой конкретной библиотекой - как добыть целочисленные значения часов, минут и прочего, без обратного частичного преобразования возвращаемой строки времени и даты ? Что то я туплю совсем.

UPD: открыл файл .h библиотеки и доперло! - getHour(), getMinute() и тд. всем спасибо :))

Mr.Privet
Mr.Privet аватар
Offline
Зарегистрирован: 17.11.2015

все свободны...

Ziggi
Offline
Зарегистрирован: 28.05.2015

Товарищи, всем привет!

подскажите почему не могу получить время с 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);

}