maxresdefault

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

Oggi vi mostrerò come utilizzare un display a 7 segmenti da 8 caratteri con la scheda ESP8266/Wemos D1 Mini per visualizzare dei numeri.

Il display che andremo a collegare alla nostra scheda Wemos D1 Mini è il seguente di cui vi lascio il link Amazon per l’eventuale acquisto.

HiLetgo 2pcs MAX7219 8 Bits Digital Segment LED Display Tube Module 5V/3.3V for Arduino 51/AVR/STM32

Per collegare lo schermo al Wemos utilizzeremo il seguente schema, molto semplice.

Sullo schermo sono presenti 5 collegamenti che andranno collegati alla scheda Wemos D1 Mini in questo modo:

SCHERMO Vcc -> Wemos D1 Mini 5V
SCHERMO GND -> Wemos D1 Mini Ground
SCHERMO Din -> Wemos D1 Mini Pin D8
SCHERMO CS -> Wemos D1 Mini Pin D6
SCHERMO CLK -> Wemos D1 Mini Pin D7

Una volta collegato come mostrato poco fà il display è pronto per essere utilizzato e quindi passiamo subito al codice:

#include <LedControl.h>  // Libreria per controllare il display MAX7219 7-segmenti

// 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

// crea un'interfaccia di controllo del display a LED
LedControl led_disp = LedControl(dinPin, clkPin, csPin, numDevices);

unsigned long Number;                    	// il numero che andremo a visualizzare
byte  digits[] = {0, 0, 0, 0, 0, 0, 0, 0};  // array che conterrà le cifre da visualizzare

unsigned long api_mtbs     = 180000;  // tempo tra le richieste, in MS. 60.000 mS = intervalli di 1 minuto
unsigned long api_lasttime = 0;       // ultima volta in cui si è verificata una richiesta


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, 8);   // imposta il livello di luminosità (0-15)
  led_disp.clearDisplay(dispAddr);      // cancella registro display

}

void loop() { 
  testDisplay();    // funzione che scrive dei numeri sul display
}

// mostra il numero sul display a 7 segmenti separando le
// singole cifre e inviandole al diplay LED appropriato
void displayDigits() {

  // separa le cifre dal numero
  digits[0] = (Number % 10);
  digits[1] = (Number / 10) % 10;
  digits[2] = (Number / 100) % 10;
  digits[3] = (Number / 1000) % 10;
  digits[4] = (Number / 10000) % 10;
  digits[5] = (Number / 100000) % 10;
  digits[6] = (Number / 1000000) % 10;
  digits[7] = (Number / 10000000) % 10;


  // tiene traccia della posizione della cifra nel numero che contiene la cifra più a sinistra (diversa da zero)
  // ad es .: numero = 474, cifre [7..0] = 00000474 cifra sinistra posizione diversa da zero = cifra [2]
  // se nel numero è presente una sola cifra, la posizione della cifra 0 è quella più a sinistra automaticamente
  byte leftDigit = 0;

  if (digits[7] > 0)
    leftDigit = 7;
  else if (digits[6] > 0)
    leftDigit = 6;
  else if (digits[5] > 0)
    leftDigit = 5;
  else if (digits[4] > 0)
    leftDigit = 4;
  else if (digits[3] > 0)
    leftDigit = 3;
  else if (digits[2] > 0)
    leftDigit = 2;
  else if (digits[1] > 0)
    leftDigit = 1;

  // se ci sono cifre da cancellare (a sinistra della cifra più a sinistra nel numero)
  // impostali come "spazio"
  if (leftDigit < 7) {
    for (int i = (leftDigit + 1); i <= 7; i++) {
      digits[i] = ' ';  // blank space character
    }
  }

  // scrive tutte le cifre sul display a 7 segmenti
  for (int i = 0; i <= 7; i++)
    led_disp.setChar(dispAddr, i, digits[i], false);

}

void testDisplay() {

  // verifica l'eliminazione dello o degli zero iniziali
  
  Number = 1;
  displayDigits(); // Mostra i dati
  delay(300);

  Number = 22;
  displayDigits(); // Mostra i dati
  delay(300);

  Number = 333;
  displayDigits(); // Mostra i dati
  delay(300);

  Number = 4444;
  displayDigits(); // Mostra i dati
  delay(300);

  Number = 55555;
  displayDigits(); // Mostra i dati
  delay(300);

  Number = 666666;
  displayDigits(); // Mostra i dati
  delay(300);

  Number = 7777777;
  displayDigits(); // Mostra i dati
  delay(300);

  Number = 88888888;
  displayDigits(); // Mostra i dati
  delay(300);
}

Il codice è commentato e quindi non credo ci saranno grossi problemi ad utilizzarlo e a capirlo ma in caso scrivetemi pure nei commenti.

Ok, per oggi è tutto e nel prossimo articolo vedremo invece come utilizzare il display MAX7219 a 7 segmenti da 8 caratteri con la scheda ESP8266/Wemos D1 Mini per scrivere lettere e testi!.

Buona giornata, alla prossima!

Lascia un commento

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

Torna su