Buongiorno a tutti,
Sto utilizzando, come da titolo, un display 7segmenti a 4digit (catodo comune), senza l'utilizzo di alcuna libreria, in quanto vorrei togliermi la soddisfazione di programmare il tutto per intero.
Il mio problema è che fino a quando utilizzo il multiplexing (con un delay di 1ms) per scrivere ad esempio il numero 23, non ci sono problemi.
Il problema sorge quando (ad esempio con un ciclo) provo ad incrementare le unità, introducendo un delay di (ad esempio) 1000ms: le decine rimangono accese mentre le unità incrementano lampeggiando con un blink di 1000ms.
Vorrei evitare questo brutto inconveniente ma non saprei come fare.
Vi includo le funzioni che ho scritto per realizzare il tutto, ed il codice del loop, giusto per farvi capire meglio la situazione.
Grazie a tutti in anticipo, Davide.
void NUMEROeDIGIT (int Numero_Inserito, int Digit_Inserito) {
if ((Numero_Inserito>-1&&Numero_Inserito<10)&&(Digit_Inserito>0&&Digit_Inserito<5)){
switch (Numero_Inserito) {
case 0: ZERO();
break;
case 1: UNO();
break;
case 2: DUE();
break;
case 3: TRE();
break;
case 4: QUATTRO();
break;
case 5: CINQUE();
break;
case 6: SEI();
break;
case 7: SETTE();
break;
case 8: OTTO();
break;
case 9: NOVE();
break;
} //dove UNO, DUE, ecc, sono funzioni che accendono i relativi led sui segmenti del numero
switch (Digit_Inserito) {
case 1:
digitalWrite (comune1, LOW);
digitalWrite (comune2, HIGH);
digitalWrite (comune3, HIGH);
digitalWrite (comune4, HIGH);
break;
case 2:
digitalWrite (comune1, HIGH);
digitalWrite (comune2, LOW);
digitalWrite (comune3, HIGH);
digitalWrite (comune4, HIGH);
break;
case 3:
digitalWrite (comune1, HIGH);
digitalWrite (comune2, HIGH);
digitalWrite (comune3, LOW);
digitalWrite (comune4, HIGH);
break;
case 4:
digitalWrite (comune1, HIGH);
digitalWrite (comune2, HIGH);
digitalWrite (comune3, HIGH);
digitalWrite (comune4, LOW);
break;
}
}
}
void NUMERO (int decine, int unita) {
if (decine == 0) {
NUMEROeDIGIT(unita,1);
delay(1);
NUMEROeDIGIT(decine,2);
delay(1);
}
else
NUMEROeDIGIT(unita,1);
delay(1);
NUMEROeDIGIT(decine,2);
delay(1);
}
void loop() {
for (int a=0;a<10;a++) {
NUMERO (2,a);
delay(1000);
}
}
P.S. : Spero di essere stato il più chiaro possibile.