HC7Sec Lib

Display MAX7219 a 7 segmenti da 8 caratteri con la scheda ESP8266/Wemos D1 Mini per visualizzare del testo

Nell’ultimo post abbiamo visto come collegare un display MAX7219 da 8 caratteri alla scheda wemos D1 mini e visualizzare dei numeri.

In questo post invece voglio farvi vedere come potremo usare lil display per visualizzare dei brevi (massimo 8 caratteri) messaggi di testo. Ovviamente con delle limitazioni dettate dalla natura del display pensato principalmente per visualizzare numeri però il risultato è simpatico, non sempre magnifico ma simpatico…

Vi lascio il codice che come sempre è commentato:

#include "LedControl.h"

// MAX7219 Pin e Configurazioni
#define dinPin     D8
#define clkPin     D7
#define csPin      D6
#define numDevices  1   // Un controller MAX7219 da 8 cifre
#define dispAddr    0   // I dispositivi MAX7219 sono numerati a partire da 0

LedControl led_disp = LedControl(dinPin, clkPin, csPin, numDevices);

// Array di tutti i possibili caratteri
const int arysz = 52;
char letters[arysz] {'A','a','B','b','C','c','D','d','E','e','F','f','G','g','H','h','I','i','J','j','K','k','L','l','M','m','N','n','O','o','P','p','Q','q','R','r','S','s','T','t','U','u','V','v','W','w','X','x','Y','y','Z','z'};
byte value[arysz]{0x77,0x7D,0x7F,0x1F,0x4E,0x0D,0x7E,0x3D,0x4F,0x6f,0x47,0x47,0x5E,0x7B,0x37,0x17,0x30,0x10,0x3C,0x38,0x37,0x17,0x0E,0x06,0x55,0x55,0x15,0x15,0x7E,0x1D,0x67,0x67,0x73,0x73,0x77,0x05,0x5B,0x5B,0x46,0x0F,0x3E,0x1C,0x27,0x23,0x3F,0x2B,0x25,0x25,0x3B,0x33,0x6D,0x6D};

byte toPrint[8];

byte retChar(char wantedval){
  int wantedpos;
  for (int i=0; i < arysz; i++) {
   if (wantedval == letters[i]) {
     wantedpos = i;
     return value[i];
   }
  }
}

void retString(String str, byte toPrint[]){
  int str_len = str.length() + 1;
  char char_array[str_len];
  String char_values[str_len];  
   
  str.toCharArray(char_array, str_len);
  for (int i = 0; i < str_len-1 ; i++) {
    char_values[i] = retChar(char_array[i]);
    toPrint[i] = retChar(char_array[i]);;
    //Serial.print(char_array[i]); Serial.print(" -> "); Serial.println(retChar(char_array[i]));
  } 
  
  for (int i = 0; i <= 7; i++){
    int x = 7 - i;
    Serial.print("i: "+ i); Serial.print(" x: "+ i); Serial.println(toPrint[x]);
    led_disp.setRow(dispAddr, i, toPrint[x]);
  }
 
}

void setup() { 
  
  Serial.begin(9600);
  // inizializza il dispositivo MAX7219
  led_disp.shutdown(dispAddr, false);   // riattivare il MAX7219 dalla modalità di risparmio energetico
  led_disp.setIntensity(dispAddr, 15);   // imposta il livello di luminosità (0-15)
  led_disp.clearDisplay(0);      // cancella registro display
  
}

void loop() {
  
    String str[] = {"Arduino"};               // Array che contiene i testi da visuallizzare di massimo 8 caratteri
    retString(str[0], toPrint);               // Chiamo la funzione per la visualizzazione
    delay(3000);                              // Attendo 3 secondi
    scrollDigits();
    led_disp.clearDisplay(0);                 // cancella registro display
                 
}

La funzione retString è quella che realmente scrive il testo quindi basterà chiamarla in questo modo

String str[] = {"Arduino"};               // Array che contiene i testi da visuallizzare di massimo 8 caratteri
retString(str[0], toPrint);               // Chiamo la funzione per la visualizzazione

ricordandosi che la stringa non può essere più lunga di 8caratteri.

Buon codice a tutti!

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Torna su