Bonjour,
Je souhaite réaliser pour l'anniversaire de mon fils un “circuit” de petites voitures HotWheels.
Il marcherait de la manière suivante:
1/ 4 voitures au départ et chaque voiture est sur une piste différente.
2/ appuie sur un bouton qui déclenche un servomoteur et "lache" les voitures et déclenchement d'un chronomètre
3/ les voitures roulent vers l'arrivée.
4/ à l arrivée, chaque piste à une cellule photoélectrique qui permet 2 choses
--> afficher sur son digit 7 segment pour afficher la place de chaque piste (ex: voiture sur piste 2 a gagné, la voiture de la piste 4 est deuxième etc...); (chaque piste a son propre digit assigné)
--> arrêter le chronomètre. les temps de chaque voiture seraient afficher sur un écran qui afficherait ceci:
voiture 2 / WINNER / Temps
voiture 4 / 2 eme / Temps / Intervalle vs temps de la gagnante
etc...
5/ au bout de 10sec, la course est finie (que les 4 voitures soient arrivées ou pas), tout est remis a zero et le servomoteur reprend sa position pour un nouveau depart.
J ai déjà construit MECANIQUEMENT le système de départ (me reste a brancher et coder le servomoteur) --> voir la photo.
Comme je suis débutant sur arduino (quelque souvenirs en C et C++ vieux de 20ans)... j ai regardé des Tutoriels et je construis mon circuit électronique et codage petit à petit.
J ai réussi a câbler et programmer 4 digits avec 4 cellules. J entends par là que quand je franchi une cellule, j affiche sur le digit le chiffre que j ai rentré. Je precise que les digits sont sur anode commune car Tinkercad met les cellules sur 0 par défaut. Quand j aurai fini, je prendrai a cathode commune et changerai les états HIGH et LOW.
Le challenge est que je n arrive pas à créer le code qui permettrait d afficher le classement des voitures.
Ci joint:
- La ligne de départ.
- mon schéma actuel avec 2 digits (anode commune car sur tinkercad les cellules sont par défaut à 0) et le code correspondant ci dessous
La question :
Comment savoir quelle est la voiture qui a franchi en premier la ligne ? d'un point de vue codage ...je n'y arrive pas ![]()
Pourriez vous m'aider?
/////////le code
/* affectation de la cellule*/
long cellPin1 = A0; /*cellule photo piste 1 sur broche analogique A0*/
long cellPin2 = A1; /*cellule photo piste 2 sur broche analogique A1*/
int capteurligne1; /* variable qui prendra l'etat de la cellule photoelectrique de la piste 1*
int capteurligne2; /* variable qui prendra l'etat de la cellule photoelectrique de la piste 2*/
/* affectation des ports de l'afficheur */
long ledPinA = 8;
long ledPinB = 9;
long ledPinC = 10;
long ledPinD = 2;
long ledPinE = 3;
long ledPinF = 5;
long ledPinG = 4;
long ledPinDP = 11;
/* branchements des digits sur les broches digitales*/
long d1 = 6; /* digit 1 sur broche 6*/
long d2 = 12;/* digit 1 sur broche 12*/
/* initialisation des sorties */
void setup()
/* de la cellule */
Serial.begin(9600); /* connection serie entre entrée analogique de la carte et le PC */
pinMode (cellPin1, INPUT);
pinMode (cellPin2, INPUT);
/* de l'afficheur */
pinMode (ledPinA, OUTPUT);
pinMode (ledPinB, OUTPUT);
pinMode (ledPinC, OUTPUT);
pinMode (ledPinD, OUTPUT);
pinMode (ledPinE, OUTPUT);
pinMode (ledPinF, OUTPUT);
pinMode (ledPinG, OUTPUT);
pinMode (ledPinDP, OUTPUT);
pinMode (d1, OUTPUT);
pinMode (d2, OUTPUT);
}
void loop()
{
capteurligne1 = digitalRead(cellPin1); /*lire valeur de la cellule piste 1 */
Serial.println(capteurligne1); /* debug pour verifier la valeur */
if (capteurligne1==HIGH)
{
digitalWrite (d1, HIGH);
afficherDigit1(); // donc on active le digit 1
afficher_1(); // digit1 affiche la valeur 1, il faudrait afficher le classement
delay(50);
}
capteurligne2 = digitalRead(cellPin2); /*lire valeur de la cellule piste 2*/
Serial.println(capteurligne2); /* debug pour verifier la valeur */
if (capteurligne2==HIGH)
{
digitalWrite (d2, HIGH);
afficherDigit2(); // donc on active le digit 2
afficher_2(); // digit1 affiche la valeur 2, il faudrait afficher le classement
delay(50);
}
}
void afficherDigit1()
{
digitalWrite (d1, HIGH);
digitalWrite (d2, LOW);
}
void afficherDigit2()
{
digitalWrite (d1,LOW);
digitalWrite (d2, HIGH);
}
void afficher_1()
{
digitalWrite (ledPinA, HIGH);
digitalWrite (ledPinB, LOW);
digitalWrite (ledPinC, LOW);
digitalWrite (ledPinD, HIGH);
digitalWrite (ledPinE, HIGH);
digitalWrite (ledPinF, HIGH);
digitalWrite (ledPinG, HIGH);
digitalWrite (ledPinDP, HIGH);
}
void afficher_2()
{
digitalWrite (ledPinA, LOW);
digitalWrite (ledPinB, LOW);
digitalWrite (ledPinC, HIGH);
digitalWrite (ledPinD, LOW);
digitalWrite (ledPinE, LOW);
digitalWrite (ledPinF, HIGH);
digitalWrite (ledPinG, LOW);
digitalWrite (ledPinDP, HIGH);
}
[img width=416 height=500]https://forum.arduino.cc/index.php?action=dlattach;topic=733065.0;attach=409210[/img]
