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);
}```
@Rehoboam, 👍1
Обсуждение1 ответ
Лучший ответ:
как вывести время с часового модуля 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
- Запуск прерываний с помощью DHT-11
- Программа arduino выдаёт ошибку expected //primary-expression before ')' token error: //expected ';' before '}' token E
- Esp8266 Vin контакт
- Постоянная частота дискретизации АЦП на ESP8266 или ESP32
- Отключить прерывания при выполнении важных действий?
- Отправка данных из ESP8266 в PHP
- Разница между 3,3 В и 5 В
- 4-битный счетчик вверх и вниз
Повторите ваше редактирование: вы закомментировали строку
rtc.adjust()
. Вы уверены, что ваш RTC правильно инициализирован? В противном случае возвращенное DateTime может быть недействительным, что может привести к распечатке мусора. Вы также можете проверить значение, возвращаемое функциейnow.isValid()
., @Edgar Bonet