Projet Stade de Foot

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; }
  }
}

Quel est la question ou ton soucis?

Bonjour,

Une bonne base de travail utile pour tous:

Faire un wokwi de ton projet (code + schéma).
Comme celui là par exemple

Aprés on pourra mieux discuter je pense

A suivre.

Bonjour,

  • Il y a un point virgule en trop ici
    void clearLEDs(); {
    idem ici
    void zero(); {
    etc.
    idem void add(); {

  • Il manque un } à la fin de la fonction void pickDigit(int x)
    idem void pickNumber(int x)

  • Il y a deux fois les mêmes instructions dans void pickDigit(int x)

  • clearLEDs est défini deux fois

  • add est défini comme int et comme fonction

  • A1 et A2 sont déjà définis, ne pas les utiliser comme #define

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.