Bonjour @ ts,
Fin juillet je suis venu sur le forum pour essayer un 1er montage avec une carte Arduino pour notre club.
"decompte 60s pour départ de course"
Grâce @ "dfgh" et "lesept" j'ai pu arriver à ce que je voulais faire.
Du coup comme ce montage ne sert qu'au début de la course, je me suis dit: "pourquoi ne pas essayer d'optimiser cette carte et pourquoi pas lancer un deuxième programme une fois que le décompte est fini."
Je pensais mettre en place un système qui afficherait la vitesse de passage des voitures à un endroit bien précis.
Ma 1ère question est de savoir si je peux faire cela:
-démarrer mon décompte.
-une fois terminé démarrer le "compteur de vitesse" en utilisant les mêmes afficheurs.
Soit manuellement en commandant l'un ou l'autre des programmes pour boutons poussoirs, ou automatiquement une fois le décompte terminé.
Si cela est possible, ma deuxième question serait de savoir comment à partir de deux entrées de l'arduino, qui proviendraient de 2 contacts qui de déclenchent ( à une distance connue, je pensais à un mètre par exemple) au passage d'une voiture, calculer la vitesse et l'afficher sur mes deux afficheurs 7 segments (en binaire, puisque c'est ce que j'utilise pour le décompte).
J'allais oublier: la vitesse à afficher sera entre 00 et 99 km/h
Merci par avance pour vos réponses.
Cordialement,
Didier
Voici le code que j'ai pour le décompte (à titre d'info)
//BCD 1
const int hexa_A = 4;
const int hexa_B = 5;
const int hexa_C = 6;
const int hexa_D = 7;
//BCD 2
const int d_hexa_A = 8;
const int d_hexa_B = 9;
const int d_hexa_C = 10;
const int d_hexa_D = 11;
unsigned long chrono=0;
int n=60; //Setting initial value of n to 0
int d1;
int d2;
int bp = 2; //bouton poussoir
int state = 0;
int memo_state=0;
int ledVerte = 13;
int ledOrange1 = A1;
int ledOrange2 = A2;
int ledOrange3 = A3;
int ledRouge = 3;
void setup()
{ Serial.begin(250000);
for(int f=3;f<=13;f++){pinMode(f,OUTPUT);}
for(int g=1;g<=3;g++){pinMode(g,OUTPUT);}
pinMode(bp,INPUT_PULLUP);//doit faire contact avec GND lorsqu'appuyé
}
void loop()
{
if (!digitalRead(bp)) //s'i y a eu un appui sur BP
{ delay(500); //anti rebonds
memo_state = !memo_state; //appui mémorisé jusqu'à un nouvel appui qui annulera
Serial.println(memo_state);
}
if(memo_state) //ctrl si le BP à été appuyé
{ //oui, on va ajuster la boucle sur 1 seconde
chrono=millis(); //on initialise le chrono pour la boucle
n--;
if(n>3)
{
digitalWrite(ledRouge, HIGH);
}
if(n==3)
{
digitalWrite(ledRouge, LOW);
digitalWrite(ledOrange1, HIGH);
}
if(n==2)
{
digitalWrite(ledOrange2, HIGH);
}
if(n==1)
{
digitalWrite(ledOrange3, HIGH);
}
if(n==0)
{
digitalWrite(ledOrange1, LOW);
digitalWrite(ledOrange2, LOW);
digitalWrite(ledOrange3, LOW);
digitalWrite(ledVerte, HIGH);
}
if(n==-1)
{
n=60;
memo_state = !memo_state; //on stoppe le decomptage
delay(5000);
digitalWrite(ledVerte, LOW);
}
d1=n%10; // This will divide n by 10 and the remainder will be stored in d1
d2=n/10; // This will divide n by 10 and the value before decimal will be stored in d2
gestion_afficheur(1,d1);
gestion_afficheur(2,d2);Serial.println(n);
while((millis()-chrono)<1000){;}//on ajuste la durée de la boucle pour 1 seconde
}
}
void gestion_afficheur(byte digit,int chiffre)
{
switch (chiffre)
{
case 0:// D C B A //chiffre 0
actionDigital(digit,0,0,0,0);
break ;
case 1:// D C B A //chiffre 1
actionDigital(digit,0,0,0,1);
break ;
case 2:// D C B A //chiffre 2
actionDigital(digit,0,0,1,0);
break ;
case 3:// D C B A //chiffre 3
actionDigital(digit,0,0,1,1);
break ;
case 4:// D C B A //chiffre 4
actionDigital(digit,0,1,0,0);
break ;
case 5:// D C B A //chiffre 5
actionDigital(digit,0,1,0,1);
break ;
case 6:// D C B A //chiffre 6
actionDigital(digit,0,1,1,0);
break ;
case 7:// D C B A //chiffre 7
actionDigital(digit,0,1,1,1);
break ;
case 8:// D C B A //chiffre 8
actionDigital(digit,1,0,0,0);
break ;
case 9:// D C B A //chiffre 9
actionDigital(digit,1,0,0,1);
break ;
default:
break;
}
}
// D C B A
void actionDigital(byte digit, byte un,byte deux,byte trois,byte quatre)
{ if(digit==1){
digitalWrite(hexa_D, un); // D, est la pinoche 7
digitalWrite(hexa_C, deux); // C, est la pinoche 6
digitalWrite(hexa_B, trois); // B, est la pinoche 5
digitalWrite(hexa_A, quatre); // A, est la pinoche 4
}
else{
if(digit==2){
digitalWrite(hexa_D+4, un); // D, est la pinoche 11
digitalWrite(hexa_C+4, deux); // C, est la pinoche 10
digitalWrite(hexa_B+4, trois); // B, est la pinoche 9
digitalWrite(hexa_A+4, quatre); // A, est la pinoche 8
}
}
}