Светодиодный матричный модуль FC-16 на базе MAX7219

ИЗМЕНИТЬ:

const char  *pc[NUM_ZONES] =
{
  "ROOM", //0
  "SUBJECT", //1
  "GRADE",//2
  }; 

Я сделал это, но не могу заставить их отображать все строки одновременно.

void loop(void)
{

 DateTime now = rtc.now();
 char buffer[] = "hh:mm";  // часы и минуты

 for (uint8_t i=0; i<NUM_ZONES; i++){
   P.displayZoneText(0,now.toString(buffer), PA_CENTER, 0, 0, PA_PRINT, PA_NO_EFFECT);
   P.displayZoneText(1, pc[1], PA_CENTER, 0, 0, PA_PRINT, PA_NO_EFFECT);
   P.displayZoneText(2, pc[2], PA_CENTER, 0, 0, PA_PRINT, PA_NO_EFFECT);  // отображать
   P.displayZoneText(3, pc[3], PA_CENTER, 0, 0, PA_PRINT, PA_NO_EFFECT);
 }
}  

Таким образом, я могу отображать только одну строку за раз, теперь отображается только час:мин.

Скажите, что я делаю не так

EDIT2:

Или так:

-это моя цель, изменить текст в зависимости от часа

void loop(void)
{

 DateTime now = rtc.now();
 char buffer[] = "hh:mm";  // часы и минуты


   P.displayZoneText(0,now.toString(buffer), PA_CENTER, 0, 0, PA_PRINT, PA_NO_EFFECT);

   if(now.hour()==21){
   P.displayZoneText(1, pc[1], PA_CENTER, 0, 0, PA_PRINT, PA_NO_EFFECT);
   P.displayZoneText(2, pc[2], PA_CENTER, 0, 0, PA_PRINT, PA_NO_EFFECT);  // отображать
   P.displayZoneText(3, pc[3], PA_CENTER, 0, 0, PA_PRINT, PA_NO_EFFECT);
   }
   P.displayAnimate();
}

И на данный момент с этим кодом отображаются только часы и минуты

, 👍0

Обсуждение

Когда вы делаете это вручную, как вы вычисляете, сколько пробелов нужно поставить между словами? Все, что вам действительно нужно сделать, это сделать то же самое в программе, но не совсем ясно, что это за процесс., @Delta_G


1 ответ


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

0

Я не использовал эту библиотеку, но, читая документацию, кажется, что она работает с концепцией зон.

  1. Создайте зону для каждой строки (зона — это непрерывный блок модулей, образующих своего рода вспомогательный дисплей).
  2. Выполняйте операции над зонами с помощью специальных функций зоны.

Например, настройка ваших зон может быть следующей:

P.begin(4); // У нас будет 4 зоны
P.setZone(0, 0, 3); // Модули 0-3 в зоне 0
P.setZone(1, 4, 7); // Модули 4-7 в зоне 1
P.setZone(2, 8, 11); // Модули 8-11 в зоне 2
P.setZone(3, 12, 15); // Модули 12-15 в зоне 3

Затем вы можете очистить зону с помощью:

P.displayClear(2); // Очистить зону 2

И напишите текст в зону с помощью:

P.displayZoneText(3, "P03", PA_CENTER, 0, 0, PA_NO_EFFECT, PA_NO_EFFECT);

Я не уверен, что означают все параметры, но прототип:

void displayZoneText(uint8_t z, const char *pText, textPosition_t align, uint16_t speed, uint16_t pause, textEffect_t effectIn, textEffect_t effectOut = PA_NO_EFFECT);
,

Мне это удалось. Я создал свои 4 зоны и теперь могу отображать текст в любой из них. Теперь я хотел бы знать, как отображать час: минуты из модуля часов и текста одновременно. Часы и минуты в одном ряду и текст в другом 3, @Rehoboam

Вы печатаете время в зоне 0 и другой текст в других зонах., @Majenko

Да, но я не знаю прототипа этого. Я не могу их распечатать. Только отдельно, @Rehoboam

Я привожу вам явный пример в своем ответе., @Majenko

я дал тебе правку, @Rehoboam