XIII. Projet 5 : les feux de circulation▲
Afin de mettre en pratique l'utilisation de variables, voici un petit exercice. On peut se baser sur le code 3 pour débuter.
L'objectif de cet exercice est de créer deux feux de circulation et de les faire fonctionner de manière synchrone.
Voici les phases de deux feux de circulation que tu dois recréer :
Tu peux visionner une vidéo de présentation ici : http://www.scolcast.ch/podcast/61/53-3067
Liste des composants
- 2 LED rouges ;
- 2 LED jaunes ou orange ;
- 2 LED vertes ;
- 6 résistances de 220 à 470 Ω.
Afin de faciliter l'identification de chaque LED, nous allons renommer les broches comme suit :
Feu 1 :
- LED rouge connectée sur la broche 4 et renommée R1 ;
- LED jaune connectée sur la broche 5 et renommée J1 ;
- LED verte connectée sur la broche 6 et renommée V1.
Feu 2 :
- LED rouge connectée sur la broche 8 et renommée R2 ;
- LED jaune connectée sur la broche 9 et renommée J2 ;
- LED verte connectée sur la broche 10 et renommée V2.
Enfin, nous utiliserons deux variables timer1 et timer2 pour définir les temps d'allumages. Avant de regarder le code à la page suivante, essaie de faire l'exercice seul.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
/*
Code 4 - Edurobot.ch, destiné à l'Arduino
Objectif : gérer des feux de circulation
*/
// On définit les variables pour chaque broche
//FEU 1
const
int
R1 =
4
; // La broche 4 devient le feu rouge 1
const
int
J1 =
5
; // La broche 3 devient le feu jaune 1
const
int
V1 =
6
; // La broche 2 devient le feu vert 1
//FEU2
const
int
R2 =
8
; // La broche 8 devient le feu rouge 2
const
int
J2 =
9
; // La broche 9 devient le feu jaune 2
const
int
V2 =
10
; // La broche 10 devient le feu vert 2
//TEMPS
int
timer1 =
2000
; // Le temps est fixé à 2 secondes
int
timer2 =
6000
; // Le temps est fixé à 6 secondes
void
setup() {
// On initialise les sorties
pinMode
(R1, OUTPUT
);
pinMode
(J1, OUTPUT
);
pinMode
(V1, OUTPUT
);
pinMode
(R2, OUTPUT
);
pinMode
(J2, OUTPUT
);
pinMode
(V2, OUTPUT
);
}
void
loop() {
// Phase 1 : R1 et V2 sont allumés, R2, J1 et J2 sont éteints
digitalWrite
(R2, LOW
); // R2 éteint
digitalWrite
(J1, LOW
); // J1 éteint
digitalWrite
(J2, LOW
); // J2 éteint
digitalWrite
(R1, HIGH
); // R1 allumé
digitalWrite
(V2, HIGH
); // V2 allumé
delay
(timer2); // durée: 6000 millisecondes, soit 6 secondes
// Phase 2 : R1, J1, J2 allumés et V2 éteint
digitalWrite
(V2, LOW
); // V2 éteint
digitalWrite
(J1, HIGH
); // J1 allumé
digitalWrite
(J2, HIGH
); // J2 allumé
delay
(timer1); // durée: 2000 millisecondes, soit 2 secondes
// Phase 3 : R1, J1, J2 éteints et V1 et R2 allumés
digitalWrite
(R1, LOW
); // R1 éteint
digitalWrite
(J1, LOW
); // J1 éteint
digitalWrite
(J2, LOW
); // J2 éteint
digitalWrite
(V1, HIGH
); // V1 allumé
digitalWrite
(R2, HIGH
); // R2 allumé
delay
(timer2);
// Phase 4 : V1 éteint et J1, J2 et R2 allumés
digitalWrite
(V1, LOW
); // V1 éteint
digitalWrite
(J1, HIGH
); // J1 allumé
digitalWrite
(J2, HIGH
); // J2 allumé
digitalWrite
(R2, HIGH
); // R2 allumé
delay
(timer1);
}
XIII-A. Variantes▲
Variante 1
Il y a souvent un décalage entre le passage d'un feu au rouge et le passage au vert de l'autre feu. C'est en particulier le cas pour les feux de chantier. Cela permet aux voitures encore engagées dans la zone de chantier de la quitter, avant de laisser la place aux voitures venant en face.
Décrire les phases des feux et les programmer pour tenir compte du délai.
Variante 2
Intégrer un troisième feu, qui passe du rouge au vert en alternance avec les deux autres feux.
Réaliser le schéma électronique et programmer les feux.
Variante 3
Réaliser les feux pour un carrefour :