Arduino Nano, модуль часов DS3231 RTC и 4 каскадных светодиодных матричных модуля FC-16

Как я уже сказал в заголовке, я использую модуль часов реального времени DS3231 и 4 каскадных модуля FC-16 (в основном это модули на основе светодиодных матриц MAX7219). Моя цель — отобразить расписание, расписание занятий на матрицах. Назначение модуля DS3231 — следить за временем (в основном часами) с 8:00 до 20:00, отображать час на матрице и менять тему при достижении четных часов. Например: когда сейчас 8:00, у нас есть тема А, когда 10:00, у нас есть тема Б и т. д.

И после этого мне приходится использовать Wi-Fi-модуль ESP8266, чтобы изменять расписание на расстоянии.

EDIT1: У меня получилось вывести час на матрицу, но вот как выводить текст в 4 строки никак не могу понять. У меня есть 4 модуля FC-16, и я хочу поместить каждый из них поверх другого, чтобы у меня было 4 строки текста. Мне удалось сделать это, вставив пробел между словами, но это не оптимально. Я хочу, чтобы это было автоматизировано, чтобы человеку, изменяющему текст в программе, не приходилось самому расставлять интервалы.

#include "RTClib.h"
#include <MD_Parola.h>
#include <MD_MAX72xx.h>
#include <SPI.h>

const uint16_t WAIT_TIME = 1000;

#define HARDWARE_TYPE MD_MAX72XX::FC16_HW
#define MAX_DEVICES 16

#define CLK_PIN   13
#define DATA_PIN  11
#define CS_PIN    10

MD_Parola P = MD_Parola(HARDWARE_TYPE, CS_PIN, MAX_DEVICES);

RTC_DS3231 rtc;

//char daysOfTheWeek[7][12] = {"Воскресенье", "Понедельник", "Вторник", "Среда", "Четверг", "Пятница", "Суббота"};

void setup () {
  P.begin();

  if (! rtc.begin()) {
    Serial.println("Couldn't find RTC");
    while (1);
  }

 if (rtc.lostPower()) {
    Serial.println("RTC lost power, lets set the time!");
// Если RTC потерял питание, он установит RTC на дату & время, когда этот скетч был скомпилирован в следующую строку
   rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));

  }
}

void loop () {
    DateTime now = rtc.now();

    char buffer[] = "hh:mm";  // часы и минуты
    P.print(now.toString(buffer));  // отображать

   // Serial.println();
    delay(1000);
}```

, 👍1

Обсуждение

Повторите ваше редактирование: вы закомментировали строку rtc.adjust(). Вы уверены, что ваш RTC правильно инициализирован? В противном случае возвращенное DateTime может быть недействительным, что может привести к распечатке мусора. Вы также можете проверить значение, возвращаемое функцией now.isValid()., @Edgar Bonet


1 ответ


Лучший ответ:

0

как вывести время с часового модуля DS3231 на FC-16 светодиодные матричные модули?

Можно использовать метод DateTime::toString() чтобы преобразовать текущее время в строку в выбранном вами формате, затем P.print() чтобы отобразить эту строку на светодиодной матрице:

void loop() {
    DateTime now = rtc.now();
    char buffer[] = "hh:mm";  // часы и минуты
    P.print(now.toString(buffer));  // отображать
}

как использовать этот час дня, чтобы микроконтроллер знал какой текст он должен отображать дальше?

Условите свою логику now.hour().

,

Спасибо большое! Попробую и выложу обновление., @Rehoboam