# MD\_parola e display max7219

**URL:** <https://forum.arduino.cc/t/md-parola-e-display-max7219/1312065>\
**Category:** Software\
**Created:** [October 16, 2024, 7:58pm UTC](https://forum.arduino.cc/t/md-parola-e-display-max7219/1312065 "2024-10-16T19:58:34Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![Marco.biondo13](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/marco.biondo13/32/1098801_2.png) [@Marco.biondo13](https://forum.arduino.cc/u/Marco.biondo13)\
**Post date:** [October 16, 2024, 7:58pm UTC](https://forum.arduino.cc/t/md-parola-e-display-max7219/1312065/1 "2024-10-16T19:58:34Z")

</div>

Ciao a tutti, sto facendo una sveglia per il mio comodino che visualizzi l'ora e le temperature interne ed esterne.  
sto avendo particolari difficoltà con la libreria MD\_parola che sto usando il display. Innanzitutto penso che il mio problema principale nasca tutto dal dividere il display in 2 zone. La superiore dove andrà sempre visualizzato l'orario e l'inferiore dove devono scorrere i vari dati di temperatura e umidità.  
Per fare questo utilizzo i comandi di visualizzazione sul display:

```arduino
if (P.displayAnimate())
    P.displayZoneText(1, buf1, PA_LEFT, P.getSpeed(), P.getPause(), PA_NO_EFFECT, PA_NO_EFFECT);
    
    if (P.displayAnimate())
    P.displayZoneText(0, temperatura , PA_LEFT, P.getSpeed(), P.getPause(), PA_SCROLL_DOWN, PA_SCROLL_DOWN);
    
    if (P.displayAnimate())
    P.displayZoneText(0, umidita , PA_LEFT, P.getSpeed(), P.getPause(), PA_SCROLL_DOWN, PA_SCROLL_DOWN);

```

ma mi ritrovo con l'orario visualizzato correttamente, il valore di temperatura che ha un'animazione lentissima indifferentemente dal valore "Speed " ( probabilmente perchè ogni aggiornamento dell'animazione è per lei un giro completo di tutto il programma ) e una volta che questa va via ricomincia l'animazione della temperatura mentre l'umidità non esce mai.  
Adesso sono un paio di giorni che cerco una soluzione a questo.  
Quindi che il programma si blocchi per un attimo fino a quando non sono terminate tutte le animazioni in maniera da non avere animazioni a rallentatore e che tutte siano visualizzate correttamente.  
Che strada posso intraprendere secondo voi?  
Grazie.

---

<div class="post-metadata">

**Author:** ![andreaber](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/andreaber/32/1013044_2.png) [@andreaber](https://forum.arduino.cc/u/andreaber)\
**Post date:** [October 17, 2024, 5:00am UTC](https://forum.arduino.cc/t/md-parola-e-display-max7219/1312065/2 "2024-10-17T05:00:12Z")

</div>

ciao...posta il codice per intero...ad ogni modo ho la sensazione che il problema lo troveremo nell'uso del delay()...

---

<div class="post-metadata">

**Author:** ![Marco.biondo13](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/marco.biondo13/32/1098801_2.png) [@Marco.biondo13](https://forum.arduino.cc/u/Marco.biondo13)\
**Post date:** [October 17, 2024, 7:18am UTC](https://forum.arduino.cc/t/md-parola-e-display-max7219/1312065/3 "2024-10-17T07:18:44Z")

</div>

ecco il codice:

```arduino
#include <WiFi.h>
#include <NTPClient.h>
#include <WiFiUdp.h>
#include <RTClib.h>
#include <MD_Parola.h>
#include <MD_MAX72xx.h>
#include <SPI.h>
#include "ThingSpeak.h"
#include <stdio.h>
#include <SPI.h>
#define HARDWARE_TYPE MD_MAX72XX::FC16_HW
#define CLK_PIN 13
#define DATA_PIN 11
#define CS_PIN 5
#define MAX_DEVICES 8
#define MAX_ZONES 2
unsigned long weatherStationChannelNumber = 2024221;
const char *ssid = "Vodafone-casa";
const char *password = "Panda2000punto2001";
WiFiClient client;
//wifi
int j=0;
//thinghspeak
int statusCode = 0;
int field[8] = {1,2,3,4,5,6,7,8};
char temperatura[5] = "";
char umidita[5] = "";
// Define NTP Client to get time
WiFiUDP ntpUDP;
//scelta server ntp
//NTPClient timeClient(ntpUDP, "pool.ntp.org");
NTPClient timeClient(ntpUDP, "it.pool.ntp.org");
RTC_DS1307 rtc;
//Week Days
String weekDays[7]={"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
//Month names
String months[12]={"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};
boolean aggiornamento= false;
MD_Parola P = MD_Parola(HARDWARE_TYPE, CS_PIN, MAX_DEVICES);

void setup() {  
  // Initialize Serial Monitor
  Serial.begin(115200);  
   //connessione wifi
  if(WiFi.status() != WL_CONNECTED){
    Serial.print("Attempting to connect to SSID: ");
    //Serial.println(SECRET_SSID);
     while((WiFi.status() != WL_CONNECTED) ||(j<50)){    
      WiFi.begin(ssid, password); // Connect to WPA/WPA2 network. Change this line if using open or WEP network
      Serial.print(".");
      delay(500); 
      j++;
    } 
    j=0;
  }
// Initialize a NTPClient to get time
  timeClient.begin();
  // Set offset time in seconds to adjust for your timezone, for example:
  // GMT +1 = 3600
  // GMT +8 = 28800
  // GMT -1 = -3600
  // GMT 0 = 0
  timeClient.setTimeOffset(7200);
  if (! rtc.begin()) {
    Serial.println("Couldn't find RTC");
    while (1);
  }
    if (! rtc.isrunning()) {
    Serial.println("RTC is NOT running!");
    }
    P.begin(MAX_ZONES); 
    P.setZone(0,0,3);
    P.setZone(1,4,7);   
    P.setSpeed(100);
    P.setPause(1000);
    P.setIntensity(1);  
  ThingSpeak.begin(client); 
}

void loop() {
  //connessione wifi
  if(WiFi.status() != WL_CONNECTED){
    Serial.print("Attempting to connect to SSID: ");
    //Serial.println(SECRET_SSID);
     while((WiFi.status() != WL_CONNECTED) ||(j<50)){    
      WiFi.begin(ssid, password); // Connect to WPA/WPA2 network. Change this line if using open or WEP network
      Serial.print(".");
      delay(500); 
      j++;
    } 
    j=0;
  }
  //fine connessione wifi   
  DateTime now = rtc.now(); 
  char buf1[] = "hh:mm";
  Serial.print("orario aggiornato: ");
  Serial.println(now.toString(buf1));
  //thingspeak
  statusCode = ThingSpeak.readMultipleFields(weatherStationChannelNumber);
   if(statusCode == 200)
    {
      // Fetch the stored data
      float tempesterna = ThingSpeak.getFieldAsFloat(field[0]); // Field 1
      float umidi = ThingSpeak.getFieldAsFloat(field[1]); // Field 2      
      dtostrf(tempesterna, 2, 1, temperatura);
      dtostrf(umidi, 2, 1, umidita);
      Serial.print("temperatura esterna: ");
      Serial.println (tempesterna);
      Serial.print("umidita: ");
      Serial.println (umidita);
      //Serial.println("umidità " + String(umidita));
      }
    else{
      Serial.println("Problem reading channel. HTTP error code " + String(statusCode)); 
    }
    if (P.displayAnimate()) 
    P.displayZoneText(1, buf1 , PA_LEFT, P.getSpeed(), P.getPause(), PA_NO_EFFECT, PA_NO_EFFECT);   
    if (P.displayAnimate())
    P.displayZoneText(0, temperatura , PA_LEFT, P.getSpeed(), P.getPause(), PA_SCROLL_DOWN, PA_SCROLL_DOWN);
    if (P.displayAnimate())
    P.displayZoneText(0, umidita , PA_LEFT, P.getSpeed(), P.getPause(), PA_SCROLL_DOWN, PA_SCROLL_DOWN);  
  //ZONE INTENSITA
  //Display.setIntensity(0, 10);
  //Display.setIntensity(1, 10);
}

```

La lentezza del codice è data che ogni volta deve interrogare thing speak ( ancora non ho implementato la lettura del dht 22 per la temp interna ) e quindi ovviamente ci mette tempo. é vero che posso ovviare a questo facendo una lettura ogni tot minuti con la funzione mills però vorrei sapere se è possibile fermare il programma fino a quando non si completano tutte le animazioni ( visto che l'ultima con la variabile umidità nemmeno parte ).

---

<div class="post-metadata">

**Author:** ![Datman](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/datman/32/219519_2.png) [@Datman](https://forum.arduino.cc/u/Datman)\
**Post date:** [October 17, 2024, 8:42am UTC](https://forum.arduino.cc/t/md-parola-e-display-max7219/1312065/4 "2024-10-17T08:42:29Z")

</div>

Ciao  
Per cortesia, se togli quelle 80 righe vuote inutili il codice diventa più compatto e più facilmente leggibile, senza dover scorrere continuamente.

Grazie.  
Gianluca

---

<div class="post-metadata">

**Author:** ![Marco.biondo13](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/marco.biondo13/32/1098801_2.png) [@Marco.biondo13](https://forum.arduino.cc/u/Marco.biondo13)\
**Post date:** [October 17, 2024, 8:56am UTC](https://forum.arduino.cc/t/md-parola-e-display-max7219/1312065/5 "2024-10-17T08:56:15Z")

</div>

ok, ho modificato il codice togliendo le righe vuote...

---

<div class="post-metadata">

**Author:** ![Marco.biondo13](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/marco.biondo13/32/1098801_2.png) [@Marco.biondo13](https://forum.arduino.cc/u/Marco.biondo13)\
**Post date:** [October 22, 2024, 6:56pm UTC](https://forum.arduino.cc/t/md-parola-e-display-max7219/1312065/6 "2024-10-22T18:56:49Z")

</div>

buongiorno, ho risolto modificando il codice cosi:

```arduino
switch (stato) {  

      case 0 :
        if (P.displayAnimate()) {
         P.displayZoneText(0, temperaturaest , PA_LEFT, P.getSpeed(), P.getPause(), PA_SCROLL_LEFT, PA_SCROLL_DOWN);
         stato= stato +1;
        Serial.print("caso=0 ");
        }
        break ;
       case 1 :
        if (P.displayAnimate()) {
        P.displayZoneText(0, umiditaest , PA_LEFT, P.getSpeed(), P.getPause(), PA_SCROLL_LEFT, PA_SCROLL_DOWN);
        stato=stato +1;
        Serial.print("caso=1 ");
        }
        break;

        case 2 :
        if (P.displayAnimate()) {
        P.displayZoneText(0, temperaturaint , PA_LEFT, P.getSpeed(), P.getPause(), PA_SCROLL_LEFT, PA_SCROLL_DOWN);
        stato=stato +1;
        Serial.print("caso=2 ");
        }
        break;

        case 3 :
        if (P.displayAnimate()) {
        P.displayZoneText(0, umiditaint , PA_LEFT, P.getSpeed(), P.getPause(), PA_SCROLL_LEFT, PA_SCROLL_DOWN);
        stato=0;
        Serial.print("caso=3 ");
        }
        break;  
    }

```

adesso però ho un altro problema: dovrei stampare il simbolo dei gradi (c°) e anche il simbolo della casa per discriminare se se la temperatura si riferisce all'interno o all'esterno. Come posso fare?  
ps: ho riportato solo il pezzo di codice modificato per evitare ripetizioni inutili.

---

<div class="post-metadata">

**Author:** ![andreaber](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/andreaber/32/1013044_2.png) [@andreaber](https://forum.arduino.cc/u/andreaber)\
**Post date:** [October 22, 2024, 7:55pm UTC](https://forum.arduino.cc/t/md-parola-e-display-max7219/1312065/7 "2024-10-22T19:55:23Z")

</div>

ciao...forse [QUESTO](https://github.com/vasco65/md_max72xx-font-designer) ti può aiutare

---

<div class="post-metadata">

**Author:** ![system](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/system/32/1140315_2.png) [@system](https://forum.arduino.cc/u/system)\
**Post date:** [April 20, 2025, 7:56pm UTC](https://forum.arduino.cc/t/md-parola-e-display-max7219/1312065/8 "2025-04-20T19:56:00Z")

</div>

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.
