Sygnał przejścia dla pieszych i brzęczyk
Część sekcji Projekty ścieżki Arduino w Coddy. Lekcja 4 z 24.
Piesi mają własne światła: czerwone na pinie 7 (czekaj) i zielone na pinie 6 (idź). Gdy samochody mają czerwone światło, piesi widzą zielone; przez resztę czasu widzą czerwone.
Sygnał dla pieszych zmienia się tylko w dwóch momentach: gdy samochody dostają czerwone światło i gdy przestaje ono świecić. Napisz funkcję obsługującą światła dla pieszych i wywołaj ją w tych dwóch miejscach:
void showWalk(bool walk) {
if (walk) {
digitalWrite(walkRedPin, LOW);
digitalWrite(walkGreenPin, HIGH);
} else {
digitalWrite(walkGreenPin, LOW);
digitalWrite(walkRedPin, HIGH);
}
}Przejścia dla pieszych wydają też dźwięk, gdy można bezpiecznie przejść, dla osób, które nie widzą świateł. tone() może przyjmować trzecią liczbę określającą czas odtwarzania: tone(buzzerPin, 1000, 100) odtwarza dźwięk o częstotliwości 1000 Hz przez 100 ms, a następnie sam się zatrzymuje. Szkic nie czeka na zakończenie odtwarzania.
Aby sygnał dźwiękowy rozlegał się co 500 ms tylko podczas czerwonego światła, umieść trzeci timer millis() wewnątrz case RED:.
Wyzwanie
ŚredniDodaj sygnał dla pieszych i jego brzęczyk:
- czerwone światło dla pieszych na pinie 7, a zielone na pinie 6 — oba jako wyjścia
- gdy dla samochodów świeci się czerwone światło: zielone światło dla pieszych włączone, czerwone wyłączone, a na pinie 8 co 500 ms krótki sygnał dźwiękowy o częstotliwości 1000 Hz i długości 100 ms
- przez pozostały czas: czerwone światło dla pieszych włączone, zielone wyłączone, bez dźwięku
Naciśnij Run, a następnie Check.
Spróbuj swoich sił
// Światła dla samochodów
const int redPin = 12;
const int yellowPin = 11;
const int greenPin = 10;
// Wbudowana dioda LED płytki: kontrolka stanu sterownika
const int statusPin = 13;
// Przycisk przejścia dla pieszych
const int buttonPin = 2;
enum Light { GREEN, YELLOW, RED };
Light light = GREEN;
unsigned long lightStart = 0; // kiedy włączyło się aktualne światło
bool statusOn = false;
unsigned long lastBlink = 0;
// Włącz jedno światło i wyłącz pozostałe dwa.
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:
// Naciśnięcie przycisku przejścia dla pieszych powoduje wcześniejsze wyłączenie zielonego światła.
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;
}
// Kontrolka stanu miga co 500 ms, niezależnie od działania świateł dla samochodów.
if (now - lastBlink >= 500) {
lastBlink = now;
if (statusOn) {
statusOn = false;
digitalWrite(statusPin, LOW);
} else {
statusOn = true;
digitalWrite(statusPin, HIGH);
}
}
}
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Projekty
1Sygnalizacja świetlna
Cykl sygnalizacji świetlnejSygnalizacja świetlna z użyciem millis()Przycisk dla pieszychSygnał przejścia dla pieszych i brzęczykPoćwicz samodzielnie: Edytor online Arduino