Arduino – Modulo TM1638

Un modulo molto versatile e poco costoso (si trova a qualche euro sulla rete) utile per visualizzare numeri e scritte, dotato di 8 led e di 8 pulsanti è quello basato sull’integrato TM1638.

Tale integrato, a fronte di sole 3 linee di comando, è in grado di pilotare 8 display a 7 segmenti, 8 led (in alcuni casi a doppio colore) e ricevere l’input da 8 pulsanti, questo nella versione classica del modulo.

img_2160-01

Usarlo è piuttosto semplice, basta importare l’apposita libreria con un bel

#include <TM1638.h>

A questo punto si deve definire il nome del modulo da utilizzare nello sketch ed indicare su quali linee si attestano i controlli. Con questa linea identifichiamo con la classe TM1638 la variabile “module” indicando i pin di controllo

TM1638 module(4, 3, 2);

Il primo valore indica la linea DIO (DATA/IO) il CLK (CLOCK) ed il terzo la linea STR (STROBE). Il modulo necessita ovviamente di una alimentazione 5V e una massa.

E’ necessario inizializzare poi tale modulo indicando anche a che luminosità falo funzionare

module.setupDisplay(true,5);

con true accendiamo il modulo, con 5 indichiamo il 5° livello di luminosità (tra 0 e 7).

Ed ora i comandi principali

module.setLED(TM1638_COLOR_RED, x);
module.setLED(TM1638_COLOR_NONE, x);

La prima istruzione accende il led numero x (con x da 0 a 7) di colore rosso, la seconda lo spegne. Nel caso avessimo a disposizione un modulo con i led bicolore potremo utilizzare anche le istruzioni

module.setLED(TM1638_COLOR_GREEN, x);
module.setLED(TM1638_COLOR_GREEN + TM1638_COLOR_RED, x);

Per controllare tutti i led contemporaneamente in una sola istruzione

module.setLEDs(x);

dove x è una word con il byte meno significativo (più a destra) che controlla lo stato del rosso ed il secondo byte quello del verde. un 1 in un bit accende il led, uno 0 lo spegne.

Per cancellare tutti i display a 7 segmenti viene utile il comando

module.clearDisplay();

Per scrivere sui display ci vengono in aiuto alcuni comandi come

module.setDisplayToString(Stringa, 0b01010000);

In Stringa metteremo il testo da visualizzare mentre nel secondo parametro metteremo in quale posizione accendere (o non accendere) il punto decimale.

Per i numeri viene utile

module.setDisplayToDecNumber(Numero,PuntoDecimale,false);

In Numero ovviamente il numero da visualizzare, in PuntoDecimale la posizione dell’eventuale punto decimale e nell’ultimo parametro true se vogliamo visualizzare gli 0 prima del numero o false se non lo vogliamo.

Possiamo anche decidere di visualizzare in esadecimale con

module.setDisplayToHexNumber(Numero,PuntoDecimale,false);

o in binario

module.setDisplayToBinNumber(Numero,PuntoDecimale);

E’ addirittura possibile accendere singoli segmenti di ogni display, tenendo a mente di passare un array di byte alla funzione “setDisplay”. Ogni byte (dal primo all’ultimo) rappresenta un display ed ogni segmento un bit (compreso il punto decimale). Quindi un comando come questo

byte values[] = { 1, 2, 4, 8, 16, 32, 64, 128 };
module.setDisplay(values);

Darà come risultato questo

segsss1

Per leggere invece lo stato dei pulsanti si userà

module.getButtons();

Il risultato (byte) è l’insieme dei bit corrispondenti a ciascun tasto, da sinistra verso destra 1, 2, 4, 8, 16, 32, 64, 128
I tasti possono anche essere premuti contemporaneamente dando come risultato la somma dei singoli tasti.

La lettura di un pulsante è immediata, velocissima, quindi dobbiamo predisporre nel nostro sketch anche un controllo di “fine pressione” dei tasti prima di poter leggere un altro pulsante. Ad esempio

void WaitNoButtons() {
  while (module.getButtons() != 0) {
  }
}

Libreria: TMxxxx

Lascia un commento

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

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.