Yaya Sinyali ve Buzzer
Coddy'nin Arduino Journey'sinin Projeler bölümünün bir parçası. Ders 4 / 24.
Yayalar için de kendi ışıkları vardır: 7 numaralı pine bağlı kırmızı ışık (bekle) ve 6 numaralı pine bağlı yeşil ışık (yürü). Arabalar için kırmızı ışık yanarken yayalar yeşil ışığı görür; geri kalan zamanda kırmızı ışığı görürler.
Yürü sinyali yalnızca iki anda değişir: arabalar için kırmızı ışık yandığında ve söndüğünde. Yürü ışıkları için bir işlev yaz ve bu iki noktada çağır:
void showWalk(bool walk) {
if (walk) {
digitalWrite(walkRedPin, LOW);
digitalWrite(walkGreenPin, HIGH);
} else {
digitalWrite(walkGreenPin, LOW);
digitalWrite(walkRedPin, HIGH);
}
}Geçitlerde, ışıkları göremeyen kişiler için karşıdan karşıya geçmenin güvenli olduğu süre boyunca bip sesi de verilir. tone() üçüncü bir sayı alabilir; bu sayı sesin ne kadar süreyle çalacağını belirtir: tone(buzzerPin, 1000, 100), 1000 Hz sesini 100 ms boyunca çalar ve kendiliğinden durur. Taslak bunun için beklemez.
Yalnızca kırmızı ışık yanarken her 500 ms'de bir bip sesi vermek için, case RED: içine üçüncü bir millis() zamanlayıcısı ekle.
Görev
OrtaYaya sinyalini ve sesli uyarıcısını ekle:
- yaya kırmızısı 7 numaralı pine, yaya yeşili 6 numaralı pine bağlı; ikisi de çıkış
- arabalar için kırmızı ışık yanarken: yaya yeşili açık, yaya kırmızısı kapalı ve 8 numaralı pinde her 500 ms'de bir 1000 Hz frekansında 100 ms'lik bir bip sesi
- geri kalan zamanlarda: yaya kırmızısı açık, yaya yeşili kapalı, ses yok
Run'a, ardından Check'e bas.
Kendin dene
// Araç trafik ışıkları
const int redPin = 12;
const int yellowPin = 11;
const int greenPin = 10;
// Kartın kendi LED'i: denetleyicinin durum ışığı
const int statusPin = 13;
// Yaya geçidi düğmesi
const int buttonPin = 2;
enum Light { GREEN, YELLOW, RED };
Light light = GREEN;
unsigned long lightStart = 0; // mevcut ışığın yandığı an
bool statusOn = false;
unsigned long lastBlink = 0;
// Bir ışığı yak, diğer ikisini söndür.
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:
// Yaya geçidi düğmesine basılması yeşil ışığın erken sona ermesini sağlar.
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;
}
// Araç trafik ışıkları ne yaparsa yapsın, durum ışığı her 500 ms'de bir yanıp söner.
if (now - lastBlink >= 500) {
lastBlink = now;
if (statusOn) {
statusOn = false;
digitalWrite(statusPin, LOW);
} else {
statusOn = true;
digitalWrite(statusPin, HIGH);
}
}
}
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Projeler bölümündeki tüm dersler
Kendi başına pratik yap: Arduino playground