ho un problema con il suo utilizzo. in pratica voglio fare un countdown vero passandogli un tot di secondi trasformo il tempi in formatto mm:ss e lo visualizzzo sul dispaly. il mio problema è che il timer dopo ogni secondo che passa blinka per aggiornarsi. io vorrei cercare di limitare il blink e rendere più visible i numeri scritti ma non capisco dove sbaglio. questo è il codice
// -----------------------------------------------------------------
// Definisco la mappatura tra pin e segmenti
// -----------------------------------------------------------------
int digit1 = 7; // 7Segment = PIN 12 - Arduino PWM 7: accende il primo digit
int segA = 6; // 7Segment = PIN 11 - Arduino PIN 6
int segF = 5; // 7Segment = PIN 10 - Arduino PIN 5
int digit2 = 4; // 7Segment = PIN 09 - Arduino PWM 4: accende il secondo digit
int digit3 = 3; // 7Segment = PIN 08 - Arduino PWM 3: accende il terzo digit
int segB = 2; // 7Segment = PIN 07 - Arduino PIN 2
int digit4 = 8; // 7Segment = PIN 06 - Arduino PWM 8: accende il quarto digit
int segG = 9; // 7Segment = PIN 05 - Arduino PIN 9
int segC = 10; // 7Segment = PIN 04 - Arduino PIN 10
int segDP = 11; // 7Segment = PIN 03 - Arduino PIN 11
int segD = 12; // 7Segment = PIN 02 - Arduino PIN 12
int segE = 13; // 7Segment = PIN 01 - Arduino PIN 13
#define DIGIT_ON LOW
#define DIGIT_OFF HIGH
#define SEGMENT_ON HIGH // Catodo comune
#define SEGMENT_OFF LOW
#define DISPLAY_BRIGHTNESS 20000
int Tempo=15;
void setup()
{
// Imposto tutti i pin come output
pinMode(segA, OUTPUT);
pinMode(segB, OUTPUT);
pinMode(segC, OUTPUT);
pinMode(segD, OUTPUT);
pinMode(segE, OUTPUT);
pinMode(segF, OUTPUT);
pinMode(segG, OUTPUT);
pinMode(segDP, OUTPUT);
// Pin relativi all'elemento
pinMode(digit1, OUTPUT);
pinMode(digit2, OUTPUT);
pinMode(digit3, OUTPUT);
pinMode(digit4, OUTPUT);
// Spengo tutti gli elementi
digitalWrite(digit1, DIGIT_OFF);
digitalWrite(digit2, DIGIT_OFF);
digitalWrite(digit3, DIGIT_OFF);
digitalWrite(digit4, DIGIT_OFF);
Conteggia();
}
void Conteggia()
{
do
{
Calcola(Tempo);
delay(1000);
Tempo=Tempo-1;
}
while(Tempo>0);
// Spengo tutti gli elementi
digitalWrite(digit1, DIGIT_OFF);
digitalWrite(digit2, DIGIT_OFF);
digitalWrite(digit3, DIGIT_OFF);
digitalWrite(digit4, DIGIT_OFF);
}
void loop()
{
}
void Calcola(int TempoInSecondi)
{
int TotMinuti;
int MinutiA;
int MinutiB;
int TotSecondi;
int SecondiA;
int SecondiB;
TotMinuti = (int) (TempoInSecondi/60);
TotSecondi= TempoInSecondi - (TotMinuti*60);
if (TotMinuti < 10)
{
MinutiA=0;
}
else
{
MinutiA=TotMinuti/10;
}
MinutiB=TotMinuti-(MinutiA*10);
SecondiA=TotSecondi/10;
SecondiB=TotSecondi-(SecondiA*10);
Numero(MinutiA,1);
Numero(MinutiB,2);
Numero(SecondiA,3);
Numero(SecondiB,4);
}
void Numero(int numero, int digit)
{
// Accendo il digit corrispondente alla lettera da scrivere
digitalWrite(digit1, (digit==1) ? DIGIT_ON : DIGIT_OFF);
digitalWrite(digit2, (digit==2) ? DIGIT_ON : DIGIT_OFF);
digitalWrite(digit3, (digit==3) ? DIGIT_ON : DIGIT_OFF);
digitalWrite(digit4, (digit==4) ? DIGIT_ON : DIGIT_OFF);
switch (numero)
{
case 0:
digitalWrite(segA, SEGMENT_ON);
digitalWrite(segB, SEGMENT_ON);
digitalWrite(segC, SEGMENT_ON);
digitalWrite(segD, SEGMENT_ON);
digitalWrite(segE, SEGMENT_ON);
digitalWrite(segF, SEGMENT_ON);
digitalWrite(segG, SEGMENT_OFF);
break;
case 1:
digitalWrite(segA, SEGMENT_OFF);
digitalWrite(segB, SEGMENT_ON);
digitalWrite(segC, SEGMENT_ON);
digitalWrite(segD, SEGMENT_OFF);
digitalWrite(segE, SEGMENT_OFF);
digitalWrite(segF, SEGMENT_OFF);
digitalWrite(segG, SEGMENT_OFF);
break;
case 2:
digitalWrite(segA, SEGMENT_ON);
digitalWrite(segB, SEGMENT_ON);
digitalWrite(segC, SEGMENT_OFF);
digitalWrite(segD, SEGMENT_ON);
digitalWrite(segE, SEGMENT_ON);
digitalWrite(segF, SEGMENT_OFF);
digitalWrite(segG, SEGMENT_ON);
break;
case 3:
digitalWrite(segA, SEGMENT_ON);
digitalWrite(segB, SEGMENT_ON);
digitalWrite(segC, SEGMENT_ON);
digitalWrite(segD, SEGMENT_ON);
digitalWrite(segE, SEGMENT_OFF);
digitalWrite(segF, SEGMENT_OFF);
digitalWrite(segG, SEGMENT_ON);
break;
case 4:
digitalWrite(segA, SEGMENT_OFF);
digitalWrite(segB, SEGMENT_ON);
digitalWrite(segC, SEGMENT_ON);
digitalWrite(segD, SEGMENT_OFF);
digitalWrite(segE, SEGMENT_OFF);
digitalWrite(segF, SEGMENT_ON);
digitalWrite(segG, SEGMENT_ON);
break;
case 5:
digitalWrite(segA, SEGMENT_ON);
digitalWrite(segB, SEGMENT_OFF);
digitalWrite(segC, SEGMENT_ON);
digitalWrite(segD, SEGMENT_ON);
digitalWrite(segE, SEGMENT_OFF);
digitalWrite(segF, SEGMENT_ON);
digitalWrite(segG, SEGMENT_ON);
break;
case 6:
digitalWrite(segA, SEGMENT_ON);
digitalWrite(segB, SEGMENT_OFF);
digitalWrite(segC, SEGMENT_ON);
digitalWrite(segD, SEGMENT_ON);
digitalWrite(segE, SEGMENT_ON);
digitalWrite(segF, SEGMENT_ON);
digitalWrite(segG, SEGMENT_ON);
break;
case 7:
digitalWrite(segA, SEGMENT_ON);
digitalWrite(segB, SEGMENT_ON);
digitalWrite(segC, SEGMENT_ON);
digitalWrite(segD, SEGMENT_OFF);
digitalWrite(segE, SEGMENT_OFF);
digitalWrite(segF, SEGMENT_OFF);
digitalWrite(segG, SEGMENT_OFF);
break;
case 8:
digitalWrite(segA, SEGMENT_ON);
digitalWrite(segB, SEGMENT_ON);
digitalWrite(segC, SEGMENT_ON);
digitalWrite(segD, SEGMENT_ON);
digitalWrite(segE, SEGMENT_ON);
digitalWrite(segF, SEGMENT_ON);
digitalWrite(segG, SEGMENT_ON);
break;
case 9:
digitalWrite(segA, SEGMENT_ON);
digitalWrite(segB, SEGMENT_ON);
digitalWrite(segC, SEGMENT_ON);
digitalWrite(segD, SEGMENT_ON);
digitalWrite(segE, SEGMENT_OFF);
digitalWrite(segF, SEGMENT_ON);
digitalWrite(segG, SEGMENT_ON);
break;
case 10: // Tutto spento
digitalWrite(segA, SEGMENT_OFF);
digitalWrite(segB, SEGMENT_OFF);
digitalWrite(segC, SEGMENT_OFF);
digitalWrite(segD, SEGMENT_OFF);
digitalWrite(segE, SEGMENT_OFF);
digitalWrite(segF, SEGMENT_OFF);
digitalWrite(segG, SEGMENT_OFF);
break;
}
// Piccolo ritardo
delayMicroseconds(DISPLAY_BRIGHTNESS);
digitalWrite(digit1, DIGIT_OFF);
digitalWrite(digit2, DIGIT_OFF);
digitalWrite(digit3, DIGIT_OFF);
digitalWrite(digit4, DIGIT_OFF);
}