Mi da questo Problema..qualcuno sa spiegarmi come mai?
Fury_man:
Mi da questo Problema..qualcuno sa spiegarmi come mai?
Puoi postare uno schema dei collegamenti che hai fatto? E anche il codice che hai caricato.
Questo è il codice che ho inserito. ho usato un arduino nano, un integrato max 7219 e un display a 7 segmenti a 3 cifre a catodo comune, ho collegato i rispettivi pin del display al max7219 e poi al nano datain al pin 12, clk al pin 11 e il load al pin 10 di arduino come scritto nel codice. una volta caricato non funziona, il led rimane spento..
//State change detection (edge detection)
//We always have to include the library
#include "LedControl.h"
/*
Now we need a LedControl to work with.
pin 12 is connected to the DataIn
pin 11 is connected to the CLK
pin 10 is connected to LOAD
We have only a single MAX72XX.
*/
LedControl lc=LedControl(12,11,10,1);
/* The circuit:
- buttonpin attached to pin 2 from +5V
- buttonreset attached to pin 4 from +5V
- 10 kilohm resistor attached to pin 2&4 from ground
*/
// this constant won't change:
const int buttonPin = 2;// the pin that the pushbutton is attached to
const int buttonReset = 4;// the pin that the buttonreset is attached to
// Variables will change:
int contatore = 0; // counter for the number of button presses
int buttonState = 0; // current state of the button
int lastButtonState = 0; // previous state of the button
int unita = 0;
int decine = 0;
int centinaia = 0;
int tmp=0;
void setup(){
/*
The MAX72XX is in power-saving mode on startup,
we have to do a wakeup call
*/
lc.shutdown(0,false);
/* Set the brightness to a medium values */
lc.setIntensity(0,8);
/* and clear the display */
lc.clearDisplay(0);
// initialize the button pin as a input:
pinMode(buttonPin, INPUT);
pinMode(buttonReset, INPUT);
Serial.begin(9600);
}
void loop() {
if (digitalRead(buttonPin)==HIGH){
contatore++;
tmp=contatore;
unita=tmp%10;
tmp=tmp/10;
decine=tmp%10;
centinaia=tmp/10;
Serial.print(centinaia);
Serial.print("-");
Serial.print(decine);
Serial.print("-");
Serial.print(unita);
Serial.println(" ");
lc.setDigit(0,2,(byte)centinaia,false);
lc.setDigit(0,1,(byte)decine,false);
lc.setDigit(0,0,(byte)unita,false);
}
if(contatore>999) contatore=0; // Ritorna a zero quando deve contare 1000
delay(200);
if (digitalRead(buttonReset) == HIGH){
(contatore = 0);
lc.clearDisplay(0);
}
}
Se hai fatto i collegamenti come lo schema allegato (lascia stare il buzzer) deve almeno accendersi. Comunque io ho usato il modulo già assemblato (vedi foto allegata), posta qualche foto/schema del tuo circuito.
Questo è il circuito, scusate per il disegno pessimo, comunque ho notato che nello schema con il buzzer non hai collegato i piedini D10, D11 e D12 ma bensì altri anche se nel programma sta citato che hai utilizzato quei piedini li d10, d11 e d12. Non riesco proprio a capire dove sbaglio... ah i pulsanti non li ho disegnati ma sono stati collegati al piedino D2 e D3.
Ma la resistenza tra ISET e il positivo, ce l'hai messa ?
Ahm no, non ho messo la resistenza tra iset e positivo.. di quanto gliela devo mettere? E a cosa serve la
Resistenza su quel pin?
Fury_man:
comunque ho notato che nello schema con il buzzer non hai collegato i piedini D10, D11 e D12 ma bensì altri anche se nel programma sta citato che hai utilizzato quei piedini li d10, d11 e d12.
scusa ma ho fatto talmente tante prove/modifiche a quel circuito che non ricordo più quale è quello definitivo : domani controllo poi ti dico.
Flaviano
Fammi sapere perché davvero non so come farlo funzionare
Fury_man:
Questo è il circuito, scusate per il disegno pessimo, comunque ho notato che nello schema con il buzzer non hai collegato i piedini D10, D11 e D12 ma bensì altri anche se nel programma sta citato che hai utilizzato quei piedini li d10, d11 e d12. Non riesco proprio a capire dove sbaglio... ah i pulsanti non li ho disegnati ma sono stati collegati al piedino D2 e D3.
devi usare moduli già assemblati se cerchi di far funzionare i max 7219 con fili volanti il più delle volte non funzionano anche se tutto sembra collegato correttamente
uso quei moduli con i led inseriti (non saldati) e se voglio mettere moduli led più grandi o di colore diverso è fattibile,
Ciao Elrospo avevo gia pensato di acquistare un modulo come hai detto tu, solo che a me servirebbe pilotare solo 1 display a 3cifre e per il progetto che vorrei fare sono molto ristretto con gli spazi
Fury_man:
Fammi sapere perché davvero non so come farlo funzionare
Scusa il ritardo.
Lascia stare lo schema dei collegamenti del post #34. Quelli giusti sono:
buttonPin = D2 (pulsante del contatore)
buttonReset = D4 (pulsante di reset)
CLK = D9
LOAD-CS = D10
DIN = D12
Con questo codice DEVE funzionare:
//State change detection (edge detection)
//We always have to include the library
#include "LedControl.h"
/*
Now we need a LedControl to work with.
pin 12 is connected to the DataIn
pin 9 is connected to the CLK
pin 10 is connected to LOAD
We have only a single MAX72XX.
*/
LedControl lc=LedControl(12,9,10,1);
/* The circuit:
- buttonpin attached to pin 2 from +5V
- buttonreset attached to pin 4 from +5V
- 10 kilohm resistor attached to pin 2&4 from ground
*/
// this constant won't change:
#define buttonPin 2 // the pin that the pushbutton is attached to
#define buttonReset 4 // the pin that the buttonreset is attached to
// Variables will change:
int contatore = 0; // counter for the number of button presses
int buttonState = 0; // current state of the button
int lastButtonState = 0; // previous state of the button
int unita = 0;
int decine = 0;
int centinaia = 0;
int tmp=0;
void setup(){
/*
The MAX72XX is in power-saving mode on startup,
we have to do a wakeup call
*/
lc.shutdown(0,false);
/* Set the brightness to a medium values */
lc.setIntensity(0,8);
/* and clear the display */
lc.clearDisplay(0);
// initialize the button pin as a input:
pinMode(buttonPin, INPUT);
pinMode(buttonReset, INPUT);
}
void loop() {
// read the pushbutton input pin:
buttonState = digitalRead(buttonPin);
// compare the buttonState to its previous state
if (buttonState != lastButtonState) {
// if the state has changed, increment the counter
if (buttonState == HIGH) {
// if the current state is HIGH then the button went from off to on:
contatore++;
tmp=contatore;
unita=tmp%10;
tmp=tmp/10;
decine=tmp%10;
centinaia=tmp/10;
lc.setDigit(0,2,(byte)centinaia,false);
lc.setDigit(0,1,(byte)decine,false);
lc.setDigit(0,0,(byte)unita,false);
}
// Delay a little bit to avoid bouncing
delay(50);
// save the current state as the last state, for next time through the loop
lastButtonState = buttonState;
}
// if the buttonreset is pressed reset the buttonpushcounter
if (digitalRead(buttonReset) == HIGH){
(contatore = 0);
lc.clearDisplay(0);
}
}
Fammi sapere.
Flaviano
Flavi71:
Scusa il ritardo.
Lascia stare lo schema dei collegamenti del post #34. Quelli giusti sono:
buttonPin = D2 (pulsante del contatore)
buttonReset = D4 (pulsante di reset)
CLK = D9
LOAD-CS = D10
DIN = D12Con questo codice DEVE funzionare:
//State change detection (edge detection)
//We always have to include the library
#include "LedControl.h"
/*
Now we need a LedControl to work with.
pin 12 is connected to the DataIn
pin 9 is connected to the CLK
pin 10 is connected to LOAD
We have only a single MAX72XX.
*/
LedControl lc=LedControl(12,9,10,1);
/* The circuit:
- buttonpin attached to pin 2 from +5V
- buttonreset attached to pin 4 from +5V
- 10 kilohm resistor attached to pin 2&4 from ground
*/
// this constant won't change:
#define buttonPin 2 // the pin that the pushbutton is attached to
#define buttonReset 4 // the pin that the buttonreset is attached to
// Variables will change:
int contatore = 0; // counter for the number of button presses
int buttonState = 0; // current state of the button
int lastButtonState = 0; // previous state of the button
int unita = 0;
int decine = 0;
int centinaia = 0;
int tmp=0;
void setup(){
/*
The MAX72XX is in power-saving mode on startup,
we have to do a wakeup call
/
lc.shutdown(0,false);
/ Set the brightness to a medium values /
lc.setIntensity(0,8);
/ and clear the display */
lc.clearDisplay(0);
// initialize the button pin as a input:
pinMode(buttonPin, INPUT);
pinMode(buttonReset, INPUT);
}
void loop() {
// read the pushbutton input pin:
buttonState = digitalRead(buttonPin);
// compare the buttonState to its previous state
if (buttonState != lastButtonState) {
// if the state has changed, increment the counter
if (buttonState == HIGH) {
// if the current state is HIGH then the button went from off to on:
contatore++;
tmp=contatore;
unita=tmp%10;
tmp=tmp/10;
decine=tmp%10;
centinaia=tmp/10;
lc.setDigit(0,2,(byte)centinaia,false);
lc.setDigit(0,1,(byte)decine,false);
lc.setDigit(0,0,(byte)unita,false);
}
// Delay a little bit to avoid bouncing
delay(50);
// save the current state as the last state, for next time through the loop
lastButtonState = buttonState;
}
// if the buttonreset is pressed reset the buttonpushcounter
if (digitalRead(buttonReset) == HIGH){
(contatore = 0);
lc.clearDisplay(0);
}
}
Fammi sapere. Flaviano
Ciao Flavi71 scusami per il ritardo, allora ho aggiunto una resistenza al pin ISET del max7219 ogni volta che premo il pulsante comincia a contare solo che lo stato iniziale del display è spento come premo si accende.. come faccio a farlo stare acceso al primo stato? ho notato anche che conta dall'ultima cifra.. mi spiego meglio: invece di contare 001, 002.. mi conta 100,200 e cosi via come risolvo?
GRAZIE per il tempo che mi stai dando
Fammi sapere
FuryMan
Risolto per quanto riguarda il conteggio sfalsato ho invertito i pin del dig1 e del dig3 cosi' parte dal primo a contare.. non riesco a risolvere il problema del display spento all'inizio
Perché non usi solo l'ATmega328p? Io ho fatto un timer per la magnetoterapia di Nuova Elettronica con solo quello e due display:
ATMEGA 328P - 1MHz
Pin
I/O0 PD0 2: KA
I/O1 PD1 3: KB
I/O2 PD2 4: KC
I/O3 PD3 5: KD
I/O4 PD4 6: KE
I/O5 PD5 11: KF
I/O6 PD6 12: KG
I/O7 PD7 13: Kdp
I/O8 PB0 14: Uscita fCk.
I/O9 PB1 15: Anodo comune: *Alto(diretto):A2*; Basso(via PNP):A1
I/O10 PB2 16: Anodo comune: *Alto(diretto):A1*; Basso(via PNP):A2
I/O11 PB3 17: MOSI -
I/O12 PB4 18: MISO -
I/O13 PB5 19: SCK -
XTAL1 PB6 9: ---
XTAL2 PB7 10: ---
A0 PC0 23: Potenziometro per l'impostazione del tempo.
A1 PC1 24: BUZZER PASSIVO
A2 PC2 25: OUT al transistor NPN pilota del relè.
A3 PC3 26:
A4 PC4 27:
A5 PC5 28:
1: Reset
7, 20: Vcc
8, 22: GND
21: ARef
*/
// Il tempo parte all'accensione (avvio=0) o dopo l'impostazione della durata (avvio=1)?
#define avvio 1
#include <EEPROM.h>
unsigned int durata;
unsigned int durata0;
byte DS1; // Dip Switch 1: può valere 0 o 1.
byte DS2; // Dip Switch 2: può valere 0 o 1.
byte adesso; // millis() in minuti
byte minRimanenti=0;
byte minRimanentiP=250; // Valore precedente di minRimanenti.
byte z=0;
byte n=0;
byte d=0; // decine di minuti
byte u=0; // unità di minuti
byte dpon=0; // 1: dp acceso (pin basso per anodo comune).
unsigned long millis0=0; // Valore di millis()per il conteggio del tempo dall'impostazione della durata.
unsigned long t=0; // Valore di millis() per il tempo a disposizione per l'impostazione della durata.
unsigned long t1=0; // Valore di millis() per il rilevamento della richiesta di pausa.
byte b=0; // Contatore dei Bip di avviso della pausa.
byte c=0; // Contatore dei Bip di avviso dello spegnimento anticipato.
unsigned long t2=0; // Valore di millis() per il rilevamento della richiesta di spegnimento.
byte potAZero=0;
byte potA60=0;
byte endSetup=0;
void displ();
void mpx();
void setup()
{
// durata=600000*(((PINB&((1<<PB4)|(1<<PB3)))>>3)+1); // Con dip switch verso +V.
// Legge i due dip switch su PB4 (peso 16) e PB3 (peso 8) e divide per 8, ottenendo valori tra 0 e 3;
// somma 1, ottenendo valori tra 1 e 4, poi moltiplica per 10, ottenendo 10...40 minuti.
// Moltiplicando per 60.000 ottiene i millisecondi.
pinMode(0,OUTPUT); // KA
pinMode(1,OUTPUT); // KB
pinMode(2,OUTPUT); // KC
pinMode(3,OUTPUT); // KD
pinMode(4,OUTPUT); // KE
pinMode(5,OUTPUT); // KF
pinMode(6,OUTPUT); // KG
pinMode(7,OUTPUT); // Kdp
pinMode(8,OUTPUT); // fCk out (abilitata con AVR Burn-O-Mat).
pinMode(9,OUTPUT); // Anodo comune: Basso:A1; Alto:A2.
pinMode(10,OUTPUT); // Anodo comune: Basso:A2; Alto:A1.
pinMode(A0,INPUT); // Potenziometro per l'impostazione del tempo.
pinMode(A1,OUTPUT); // Buzzer
pinMode(A2,OUTPUT); // OUT
// pinMode(A3,OUTPUT); // Periodo 2000ms (non serve più, perché ho attivato l'uscita fCk sull'8).
digitalWrite(A2, HIGH); // Eccita il relè.
OSCCAL=161; // Era 162 e la frequenza di clock era 1,004MHz;
// Con 161, la frequenza di clock è circa 998,5kHz.
/*
Serial.begin(9600);
Serial.print("OSCCAL=");
Serial.print(OSCCAL,DEC);
Serial.end();
*/
delay(100);
t=millis();
millis0=millis();
if(EEPROM.read(0)==255) // Se c'è scritto 255, vuol dire che non è stata mai scritta oppure è stata
{ // "azzerata" a 255, perciò prosegue con l'impostazione della durata.
while(millis()-t<4000)
{
analogRead(A0); durata=1+analogRead(A0)/17.2;
d = int(durata/10); // DECINE DI MINUTI
u = durata%10; // UNITA' DI MINUTI
mpx(); // Visualizza d e u.
if(durata!=durata0) {durata0=durata; t=millis();}
}
tone(A1,880,60); // E' finito il tempo per l'impostazione della durata.
}
else // Se non c'è scritto 255, significa che l'apparecchio è stato messo in pausa e il valore rappresenta i minuti residui.
{
durata=EEPROM.read(0);
EEPROM.update(0,255); // "Azzera" il contenuto della cella a 255.
d = int(durata/10); // DECINE DI MINUTI
u = durata%10; // UNITA' DI MINUTI
tone(A1,880,200); // Poiché ha caricato il tempo residuo in memoria, emette 3 toni: LA4-LA5-LA4.
delay(250);
tone(A1,440,200);
delay(250);
tone(A1,880,250);
mpx(); // Visualizza d e u.
}
if(analogRead(A0)<15) potAZero=1;
if(analogRead(A0)>1010) potA60=1;
#if avvio==1 // Se avvio=1,
millis0=millis(); // la durata parte dopo l'impostazione della durata,
#endif // altrimenti millis0 vale già 0 e la durata parte dall'accensione.
endSetup=1;
}
void loop()
{
adesso=int((millis()-millis0)/60000);
// Calcola e visualizza i minuti rimanenti (a ogni passaggio commuta Display 1 / Display 2):
minRimanenti=durata-adesso;
d = int(minRimanenti/10); // DECINE DI MINUTI
u = minRimanenti%10; // UNITA' DI MINUTI
mpx(); // visualizza d e u.
if(analogRead(A0)>15) potAZero=0;
if(analogRead(A0)<1010) potA60=0;
// Controlla se il tempo è scaduto:
if(adesso>=durata)
{
digitalWrite(10,LOW); // Toglie alimentazione al display 1.
digitalWrite(9,HIGH); // Alimenta il display 2.
PORTD=0b00001110; // Stop: Visualizza " F."
digitalWrite(A2,LOW); // Spegne. I caratteri restano visualizzati finché i condensatori sull'alimentazione sono carichi.
while(1==1);
}
// RICHIESTA DI PAUSA?
if(potAZero==0) // Se il potenziometro non sta a 0 dall'accensione
{
if(analogRead(A0)>15) t1=millis(); // Se il potenziometro non è al minimo, aggiorna costantemente t1.
else // Se viene messo al massimo, non aggiorna più t1.
{
digitalWrite(10,LOW); // Toglie alimentazione al display 1.
digitalWrite(9,HIGH); // Alimenta il display 2.
PORTD=0b00001100; // Visualizza " P."
while(analogRead(A0)<=15 && millis()-t1<3200)
{
if(b==0) {tone(A1,1760,100); b=1;} // Se il potenziometro sta al minimo e b è ancora 1, fa un primo Bip e incrementa b a 1.
if(b==1 && (millis()-t1)>=1000) {tone(A1,1760,100); b=2;} // Dopo 1 secondo fa un altro Bip e incrementa b.
if(b==2 && (millis()-t1)>=2000) {tone(A1,1760,100); b=3;} // Dopo 1 secondo fa un altro Bip e incrementa b.
if(millis()-t1>3000) // Se per 3 secondi il potenziometro sta al minimo, va in pausa.
{
EEPROM.update(0,minRimanenti); // Salva il tempo residuo.
digitalWrite(A2,LOW); // Spegne. I caratteri restano visualizzati finché i condensatori sull'alimentazione sono carichi.
while(1==1);
}
}
b=0; // Se il potenziometro viene mosso prima dello scadere dei 3 secondi, azzera b.
}
}
// RICHIESTA DI SPEGNIMENTO?
if(potA60==0) // Se il potenziometro non sta a 60 dall'accensione
{
if(analogRead(A0)<1010) t2=millis(); // Se il potenziometro non è al massimo, aggiorna costantemente t2.
else // Se viene messo al massimo, non aggiorna più t2.
{
digitalWrite(10,LOW); // Toglie alimentazione al display 1.
digitalWrite(9,HIGH); // Alimenta il display 2.
// PORTD=0b00001001; // Visualizza " H."
PORTD=0b00010010; // Visualizza " S."
while(analogRead(A0)>=1010 && millis()-t2<3200)
{
if(c==0) {tone(A1,880,100); c=1;} // Se il potenziometro sta al massimo e c è ancora 1, fa un primo Bip e incrementa c a 1.
if(c==1 && (millis()-t2)>=1000) {tone(A1,880,100); c=2;} // Dopo 1 secondo fa un altro Bip e incrementa c.
if(c==2 && (millis()-t2)>=2000) {tone(A1,880,100); c=3;} // Dopo 1 secondo fa un altro Bip e incrementa c.
if(millis()-t2>3000) // Se per 3 secondi il potenziometro sta al massimo, spegne tutto.
{
digitalWrite(A2,LOW); // Spegne. I caratteri restano visualizzati finché i condensatori sull'alimentazione sono carichi.
while(1==1);
}
}
c=0; // Se il potenziometro viene mosso prima dello scadere dei 3 secondi, azzera c.
}
}
} // END loop
// --------------------------------------------------
void mpx()
{
if(!z) // z=0: A1 (Display delle decine)
{
digitalWrite(7,HIGH); // Spegne il punto, che deve accendersi solo sul display 2 nei secondi pari.
digitalWrite(9,LOW); // Toglie alimentazione al display 2.
n=d; // Prepara le decine di minuti per essere visualizzate.
displ(); // Pilota il display.
digitalWrite(10,HIGH); // Alimenta il Display 1.
delay(5); // mpx a circa 100Hz (5+5=10mS)
}
else // z=1: A2 (Display delle unità)
{
digitalWrite(10,LOW); // Toglie alimentazione al display 1.
n=u; // Prepara le unità di minuti per essere visualizzate.
displ(); // Pilota il display.
digitalWrite(9,HIGH); // Alimenta il display 2.
// Fa lampeggiare il punto del display 2:
if(endSetup && (millis()-millis0)%2000<1000) digitalWrite(7,LOW); // Se è un secondo pari, accende il punto.
else digitalWrite(7,HIGH); // Se è un secondo pari, lo spegne.
delay(5);
}
z=1-z;
}
void displ()
{
switch(n) // Anodo comune
// D 76543210
{ // dpGFEDCBA (0: segmento acceso)
case 0: {PORTD|=0b01000000; // Spegne i segmenti a 1
PORTD&=0b11000000;} // Accende i segmenti a 0
break;
case 1: {PORTD|=0b01111001;
PORTD&=0b11111001;}
break;
case 2: {PORTD|=0b00100100;
PORTD&=0b10100100;}
break;
case 3: {PORTD|=0b00110000;
PORTD&=0b10110000;}
break;
case 4: {PORTD|=0b00011001;
PORTD&=0b10011001;}
break;
case 5: {PORTD|=0b00010010;
PORTD&=0b10010010;}
break;
case 6: {PORTD|=0b00000010;
PORTD&=0b10000010;}
break;
case 7: {PORTD|=0b01111000;
PORTD&=0b11111000;}
break;
case 8: {PORTD|=0b00000000;
PORTD&=0b10000000;}
break;
case 9: {PORTD|=0b00010000;
PORTD&=0b10010000;}
break;
}
}
L'essenziale che ti serve è questo:
d = int(minRimanenti/10); // DECINE DI MINUTI
u = minRimanenti%10; // UNITA' DI MINUTI
mpx(); // visualizza d e u.
// Tu, invece, calcolerai centinaia, decine e unità. Nel multiplexer, poi, userai per z i valori 1, 2 e 3, scrivendo alla fine, al posto di z=1-z:
z+=1; if(z==4) z=1;
void mpx()
{
if(!z) // z=0: A1 (Display delle decine)
{
digitalWrite(7,HIGH); // Spegne il punto, che deve accendersi solo sul display 2 nei secondi pari.
digitalWrite(9,LOW); // Toglie alimentazione al display 2.
n=d; // Prepara le decine di minuti per essere visualizzate.
displ(); // Pilota il display.
digitalWrite(10,HIGH); // Alimenta il Display 1.
delay(5); // mpx a circa 100Hz (5+5=10mS)
}
else // z=1: A2 (Display delle unità)
{
digitalWrite(10,LOW); // Toglie alimentazione al display 1.
n=u; // Prepara le unità di minuti per essere visualizzate.
displ(); // Pilota il display.
digitalWrite(9,HIGH); // Alimenta il display 2.
// Fa lampeggiare il punto del display 2:
if(endSetup && (millis()-millis0)%2000<1000) digitalWrite(7,LOW); // Se è un secondo pari, accende il punto.
else digitalWrite(7,HIGH); // Se è un secondo pari, lo spegne.
delay(5);
}
z=1-z;
}
void displ()
{
switch(n) // Anodo comune
// D 76543210
{ // dpGFEDCBA (0: segmento acceso)
case 0: {PORTD|=0b01000000; // Spegne i segmenti a 1
PORTD&=0b11000000;} // Accende i segmenti a 0
break;
case 1: {PORTD|=0b01111001;
PORTD&=0b11111001;}
break;
case 2: {PORTD|=0b00100100;
PORTD&=0b10100100;}
break;
case 3: {PORTD|=0b00110000;
PORTD&=0b10110000;}
break;
case 4: {PORTD|=0b00011001;
PORTD&=0b10011001;}
break;
case 5: {PORTD|=0b00010010;
PORTD&=0b10010010;}
break;
case 6: {PORTD|=0b00000010;
PORTD&=0b10000010;}
break;
case 7: {PORTD|=0b01111000;
PORTD&=0b11111000;}
break;
case 8: {PORTD|=0b00000000;
PORTD&=0b10000000;}
break;
case 9: {PORTD|=0b00010000;
PORTD&=0b10010000;}
break;
}
}
Grazie Datman sembra molto interessante ma vorrei portare a termine un progetto alla volta, aspetto la risposta di Flavi71 per quanto riguarda il display spento all’inizio e non capisco come mai ..
E' semplice: nel setup() viene eseguito:
lc.clearDisplay(0);
perciò il display rimane senza alcuna scritta. Se preferisci, subito dopo il clear fagli scrivere "0". Probabilmente devi scrivere così:
lc.setDigit(0,0,0,false);