Bonjour ,
Le projet:
1 arduino mega 2560
2 capteur infrarouge
2 Afficheur 7segments 1digits 10broches Cathode commune
1 Afficheur 7 segments 4digits
1 bouton
Le but étant dès l'appuie du bouton ça lance un décomptes de 3 minutes, disons qu'il y a deux cotés donc 1capteur+1afficheur 1digits , dès que le capteur et détecter ça vient ajouter 1 sur les afficheur ect... jusqu'à 9 si le chrono et finis et qu'il n'y a pas égalité le temps s'arrête il suffit de rappuyer sur le bouton pour relancer une nouvelle partie si le score et égal alors 1 minutes et rajouter pour débattre la partie s'arrêtes a 4minutes étape égalité.
J'ai déja effectué ça ci-dessous mais je n'ai pas la suite ou même résoudre les problèmes
#include <TimerOne.h>
// Broches de l'afficheur 7 segments pour le premier afficheur
#define A1 22
#define B1 23
#define C1 24
#define D1 25
#define E1 26
#define F1 27
#define G1 28
#define DP1 29 // Point décimal 1
// Broches de l'afficheur 7 segments pour le deuxième afficheur
#define A2 30
#define B2 31
#define C2 32
#define D2 33
#define E2 34
#define F2 35
#define G2 36
#define DP2 37 // Point décimal 2
// Broches des capteurs
#define pinCapteur1 14
#define pinCapteur2 15
long n1 = 0; // Nombre pour le premier afficheur
long n2 = 0; // Nombre pour le deuxième afficheur
bool lastState1 = HIGH; // État précédent du capteur 1
bool lastState2 = HIGH; // État précédent du capteur 2
#define a 5
#define b 6
#define c 7
#define d 8
#define e 9
#define f 10
#define g 11
#define d1 A1
#define d2 A2
#define d3 A3
#define d4 A4
long n = 0;
int x = 100;
int count = 0;
int add;
void setup() {
{
pinMode(a, OUTPUT);
pinMode(b, OUTPUT);
pinMode(c, OUTPUT);
pinMode(d, OUTPUT);
pinMode(e, OUTPUT);
pinMode(f, OUTPUT);
pinMode(g, OUTPUT);
pinMode(d1, OUTPUT);
pinMode(d2, OUTPUT);
pinMode(d3, OUTPUT);
pinMode(d4, OUTPUT);
pinMode(A0, INPUT);
Timer1.initialize(100000);
Timer1.attachInterrupt( add );
}
{
// Initialisation des broches pour le premier afficheur
pinMode(A1, OUTPUT);
pinMode(B1, OUTPUT);
pinMode(C1, OUTPUT);
pinMode(D1, OUTPUT);
pinMode(E1, OUTPUT);
pinMode(F1, OUTPUT);
pinMode(G1, OUTPUT);
pinMode(DP1, OUTPUT);
// Initialisation des broches pour le deuxième afficheur
pinMode(A2, OUTPUT);
pinMode(B2, OUTPUT);
pinMode(C2, OUTPUT);
pinMode(D2, OUTPUT);
pinMode(E2, OUTPUT);
pinMode(F2, OUTPUT);
pinMode(G2, OUTPUT);
pinMode(DP2, OUTPUT);
// Configuration des capteurs en entrée avec résistance de tirage
pinMode(pinCapteur1, INPUT_PULLUP);
pinMode(pinCapteur2, INPUT_PULLUP);
// Initialisation du temporisateur avec une période de 100 ms
Timer1.initialize(100000);
Timer1.attachInterrupt(add);
}
}
void loop() {
while (digitalRead(A0) == LOW)
{
clearLEDs();
pickDigit(0);
pickNumber((n / 1000));
delay(5);
clearLEDs();
pickDigit(1);
pickNumber((n % 1000) / 100);
delay(5);
clearLEDs();
pickDigit(2);
pickNumber(n % 100 / 10);
delay(5);
clearLEDs();
pickDigit(3);
pickNumber(n % 10);
delay(5);
}
if (digitalRead(A0) == HIGH) { n = 0; count = 0; }
}
void pickDigit(int x) {
digitalWrite(d1, HIGH);
digitalWrite(d2, HIGH);
digitalWrite(d3, HIGH);
digitalWrite(d4, HIGH);
switch (x) {
case 0: digitalWrite(d1, LOW); break;
case 1: digitalWrite(d2, LOW); break;
case 2: digitalWrite(d3, LOW); break;
default: digitalWrite(d4, LOW); break;
digitalWrite(d1, HIGH);
digitalWrite(d2, HIGH);
digitalWrite(d3, HIGH);
digitalWrite(d4, HIGH);
switch (x) {
case 0: digitalWrite(d1, LOW); break;
case 1: digitalWrite(d2, LOW); break;
case 2: digitalWrite(d3, LOW); break;
default: digitalWrite(d4, LOW); break;
}
}
// Fonction pour choisir quel chiffre afficher sur le premier afficheur
void pickNumber1(int x){
switch (x){
case 0: zero(A1, B1, C1, D1, E1, F1, G1, DP1); break;
case 1: one(A1, B1, C1, D1, E1, F1, G1, DP1); break;
case 2: two(A1, B1, C1, D1, E1, F1, G1, DP1); break;
case 3: three(A1, B1, C1, D1, E1, F1, G1, DP1); break;
case 4: four(A1, B1, C1, D1, E1, F1, G1, DP1); break;
case 5: five(A1, B1, C1, D1, E1, F1, G1, DP1); break;
case 6: six(A1, B1, C1, D1, E1, F1, G1, DP1); break;
case 7: seven(A1, B1, C1, D1, E1, F1, G1, DP1); break;
case 8: eight(A1, B1, C1, D1, E1, F1, G1, DP1); break;
case 9: nine(A1, B1, C1, D1, E1, F1, G1, DP1); break;
}
}
// Fonction pour choisir quel chiffre afficher sur le deuxième afficheur
void pickNumber2(int x) {
switch (x) {
case 0: zero(A2, B2, C2, D2, E2, F2, G2, DP2); break;
case 1: one(A2, B2, C2, D2, E2, F2, G2, DP2); break;
case 2: two(A2, B2, C2, D2, E2, F2, G2, DP2); break;
case 3: three(A2, B2, C2, D2, E2, F2, G2, DP2); break;
case 4: four(A2, B2, C2, D2, E2, F2, G2, DP2); break;
case 5: five(A2, B2, C2, D2, E2, F2, G2, DP2); break;
case 6: six(A2, B2, C2, D2, E2, F2, G2, DP2); break;
case 7: seven(A2, B2, C2, D2, E2, F2, G2, DP2); break;
case 8: eight(A2, B2, C2, D2, E2, F2, G2, DP2); break;
case 9: nine(A2, B2, C2, D2, E2, F2, G2, DP2); break;
}
}
void pickNumber(int x) {
switch (x) {
default: zero(); break;
case 1: one(); break;
case 2: two(); break;
case 3: three(); break;
case 4: four(); break;
case 5: five(); break;
case 6: six(); break;
case 7: seven(); break;
case 8: eight(); break;
case 9: nine(); break;
}
void clearLEDs(); {
digitalWrite(a, LOW);
digitalWrite(b, LOW);
digitalWrite(c, LOW);
digitalWrite(d, LOW);
digitalWrite(e, LOW);
digitalWrite(f, LOW);
digitalWrite(g, LOW);
}
void zero(); {
digitalWrite(a, HIGH);
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, HIGH);
digitalWrite(e, HIGH);
digitalWrite(f, HIGH);
digitalWrite(g, LOW);
}
void one(); {
digitalWrite(a, LOW);
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, LOW);
digitalWrite(e, LOW);
digitalWrite(f, LOW);
digitalWrite(g, LOW);
}
void two(); {
digitalWrite(a, HIGH);
digitalWrite(b, LOW);
digitalWrite(c, HIGH);
digitalWrite(d, HIGH);
digitalWrite(e, HIGH);
digitalWrite(f, LOW);
digitalWrite(g, HIGH);
}
void three(); {
digitalWrite(a, HIGH);
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, HIGH);
digitalWrite(e, LOW);
digitalWrite(f, LOW);
digitalWrite(g, HIGH);
}
void four(); {
digitalWrite(a, LOW);
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, LOW);
digitalWrite(e, LOW);
digitalWrite(f, HIGH);
digitalWrite(g, HIGH);
}
void five(); {
digitalWrite(a, HIGH);
digitalWrite(b, HIGH);
digitalWrite(c, LOW);
digitalWrite(d, HIGH);
digitalWrite(e, LOW);
digitalWrite(f, HIGH);
digitalWrite(g, HIGH);
}
void six(); {
digitalWrite(a, HIGH);
digitalWrite(b, HIGH);
digitalWrite(c, LOW);
digitalWrite(d, HIGH);
digitalWrite(e, HIGH);
digitalWrite(f, HIGH);
digitalWrite(g, HIGH);
}
void seven(); {
digitalWrite(a, HIGH);
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, LOW);
digitalWrite(e, LOW);
digitalWrite(f, LOW);
digitalWrite(g, LOW);
}
void eight(); {
digitalWrite(a, HIGH);
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, HIGH);
digitalWrite(e, HIGH);
digitalWrite(f, HIGH);
digitalWrite(g, HIGH);
}
void nine(); {
digitalWrite(a, HIGH);
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, HIGH);
digitalWrite(e, LOW);
digitalWrite(f, HIGH);
digitalWrite(g, HIGH);
}
// Fonction pour éteindre tous les segments de l'afficheur
void clearLEDs(); {
digitalWrite(A1, HIGH);
digitalWrite(B1, HIGH);
digitalWrite(C1, HIGH);
digitalWrite(D1, HIGH);
digitalWrite(E1, HIGH);
digitalWrite(F1, HIGH);
digitalWrite(G1, HIGH);
digitalWrite(DP1, HIGH);
digitalWrite(A2, HIGH);
digitalWrite(B2, HIGH);
digitalWrite(C2, HIGH);
digitalWrite(D2, HIGH);
digitalWrite(E2, HIGH);
digitalWrite(F2, HIGH);
digitalWrite(G2, HIGH);
digitalWrite(DP2, HIGH);
}
// Fonctions pour afficher les chiffres sur les afficheurs
void zero(int A, int B, int C, int D, int E, int F, int G, int DP) {
digitalWrite(A, LOW);
digitalWrite(B, HIGH);
digitalWrite(C, HIGH);
digitalWrite(D, HIGH);
digitalWrite(E, HIGH);
digitalWrite(F, HIGH);
digitalWrite(G, HIGH);
digitalWrite(DP, LOW);
}
void one(int A, int B, int C, int D, int E, int F, int G, int DP) {
digitalWrite(A, LOW);
digitalWrite(B, LOW);
digitalWrite(C, HIGH);
digitalWrite(D, HIGH);
digitalWrite(E, LOW);
digitalWrite(F, LOW);
digitalWrite(G, LOW);
digitalWrite(DP, LOW);
}
void two(int A, int B, int C, int D, int E, int F, int G, int DP) {
digitalWrite(A, LOW);
digitalWrite(B, HIGH);
digitalWrite(C, HIGH);
digitalWrite(D, LOW);
digitalWrite(E, HIGH);
digitalWrite(F, HIGH);
digitalWrite(G, LOW);
digitalWrite(DP, HIGH);
}
void three(int A, int B, int C, int D, int E, int F, int G, int DP) {
digitalWrite(A, LOW);
digitalWrite(B, HIGH);
digitalWrite(C, HIGH);
digitalWrite(D, HIGH);
digitalWrite(E, HIGH);
digitalWrite(F, LOW);
digitalWrite(G, LOW);
digitalWrite(DP, HIGH);
}
void four(int A, int B, int C, int D, int E, int F, int G, int DP) {
digitalWrite(A, LOW);
digitalWrite(B, LOW);
digitalWrite(C, HIGH);
digitalWrite(D, HIGH);
digitalWrite(E, LOW);
digitalWrite(F, LOW);
digitalWrite(G, HIGH);
digitalWrite(DP, HIGH);
}
void five(int A, int B, int C, int D, int E, int F, int G, int DP) {
digitalWrite(A, LOW);
digitalWrite(B, HIGH);
digitalWrite(C, LOW);
digitalWrite(D, HIGH);
digitalWrite(E, HIGH);
digitalWrite(F, LOW);
digitalWrite(G, HIGH);
digitalWrite(DP, HIGH);
}
void six(int A, int B, int C, int D, int E, int F, int G, int DP) {
digitalWrite(A, LOW);
digitalWrite(B, HIGH);
digitalWrite(C, LOW);
digitalWrite(D, HIGH);
digitalWrite(E, HIGH);
digitalWrite(F, HIGH);
digitalWrite(G, HIGH);
digitalWrite(DP, HIGH);
}
void seven(int A, int B, int C, int D, int E, int F, int G, int DP) {
digitalWrite(A, LOW);
digitalWrite(B, HIGH);
digitalWrite(C, HIGH);
digitalWrite(D, HIGH);
digitalWrite(E, LOW);
digitalWrite(F, LOW);
digitalWrite(G, LOW);
digitalWrite(DP, LOW);
}
void eight(int A, int B, int C, int D, int E, int F, int G, int DP) {
digitalWrite(A, LOW);
digitalWrite(B, HIGH);
digitalWrite(C, HIGH);
digitalWrite(D, HIGH);
digitalWrite(E, HIGH);
digitalWrite(F, HIGH);
digitalWrite(G, HIGH);
digitalWrite(DP, HIGH);
}
void nine(int A, int B, int C, int D, int E, int F, int G, int DP)
{
digitalWrite(A, LOW);
digitalWrite(B, HIGH);
digitalWrite(C, HIGH);
digitalWrite(D, HIGH);
digitalWrite(E, HIGH);
digitalWrite(F, LOW);
digitalWrite(G, HIGH);
digitalWrite(DP, HIGH);
}
void add(); {
bool currentState1 = digitalRead(pinCapteur1); // Lire l'état actuel du capteur 1
bool currentState2 = digitalRead(pinCapteur2); // Lire l'état actuel du capteur 2
if (currentState1 == LOW && lastState1 == HIGH) { // Vérifier si le capteur 1 vient d'être activé
n1++;
if (n1 > 9) {
n1 = 0; // Revenir à 0 après 9
}
}
lastState1 = currentState1; // Mettre à jour l'état précédent du capteur 1
if (currentState2 == LOW && lastState2 == HIGH) { // Vérifier si le capteur 2 vient d'être activé
n2++;
if (n2 > 9) {
n2 = 0; // Revenir à 0 après 9
}
}
lastState2 = currentState2; // Mettre à jour l'état précédent du capteur 2
// Mettre à jour le chiffre affiché sur le premier afficheur
clearLEDs();
pickNumber1(n1);
// Mettre à jour le chiffre affiché sur le deuxième afficheur
pickNumber2(n2);
count ++;
if (count == 10) {
count = 0; n++;
if (n == 10000) { n = 0; }
}
}