Sinyal Berjalan dan Bel
Termasuk bagian Proyek dalam perjalanan Arduino di Coddy. Pelajaran 4 dari 24.
Orang yang berjalan kaki memiliki lampu sendiri: merah pada pin 7 (tunggu) dan hijau pada pin 6 (berjalan). Saat lampu mobil berwarna merah, orang melihat lampu hijau; pada waktu lainnya, mereka melihat lampu merah.
Sinyal untuk pejalan kaki berubah hanya pada dua momen: saat lampu mobil berubah menjadi merah dan saat lampu itu tidak lagi merah. Tulis fungsi untuk lampu pejalan kaki dan panggil fungsi itu di kedua tempat tersebut:
void showWalk(bool walk) {
if (walk) {
digitalWrite(walkRedPin, LOW);
digitalWrite(walkGreenPin, HIGH);
} else {
digitalWrite(walkGreenPin, LOW);
digitalWrite(walkRedPin, HIGH);
}
}Penyeberangan juga mengeluarkan bunyi bip saat aman untuk menyeberang, bagi orang yang tidak dapat melihat lampu. tone() dapat menerima angka ketiga, yaitu durasi bunyi: tone(buzzerPin, 1000, 100) membunyikan nada 1000 Hz selama 100 ms, lalu berhenti sendiri. Sketch tidak menunggu bunyi itu selesai.
Agar bunyi bip terdengar setiap 500 ms hanya saat lampu merah, tambahkan timer millis() ketiga di dalam case RED:.
Tantangan
SedangTambahkan sinyal pejalan kaki dan belnya:
- lampu merah pejalan kaki di pin 7 dan lampu hijau pejalan kaki di pin 6, keduanya sebagai output
- saat lampu mobil merah: lampu hijau pejalan kaki menyala, lampu merah pejalan kaki mati, dan bunyi bip selama 100 ms pada 1000 Hz di pin 8 setiap 500 ms
- selebihnya: lampu merah pejalan kaki menyala, lampu hijau pejalan kaki mati, tanpa suara
Tekan Jalankan, lalu Periksa.
Coba sendiri
// Lampu lalu lintas untuk mobil
const int redPin = 12;
const int yellowPin = 11;
const int greenPin = 10;
// LED bawaan papan: lampu status pengendali
const int statusPin = 13;
// Tombol penyeberangan
const int buttonPin = 2;
enum Light { GREEN, YELLOW, RED };
Light light = GREEN;
unsigned long lightStart = 0; // saat lampu yang aktif menyala
bool statusOn = false;
unsigned long lastBlink = 0;
// Nyalakan satu lampu dan matikan dua lampu lainnya.
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:
// Menekan tombol penyeberangan mengakhiri lampu hijau lebih awal.
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;
}
// Lampu status berkedip setiap 500 ms, terlepas dari keadaan lampu lalu lintas untuk mobil.
if (now - lastBlink >= 500) {
lastBlink = now;
if (statusOn) {
statusOn = false;
digitalWrite(statusPin, LOW);
} else {
statusOn = true;
digitalWrite(statusPin, HIGH);
}
}
}
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Proyek
1Lampu Lalu Lintas
Siklus Lampu Lalu LintasLampu Lalu Lintas dengan millis()Tombol PenyeberanganSinyal Berjalan dan BelLatihan sendiri: Playground Arduino