Signal piéton et buzzer
Fait partie de la section Projets du Journey Arduino de Coddy. Leçon 4 sur 24.
Les piétons ont leurs propres feux : rouge sur la broche 7 (attendre) et vert sur la broche 6 (traverser). Quand les voitures ont le feu rouge, les piétons voient le feu vert ; le reste du temps, ils voient le feu rouge.
Le signal piéton change à seulement deux moments : quand les voitures passent au rouge et quand elles quittent cette phase. Écris une fonction pour les feux piétons et appelle-la à ces deux endroits :
void showWalk(bool walk) {
if (walk) {
digitalWrite(walkRedPin, LOW);
digitalWrite(walkGreenPin, HIGH);
} else {
digitalWrite(walkGreenPin, LOW);
digitalWrite(walkRedPin, HIGH);
}
}Les passages piétons émettent aussi des bips quand on peut traverser en toute sécurité, pour les personnes qui ne voient pas les feux. tone() peut prendre un troisième nombre, qui indique la durée de lecture : tone(buzzerPin, 1000, 100) joue un son de 1000 Hz pendant 100 ms et s’arrête tout seul. Le programme n’attend pas la fin du son.
Pour émettre un bip toutes les 500 ms uniquement pendant la phase rouge, ajoute un troisième minuteur millis() dans case RED:.
Défi
MoyenAjoute le signal piéton et son avertisseur sonore :
- rouge piéton sur la broche 7 et vert piéton sur la broche 6, les deux en sortie
- tant que les voitures ont le feu rouge : vert piéton allumé, rouge piéton éteint, et un bip de 100 ms à 1000 Hz sur la broche 8 toutes les 500 ms
- le reste du temps : rouge piéton allumé, vert piéton éteint, aucun son
Appuie sur Run, puis sur Check.
Essayez vous-même
// Les feux de circulation pour les voitures
const int redPin = 12;
const int yellowPin = 11;
const int greenPin = 10;
// La LED intégrée à la carte : le voyant d’état du contrôleur
const int statusPin = 13;
// Le bouton de traversée
const int buttonPin = 2;
enum Light { GREEN, YELLOW, RED };
Light light = GREEN;
unsigned long lightStart = 0; // moment où le feu actuel s’est allumé
bool statusOn = false;
unsigned long lastBlink = 0;
// Allumer un feu et éteindre les deux autres.
void showLight(int pin) {
digitalWrite(redPin, LOW);
digitalWrite(yellowPin, LOW);
digitalWrite(greenPin, LOW);
digitalWrite(pin, HIGH);
}
void setup() {
pinMode(redPin, OUTPUT);
pinMode(yellowPin, OUTPUT);
pinMode(greenPin, OUTPUT);
pinMode(statusPin, OUTPUT);
pinMode(buttonPin, INPUT_PULLUP);
showLight(greenPin);
}
void loop() {
unsigned long now = millis();
switch (light) {
case GREEN:
// Un appui sur le bouton de traversée met fin au feu vert plus tôt.
if (now - lightStart >= 3000 || digitalRead(buttonPin) == LOW) {
light = YELLOW;
lightStart = now;
showLight(yellowPin);
}
break;
case YELLOW:
if (now - lightStart >= 1000) {
light = RED;
lightStart = now;
showLight(redPin);
}
break;
case RED:
if (now - lightStart >= 3000) {
light = GREEN;
lightStart = now;
showLight(greenPin);
}
break;
}
// Le voyant d’état clignote toutes les 500 ms, indépendamment des feux de circulation pour les voitures.
if (now - lastBlink >= 500) {
lastBlink = now;
if (statusOn) {
statusOn = false;
digitalWrite(statusPin, LOW);
} else {
statusOn = true;
digitalWrite(statusPin, HIGH);
}
}
}
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Projets
1Feu de circulation
Cycle du feu de circulationFeu de circulation avec millis()Bouton de traverséeSignal piéton et buzzerEntraînez-vous par vous-même : Playground Arduino