Salut,
Voici un minuteur minute et secondes que j'ai réussi à faire.
Je suis aussi débutant sur arduino.
J'utilise les sortie de 2à13 de mon arduino uno.
Malgré la précision de la fréquence de mon arduino, j'arrive à une précision de 2 msec après environ 40 heures.
#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] = //tableau des chiffres de 0 à 9 des segments à allumer
//si cathod commun inverser la valeur des segments
{ { 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
};
// 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);
}
unsigned long duree; // controle des secondes
unsigned long durees; // controle de la durée du cicle de 60min.
void setup() {
Serial.begin(9600);
int i=2;
for(i=2;i<14;i++)
{
pinMode(i,OUTPUT);
digitalWrite(i,LOW);
}
}
void loop() {
// put your main code here, to run repeatedly:
int temp=0;
durees=millis();
for(temp=0;temp<3600;temp++) // incrément secondes
{
duree=millis();
int secs=temp%60; //calcul le soldes des secondes de la valeur "temp"
int mins=temp/60; //calcul les minutes de la valeur "temp"
int secunit=secs%10; // calcul unités de seconde
int secdiz=(secs/10)%10; // calcul dizaines de seconde
int minunit=mins%10; // calcul unités de minute
int mindiz=(mins/10)%10; // calcul dizaines de minute
while ( (millis() - duree) < 991) // durée de la seconde
Affiche(secunit,secdiz, minunit, mindiz); // affichage pendans une seconde.
delayMicroseconds(6939); //ajustement de la durée de la seconde
}
Serial.println (millis()-durees); //affiche le temps réel après 60min.
}
Bonne chance