Problème de plusieurs conditions + Besoin d'aide + Projet de terminale STI2D SIN

Bonjour/Bonsoir,
J’aurais besoin d’énormément d’aide pour mon projet de terminale.
En gros le projet consiste à faire 2 pistes où il y aura une voiture sur chaques pistes qui courerons ensemble. Alors en gros il y a un capteur (ultrasons) sur chaques pistes à la ligne de départ et un capteur sur chaques pistes à la ligne d’arrivée, donc nous avons un feu de circulation passant de rouge à vert toutes les 20 secondes, sauf que nous aimerions que quand une voiture fait un faux départ (feu rouge plus capteur ultrason < 5) le buzzer retenti et le feu ne passe pas au vert il restera totalement éteint pendant 30 secondes puis une fois les 30 secondes passées le feu recommence et si il y a pas de faux départ quand le feu passe au vert il y a 2 chronos qui se lance (un pour celui de la piste 1 et un pour la piste 2) et quand chacunes des voitures passent devant leur capteur de la ligne d’arrivée le chrono s’arrète et s’affiche dans le moniteur série comme cela: “Voiture piste 1 = chrono”, “Voiture piste 2 = chrono”. (“Voiture piste n°” : correspond à la piste)
puis il y a deux boutons qui auront utilité de répondre oui ou non à la question suivante :“Voulez vous enregistrer les résultats?”

Voici mon code:

const int trigPin = 2;
const int echoPin = 3;
const int buzzer = 9;

long duration;
int distance;
int safetyDistance;

void setup() {
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(buzzer, OUTPUT);
Serial.begin(9600);
}


void loop() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);

digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);

duration = pulseIn(echoPin, HIGH);

distance= duration*0.034/2;

safetyDistance = distance;
if (safetyDistance <= 5){
  digitalWrite(buzzer, HIGH);
}
else{
  digitalWrite(buzzer, LOW);
}

Serial.print("Distance: ");
Serial.println(distance);
}

ah oui j’allais oublié j’ai une arduino mega2560 R3 si sa peut vous aider :slight_smile:

Voir https://forum.arduino.cc/index.php?topic=670966.0

Tu n'as toujours pas lu les règles du forum.
Qui espères-tu blouser ?
Si tu avais décrit ton projet correctement dans le premier post ...

votre code ne fait pas du tout ce que vous décrivez...

lisez les "Règles du forum francophone" et surtout la partie concernant les projets scolaires

Nous vous aiderons si vous montrez du travail et que vous avez des questions précises, nous n'allons pas faire le boulot à votre place.

Pour bien débuter avec l'arduino, un bon point de départ c'est de lire les tutos d'eskimon et autres exemples, ça vous permet de maîtriser la plateforme. si vous n'avez pas commencé, il est temps de vous y mettre et comme vous êtes coincé chez vous de toutes façons, ça va vous occuper sainement :slight_smile:

il semble que pour ce projet la programmation par machine à états sera utile, cf mon tuto éventuellement.

J’aurais besoin d’aide, j’aimerai que le feu repasse au rouge une fois que le buzzer retenti mais je n’arrives pas à le faire dans le code quelqu’un pourrais m’aider

/*
 * on suppose que le buzzer est de type actif
 * c'est à dire qu'il se contente de +5V pour retentir
 * un autre type de buzzer ( passif )
 * à besoin d'une fréquence pour retentir
 *
 * mettre moniteur en 115200
 *
 * une fois le fonctionnement demontrer
 * il faudra allonger la constante "duree_feu"
 */
const int duree_buzzer=2000;
const int duree_feu= 5000;      // 3000 pour test, ensuite mettre plus long
const byte trigPin =    2;      // ultrason emission
const byte trigPin2 =   4;
const byte echoPin =    3;      // ultrason reception
const byte echoPin2 =   5;
const byte buzzer  =    9;      // alarme
const byte rouge   =   13;      // pin de cde led rouge
const byte vert    =   12;      // pin de cde led verte
long  duree        =    0;      // temps de retour ultrason
int distance_mesuree=   0;      // distance mesuree par ultrason
unsigned long deb_tempo=0;
unsigned long deb_alarme=0;
void setup() {
pinMode(trigPin,  OUTPUT);      // ultrason emission est une sortie
pinMode(echoPin,   INPUT);      // ultrason reception est une entree
pinMode(buzzer,   OUTPUT);      // le buzzer d'alarme est une sortie
pinMode(rouge,    OUTPUT);      // la commande de la led rouge est une sortie
pinMode(vert,     OUTPUT);      // la commande de la led verte est une sortie
Serial.begin(115200);           // initialise la liaison serie avec le moniteur à 115200 bauds
digitalWrite(rouge, HIGH);      // le feu passe au rouge
digitalWrite(vert,   LOW);      // le feu vert est eteint
deb_tempo=millis();
}

void loop() {
  if ((millis()-deb_tempo) >= duree_feu)
  {
    inverse_feu();
    deb_tempo=millis();
  }
if((digitalRead(rouge)) == HIGH)//si le feu est rouge
{
digitalWrite(trigPin, LOW);     // ultrason emission au repos avant enoi d'un pulse
delayMicroseconds(2);           // tempo de securisation du repos
digitalWrite(trigPin, HIGH);    // envoi d'un pulse
delayMicroseconds(10);          // de 10 micro-secondes
digitalWrite(trigPin, LOW);     // fin de l'envoi du pulse
duree = pulseIn(echoPin, HIGH); // le pulse est revenu en x microsecondes (aller/retour)
distance_mesuree= duree*0.034/2;// calcul de la distance de l'obstacle
//distance_mesuree=4;           //pour test
if (distance_mesuree < 5)       // si une voiture est à moins de 5 cm
{
  deb_alarme=millis();
  while((millis()-deb_alarme) < duree_buzzer) {
    digitalWrite(buzzer, HIGH);
    Serial.println("alarme ON");
  }
}
else{
  digitalWrite(buzzer, LOW);    // sinon, pas d'alarme
  Serial.print("alarme OFF "); 
    }
 
     Serial.print("Distance: ");   // affichage de la distance de la voiture sur le moniteur
     Serial.println(distance_mesuree);
    }
}
void inverse_feu()
{
  if ((digitalRead(rouge))==HIGH)
  {
  digitalWrite(vert, HIGH);     // le feu passe au vert
  Serial.println("le feu est vert");
  digitalWrite(rouge, LOW);     // le feu rouge est eteint
  Serial.println("le feu n'est pas rouge");
  }
  else
  {
  digitalWrite(rouge, HIGH);    // le feu passe au rouge
  Serial.println("le feu est rouge");
  digitalWrite(vert, LOW);      // le feu vert est eteint
  Serial.println("le feu n'est pas vert");
  }
}

Lire les réponses.
Ne pas multiplier les demandes, ça réduira les réponses…surtout s’il n’en est pas tenu compte.

un debut de réponse ici: Gestion Conditions