Lampu Lalu Lintas dengan millis()
Termasuk bagian Proyek dalam perjalanan Arduino di Coddy. Pelajaran 2 dari 24.
Selama setiap delay(3000), papan tidak melakukan hal lain, jadi papan tidak dapat mendeteksi tombol penyeberangan yang ditambahkan pada langkah berikutnya. Pengaturan waktu beralih ke millis().
Lampu ini adalah mesin status: lampu selalu berada dalam satu status (hijau, kuning, atau merah) dan berpindah ke status berikutnya setelah status tersebut berlangsung cukup lama. enum memberi nama pada status, satu variabel menyimpan status saat ini, dan variabel lainnya menyimpan waktu mulai:
enum Light { GREEN, YELLOW, RED };
Light light = GREEN;
unsigned long lightStart = 0;Status pertama adalah hijau, jadi nyalakan lampu hijau di setup(). Pada setiap putaran loop(), sebuah switch memeriksa apakah status saat ini telah berlangsung cukup lama, lalu baru berpindah ke status berikutnya dan mengubah lampunya:
case GREEN:
if (millis() - lightStart >= 3000) {
light = YELLOW;
lightStart = millis();
showLight(yellowPin);
}
break;Tidak ada yang menunggu, jadi loop() bebas untuk tugas lain. Buktikan dengan lampu status: kedipkan LED bawaan papan, pin 13, setiap 500 ms.
Tantangan
SedangTulis ulang pengaturan waktunya tanpa delay():
- pertahankan lampu hijau selama 3000 ms, kuning selama 1000 ms, merah selama 3000 ms
- gunakan
enumuntuk tiga status,switch, danmillis() - nyalakan lampu hijau di
setup(), dan panggilshowLight()hanya saat status berubah - kedipkan pin 13 setiap 500 ms (menyala selama 500 ms, mati selama 500 ms), sepanjang waktu
Tekan Jalankan, lalu Periksa.
Coba sendiri
// Lampu mobil
const int redPin = 12;
const int yellowPin = 11;
const int greenPin = 10;
// 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);
}
void loop() {
showLight(greenPin);
delay(3000);
showLight(yellowPin);
delay(1000);
showLight(redPin);
delay(3000);
}
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