Помощь по по модулю часов DS3231

Приветствую.
Дано:

  1. Ардуино Uno R3;
  2. Модуль часов ds3231.
  3. Батарейка 3V.
  4. Подключал так:
    GND->GND
    5V->VCC
    SCL->A4
    SDA->A5
  5. Дан код такой:
#include <DS3231.h>  
static const uint8_t P0 = A4;
static const uint8_t P1 = A5;


DS3231 rtc(P0, P1); //

void setup() {  
    Serial.begin(9600);  
    rtc.begin();  
    // Установка времени  
    rtc.setDOW(FRIDAY);  // Установить день недели  
    rtc.setTime(16, 29, 0);  // Установить время 16:29:00 (формат 24 часа)  
    rtc.setDate(31, 8, 2018);  // Установить дату 31 августа 2018 года  
}  

void loop() {  
    Serial.print(rtc.getDOWStr());  // Отправляем день недели  
    Serial.print(" ");  
    Serial.print(rtc.getDateStr());  // Отправляем дату  
    Serial.print(" -- ");  
    Serial.println(rtc.getTimeStr());  // Отправляем время  
    delay(1000);  // Задержка в одну секунду  
}

Проблема:
Дает ошибку на строке с аналоговыми выводами.

A:6:18: error: no matching function for call to 'DS3231::DS3231(const uint8_t&, const uint8_t&)'
 DS3231 rtc(P0, P1);

Есть сомнения в удивлении.

Примеры к используемой библиотеке смотрели? Там так инициализируется объект? Наверняка же без параметров.

2 лайка

Дайте мне правильный код и библиотеку.

Шо, опять?

1 лайк

Вроде бы нашел код сейчас выложу.

Может не стоит?

1 лайк

И ключ от квартиры где деффки вижжят…

Еще такой вопросик, а как напримр сделать чтобы часы синхронизировлись плавно с refresh(); т.е. чтобы не было скачков давления при движении масс спектрального анализатора повышенной индуктивности. Т.е. delay(1000) должно синхронизироваться.

Чувак, что за дурЬ ты куришь?

2 лайка

Я ни курил.

//Original code author belongs to: https://arduinokitproject.com/ds3231-rtc-arduino-tutorial/
//Code modified by: countervector0000;
#include "Arduino.h"
#include "uRTCLib.h"

int ss=0;
int mm=0;
int hh=0;
int dd=0;
int w=0;
String W0="$";
String W1="$";

int MM=0;
int YYYY=1000;
int t=0;
String de0="/";
String de1=":";
String Si="\xC2\xB0";
uRTCLib rtc(0x68);
char WW0[7][24] = { "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday","Sunday"};
char WW1[7][24] = { "Понедельник", "Вторник", "Среда", "Четверг", "Пятница", "Суббота", "Воскресенье"};
void R0(){
  t=(rtc.temp()/ 100);                 
  W0=WW0[rtc.dayOfWeek()-1]; //День недели (Сроковый)
  W1=WW1[rtc.dayOfWeek()-1]; //День недели (Сроковый)
  w=rtc.dayOfWeek();                //День недели (Числовой)
  dd=rtc.day();                       //День месяца 
  MM=rtc.month();                     //Месяц
  YYYY=2000+rtc.year();               //Год
  
  hh=rtc.hour();                      //Часы 
  mm=rtc.minute();                    //Минуты
  ss=rtc.second();                    //Секунды
   
}

void setup() {
  Serial.begin(9600);
  URTCLIB_WIRE.begin(); 
  // rtc.set(second, minute, hour, dayOfWeek, dayOfMonth, month, year)
  rtc.set(0, 20, 15, 7, 1, 2, 26); //после установки при первом запуске, штрихуем комментируя эту строчку.
  //и время будет тикать само. 
 }

void loop() {
  rtc.refresh();//Обновлем таймер.
  R0();//Обновляем в пременные.
  Serial.println(w+de0+"("+W1+")"+de0+ dd+de0+ MM+de0 +YYYY+"  "+hh+de1+mm+de1+ss+" t: "+ +t +Si+"C");//Выводим на экран данные
  delay(1000);
}

Как дальше сделать плавное обновление секунд??

Это как?

1 лайк

Например, delay(1000); должно плавно сочетаться с обновлением переменных hh:mm:ss;

Это как?

1 лайк

Это заметно.

Для плавного обновления используй delay(222);

Мошт delay (0,5L) или (0,7L) и совсем жосткА = delay (1,0L)

1 лайк

Вызывать refresh() по прерыванию от часов.

Не надо давить на часы.

И пусть эти часы стоят на месте.

Зашунтировать индуктивность резистором.

//Original code author belongs to: https://arduinokitproject.com/ds3231-rtc-arduino-tutorial/
//Code modified by: countervector0000;
#include "Arduino.h"
#include "uRTCLib.h"

int ss=0;
int mm=0;
int hh=0;
int dd=0;
int w=0;
String W0="$";
String W1="$";

int MM=0;
int YYYY=1000;
int t=0;
String de0="/";
String de1=":";
String Si="\xC2\xB0";
uRTCLib rtc(0x68);
char WW0[7][24] = { "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday","Sunday"};
char WW1[7][24] = { "Понедельник", "Вторник", "Среда", "Четверг", "Пятница", "Суббота", "Воскресенье"};
bool R0(){
  t=(rtc.temp()/ 100);                 
  W0=WW0[rtc.dayOfWeek()-1]; //День недели (Сроковый)
  W1=WW1[rtc.dayOfWeek()-1]; //День недели (Сроковый)
  w=rtc.dayOfWeek();                //День недели (Числовой)
  dd=rtc.day();                       //День месяца 
  MM=rtc.month();                     //Месяц
  YYYY=2000+rtc.year();               //Год
  
  hh=rtc.hour();                      //Часы 
  mm=rtc.minute();                    //Минуты
  int ss_prev=ss;
  ss=rtc.second();                    //Секунды
  return (ss != ss_prev);
}

void setup() {
  Serial.begin(9600);
  URTCLIB_WIRE.begin(); 
  // rtc.set(second, minute, hour, dayOfWeek, dayOfMonth, month, year)
  rtc.set(0, 20, 15, 7, 1, 2, 26); //после установки при первом запуске, штрихуем комментируя эту строчку.
  //и время будет тикать само. 
 }

void loop() {
  rtc.refresh();//Обновлем таймер.
  if ( R0() )//Обновляем в пременные.
  {
    Serial.println(w+de0+"("+W1+")"+de0+ dd+de0+ MM+de0 +YYYY+"  "+hh+de1+mm+de1+ss+" t: "+ +t +Si+"C");//Выводим на экран данные
  }
  delay(50);
}
1 лайк
int ss_prev=ss;
ss=rtc.second();             
return (ss != ss_prev);

Спасибо, еще раз.