Как вывести время с DS1302 на дисплей OLED I2C 1.5′′ 128×128 px

Тогда ищите, где она у вас установлена, и смотрите в папке examples

Подсказка: в папке со скетчами есть папка libraries, вот в нее все библиотеки и устанавливаются

Нашёл, но открыть не могу 01 и 02

каким то чудом, в консоле появилось правильное время: 25-12-15 23:53:39

Но как теперь его считать и вывести на дисплей и чтобы оно обновлялось каждую секунду?

Надо его каждую секунду считывать и выводить на дисплей

Я итак понимаю это

Стал быть берете библиотеку для своего экрана, открываете примеры к нему и смотрите, как там организован вывод. В соответствие с этим делаете вывод времени у себя

2 лайка

опять нули в консоле пошли:

0-0-0 0:0:0

0-0-0 0:0:0

0-0-0 0:0:0

0-0-0 0:0:0

0-0-0 0:0:0

0-0-0 0:0:0

0-0-0 0:0:0

вот код:

  #include <Ds1302.h>

  // Определение пинов для подключения DS1302
  const int RST_PIN = 29;  // Пин для управления
  const int DAT_PIN = 28;  // Пин для передачи данных
  const int CLK_PIN = 27;  // Пин для синхронизации тактов

  // Создаем экземпляр класса для работы с модулем DS1302
  Ds1302 rtc(RST_PIN, CLK_PIN, DAT_PIN);


  // Функция для вывода времени в формате "YYYY-MM-DD HH:MM:SS"
  void printTime(Ds1302::DateTime dateTime) {
    Serial.print(dateTime.year);  // Год (00-99)
    Serial.print('-');
    if (dateTime.month < 10);  // Добавление нуля перед однозначным числом месяца
    Serial.print(dateTime.month);  // Месяц (01-12)
    Serial.print('-');
    if (dateTime.day < 10);  // Добавление нуля перед однозначным числом дня
    Serial.print(dateTime.day);  // День (01-31)
    Serial.print(' ');
    if (dateTime.hour < 10);  // Добавление нуля перед однозначным часом
    Serial.print(dateTime.hour);  // Час (00-23)
    Serial.print(':');
    if (dateTime.minute < 10);  // Добавление нуля перед однозначной минутой
    Serial.print(dateTime.minute);  // Минута (00-59)
    Serial.print(':');
    if (dateTime.second < 10);  // Добавление нуля перед однозначной секундой
    Serial.println(dateTime.second);  // Секунда (00-59)
  }

  void setup() {
    Serial.begin(9600);  // Инициализация последовательного порта с частотой 9600 бод

    // Инициализация RTC
    rtc.init();

    // Установка началного времени и даты
    if (rtc.isHalted()) {
      Serial.println("RTC не настроен. Установка времени...");
      rtc.start();
      // Создание структуры DateTime с заданными значениями
      // !Установите актуальную дату и время на момент загрузки кода!
      Ds1302::DateTime dt = {
        .year = 25,
        .month = Ds1302::MONTH_DEC,
        .day = 16,
        .hour = 13,
        .minute = 12,
        .second = 0,
        .dow = Ds1302::DOW_TUE
      };

      // Установка заданного времени и даты
      rtc.setDateTime(&dt);
    }
  }

  void loop() {
    // Получение текущего времени из RTC
    Ds1302::DateTime now;
    rtc.getDateTime(&now);

    // Вывод времени в формате "YYYY-MM-DD HH:MM:SS"
    printTime(now);

    delay(1000);  // Задержка на 1 секунду между выводами времени
  }

Судя по переписке на сайте, у Вольтика какая-то не очень надежная библиотека. попробуйте другую

Ну не может быть “вдруг”. Или не контакт где-то или плохой контакт. Ищи, причина на 99.999999999% в этом!!!

1 лайк

Кстати да.
@Cosmo , можете показать хорошее фото вашего подключения? - чтобы видно было и Ардуино, и модуль, и провода

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

Батарейка стоит в часах

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

Ну и? 2 + 2 сложить не можешь? Показывай фото монтажа, да по качественнее (чтобы всё можно было разглядеть).

Там, где стоят красные точки - это подключение

Пины я поменял на 44, 46, 48

Не мудрено, что в этом “паучьем раю” периодически (или постоянно?) что-то не контачит!!! Сделай с использованием пайки и проблема уйдёт!

ЗЫ: А еще прозвони тестером все эти соединительные провода (при этом изламывая их). У меня было такое, что четыре провода были вообще в обрыве, а пятый периодически “то контачил, то нет”.

2 лайка

Заменил провода, заменил пины. И всё вроде бы работает. Спасибо!

Ещё один вопрос:

Какой шрифт нужен для дисплея (U8G2_SH1107_128X128_F_HW_I2C display(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);), чтобы выводить русские буквы, а то у меня всё на английском выводится?

Он так и называется *_cyrillic

void setup(void) {
  u8g2.begin();
  u8g2.enableUTF8Print();		// enable UTF8 support for the Arduino print() function
}

void loop(void) {
  u8g2.setFont(u8g2_font_cu12_t_cyrillic);    // <-- выбор кириллического шрифта
  u8g2.firstPage();
  do {
    u8g2.setCursor(0, 40);
    u8g2.print("Привет мир");
  } while ( u8g2.nextPage() );
}