Bonjour à tous,
je suis assez novice en la matière et j'ai commencé par m'attaquer à un affichage LCD(IC2) que je ne suis toujours pas arrivé à lui faire afficher quoi que ce soit.
Suite à ma déception je me sui attaqué à mon affichage de 4 digits a 7 segments avec anodes communes.
j'ai voulu réaliser l'affichage d'un crono allant de 0 seconde à 59min 59sec avec la meilleures précision possible.
je vous avoue que j'y ai passer quelques heures lol. mais voilà le résultat.
Ma question est, s'il y en a parmi vous qui on le temps d'analyser mon code, y a t'il un moyen encore plus simple d'y arriver?
Merci d'avance et bonne journée
#define c1 10 // anode Commun 1 premier digit depuis la droite
#define c2 11 // anode Commun 2
#define c3 12 // anode Commun 3
#define c4 13 // anode Commun 3
#define led1 2 // segment a
#define led2 3 // segment b
#define led3 4 // segment c
#define led4 5 // segment d
#define led5 6 // segment e
#define led6 7 // segment f
#define led7 8 // segment g
#define led8 9 // segment point
int digits[10][7] =
{ { 0, 0, 0, 0, 0, 0, 1 }, // = 0
{ 1, 0, 0, 1, 1, 1, 1 }, // = 1
{ 0, 0, 1, 0, 0, 1, 0 }, // = 2
{ 0, 0, 0, 0, 1, 1, 0 }, // = 3
{ 1, 0, 0, 1, 1, 0, 0 }, // = 4
{ 0, 1, 0, 0, 1, 0, 0 }, // = 5
{ 0, 1, 0, 0, 0, 0, 0 }, // = 6
{ 0, 0, 0, 1, 1, 1, 1 }, // = 7
{ 0, 0, 0, 0, 0, 0, 0 }, // = 8
{ 0, 0, 0, 0, 1, 0, 0 } // = 9
};
unsigned long duree; // controle des secondes
unsigned long durees; // controle des minutes
// d est le digit a afficher: 0..9
void digit(int d) // d canche avec éa fonction Affiche
{
digitalWrite(led1, digits[d][0]);
digitalWrite(led2, digits[d][1]);
digitalWrite(led3, digits[d][2]);
digitalWrite(led4, digits[d][3]);
digitalWrite(led5, digits[d][4]);
digitalWrite(led6, digits[d][5]);
digitalWrite(led7, digits[d][6]);
}
// fonction qui affiche les quatre digits en alternance entre les unités et les decimal
void Affiche(int dec, int unit, int minute, int dminute)
{
digit(unit); // Affiche les secondes
digitalWrite(led8, HIGH);
digitalWrite(c1, HIGH);
delay(5);
digitalWrite(c1, LOW);
digit(dec); // Affiche les dizaines de seconde
digitalWrite(c2, HIGH);
delay(5);
digitalWrite(c2, LOW);
digit(minute); // Affiche les minutes
digitalWrite(led8, LOW); //alume le point séparation min sec
digitalWrite(c3, HIGH);
delay (5);
digitalWrite(led8, HIGH);
digitalWrite(c3, LOW);
digit(dminute); // affiche les dizaine de minute
digitalWrite(c4, HIGH);
delay (5);
digitalWrite(c4, LOW);
}
void setup() // ouvre les ports en output
{
Serial.begin(9600);
int i=2;
for(i=2;i<14;i++)
{
pinMode(i,OUTPUT);
digitalWrite(i,LOW);
}
}
void loop() {
int a=0;
int b=0;
int c=0;
int e=0;
for(e=0;e<6;e++) // incrément des dizaines de minute
{
for(c=0;c<10;c++) // incrément des minutes
{
durees = millis();
for(b=0;b<6;b++) // incrément des dizaines de seconde
{
for(a=0;a<10;a++) // incrément secondes
{ duree = millis();
delayMicroseconds(6880);
while ( (millis() - duree) < 990)
Affiche(b, a, c, e); // affichage pendans une seconde.
// Serial.println (millis()-duree); pour controler que 1 sec. dure 1000msec
} // Fin incrément secondes
} // Fin icrément dizaines de seconde
//Serial.println (millis()-durees); pour ajuster durée de la minute
while ( (millis() - durees) < 59900)
Affiche(b-1, a-1, c, e); // affichage avec rattrapage du temps.
delay(9);
//Serial.println (millis()-durees); // controle que 1min dure 60000 msec
} // Fin incrément minutes
} // Fin icrément dizaines de minute
}// Fin de boucle