dimanche 6 avril 2014

Feu tricolore et passage pièton

TP semaine 4 Mooc Fabrication numérique

Consignes :
    • TP À FAIRE POUR LA SEMAINE 4

    Sur le forum, Reidid a souhaité compliquer un peu le TP Feu Tricolore en lui ajoutant un passage piéton. Nous avons trouvé cette idée chouette d'autant que nous avons appris aujourd'hui à lire l'état d'un bouton.
    Le TP à faire pour la semaine prochaine consiste à réaliser un feu tricolore accompagné d'un feu "piéton" bicolore (rouge et vert). Le montage devra également avoir un bouton pour piétons qui viendra passer le feu au orange puis au rouge tout en passant le feu piéton au vert (un peu comme dans la vraie vie finalement :)

      Consignes du TP

    Fonctionnement normal
    • Feu tricolore : même consigne que la semaine dernière
      • Une LED orange allumée pendant 1 seconde
      • Une LED rouge allumée pendant 3 secondes
      • Une LED verte allumée pendant 3 secondes
    • Feu bicolore (piéton)
      • Le feu piéton est constamment rouge tant que le bouton n'est pas appuyé
    Si le bouton est appuyé
    • Le feu tricolore passe au orange allumé pendant 1 seconde puis rouge pendant 5 secondes durant lesquelles le feu vert piéton passe au vert
    • Après ces 5 secondes, le feu piéton repasse au rouge et le fonctionnement normal reprend
    Comme on est sympas, on vous donne le montage à réaliser :

/*
  TP bouton pressoir / feux tricolores piétons - semaine 3 mooc fabrication numérique

Feu tricolore  (merci gégé pour la correction)

Une LED rouge allumée pendant 3 secondes => ftr
Une LED jaune allumée pendant 1 seconde => ftj
Une LED verte allumée pendant 3 secondes => ftv

Feu bicolore (piéton)
Le feu piéton est constamment rouge tant que le bouton n'est pas appuyé
Si le bouton est appuyé Le feu tricolore passe au orange allumé pendant 1 seconde puis rouge pendant 5 secondes durant lesquelles le feu vert piéton passe au vert
Après ces 5 secondes, le feu piéton repasse au rouge et le fonctionnement normal reprend

Feu pieton rouge => fpr
Feu pieton vert => fpv
 */

// const signifie constant => non modifiable
// Déclare une constante (const) de type entier (int) appelée buttonPin
// set pin numbers:
const int buttonPin = 2;     // buttonPin a pour valeur 2
const int ftr =  12;      // feu tricolore rouge a pour valeur 12
const int ftj = 11;       // feu tricolore jaune a pour valeur 11
const int ftv = 10;       // feu tricolore vert a pour valeur 10
const int fpr = 9;        // feu piéton rouge a pour valeur 9
const int fpv = 8;        // feu piéton vert a pour valeur 8

// variable qui change (puisqu'il n'y a pas la const marqué derrière)
int buttonState = 0;         // la valeur de buttonState pour changer pendant l'exécution du programme

// le bloc setup contient les instructions qui doivent être executées au début
void setup() {
  // pinMode permet de spécifier si une broche est une entrée ou une sortie
  pinMode(ftr, OUTPUT);
  pinMode(ftj, OUTPUT);
  pinMode(ftv, OUTPUT);
  pinMode(fpr, OUTPUT);
  pinMode(fpv, OUTPUT);  
  // les leds sont en sortie puisque du courant va sortir pour l'alimenter
  pinMode(buttonPin, INPUT);  
// le buttonPin est une entrée puisqu'il va recevoir du courant  
}

void loop(){
  // digitalReand est une fonction qui va aller lire la valeur d'une broche (ici buttonPin=2)
  
  if (buttonState == LOW) {buttonState=digitalRead(buttonPin);}
  // le code vérifie que le bouton n'est pas déjà été appuyé et dans ce cas il vérifie l'état du bouton
  
     // feu pieton vert éteind :
   digitalWrite(fpv, LOW);
     // feu pieton rouge tout le temps allumé
   digitalWrite(fpr, HIGH);
    if (buttonState == LOW) {buttonState=digitalRead(buttonPin);}
    
   // feu tricolore vert allumé pendant 3 secondes puis s'éteind
   digitalWrite(ftv, HIGH);
   delay(3000);
   digitalWrite(ftv, LOW);
    if (buttonState == LOW) {buttonState=digitalRead(buttonPin);}
    
   // feu tricolore jaune allumé pendant 1 seconde puis s'éteind
   digitalWrite(ftj, HIGH);
   delay(1000);
   digitalWrite(ftj, LOW);
    if (buttonState == LOW) {buttonState=digitalRead(buttonPin);}
    
   // feu tricolore rouge allumé pendant 3 secondes)
  // feu tricolore rouge pendant 5 secondes 
    digitalWrite(ftr, HIGH);
    digitalWrite(fpv, HIGH);
    // feu pieton rouge s'éteind   
   digitalWrite(fpr, LOW);
    delay(3000);
    digitalWrite(ftr, LOW);
    digitalWrite(fpv,LOW);
    digitalWrite(fpr, HIGH);
    if (buttonState == LOW) {buttonState=digitalRead(buttonPin);}
    
  // Si le bouton est pressé (cad si on reçoit du courant sur la broche 2)
  if (buttonState == HIGH) { 
   buttonState=LOW; // le code teste si le bouton est appuyé ou pas. Permet de forcer le fait que le bouton a été relaché
 
        // feu tricolore jaune pendant 1 seconde
    digitalWrite(ftj, HIGH);
    delay(1000);
    digitalWrite(ftj, LOW); 
  
   // feu tricolore rouge pendant 5 secondes 
    digitalWrite(ftr, HIGH);
    digitalWrite(fpv, HIGH);
    // feu pieton rouge s'éteind   
   digitalWrite(fpr, LOW);
    delay(5000);
    digitalWrite(ftr, LOW);
    digitalWrite(fpv,LOW);
   
 // feu tricolore vert s'eteind  
   digitalWrite(ftv, LOW);
   
  } 

 
}

Aucun commentaire:

Enregistrer un commentaire