Ciao,stavo testando questa libreria con un codice semplice,ma riscontro questo problema:
quando decrementa il valore del timer ( decremento 1" ),le cifre del display rimanngono accese solo per +/- ad occhio solo 100/200ms.
In poche parole il timer si decrementa,ma tra un valore e l'altro si spegono i digit.
Qualcuno ha avuto il mio stesso problema,oppure è un bugs della libreria ??
Utilizzo arduino uno r3,2digit 7 segmenti anodo comune
Grazie
Link Libreria :
Ciao...posta il codice che stai utilizzando.
//
// Gestione Librerie
//
#include "SevenSeg.h"
SevenSeg disp (5,6,7,8,9,10,11); // Definisco i 7 Segmenti [a,b,c,d,e,f,g]
const int numOfDigits =2; // Numero di Digit 7 Segmenti
int digitPins [numOfDigits]={A0,A1}; // Gestione Anodo || Catodo Comune
//
// Gestione I/O
//
const int Led = 13; // Led fine Timer
//
// Gestione Variabili
//
int timer = 60;
//
// Gestione Setup Iniziale solo al primo Boot
//
void setup() {
pinMode(Led, OUTPUT);
disp.setDigitPins ( numOfDigits , digitPins );
//disp.setCommonCathode() // Solo per catodo comune
disp.setDutyCycle(100); // Taratura Luminosità ( Valore 0-100 )
}
//
// Gestione Programma Principale
//
void loop() {
if (timer!=0) {
timer--;
disp.write(timer);
delay(1000);
}
else {
disp.write("--");
digitalWrite(Led,HIGH);
delay(500);
disp.write(" ");
digitalWrite(Led,LOW);
delay(500);
}
}
//
// ##################################### End #####################################
//
ciao...allora da quel che ho capito, se connetti direttamente il display ad arduino senza multiplexarlo, alla SevenSeg NON piace il delay() in quanto deve sempre scrivere...infatti la libreria ti da altri metodi oltre al setDutyCycle() per gestire il refresh...insomma alla fine devi usare millis()...prova questo:
//
// Gestione Librerie
//
#include "SevenSeg.h"
SevenSeg disp (5, 6, 7, 8, 9, 10, 11); // Definisco i 7 Segmenti [a,b,c,d,e,f,g]
const int numOfDigits = 2; // Numero di Digit 7 Segmenti
int digitPins [numOfDigits] = {A0, A1}; // Gestione Anodo || Catodo Comune
//
// Gestione I/O
//
const int Led = 13; // Led fine Timer
//
// Gestione Variabili
//
int timer = 60;
unsigned long mymillis;
boolean change = false;
//
// Gestione Setup Iniziale solo al primo Boot
//
void setup() {
mymillis = millis();
pinMode(Led, OUTPUT);
disp.setDigitPins ( numOfDigits , digitPins );
//disp.setCommonCathode(); // Solo per catodo comune
disp.setDutyCycle(100); // Taratura Luminosità ( Valore 0-100 )
}
//
// Gestione Programma Principale
//
void loop() {
if (timer > 0) {
disp.write(timer);
}
else if (timer == 0) {
if ((millis() - mymillis) < 500 && !change) {
disp.write("--");
digitalWrite(Led, HIGH);
}
if (millis() - mymillis < 500 && change) {
disp.write(" ");
digitalWrite(Led, LOW);
}
if (millis() - mymillis >= 500) {
change = !change;
mymillis = millis();
}
}
if (millis() - mymillis >= 1000 && timer > 0) {
timer--;
mymillis = millis();
}
}
//
// ##################################### End #####################################
//
Orso2001,avevi ragione.
Adesso funziona tutto.
Grazie 1000