Menu
CoddyTech

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.

challenge icon

Tantangan

Sedang

Tulis ulang pengaturan waktunya tanpa delay():

  • pertahankan lampu hijau selama 3000 ms, kuning selama 1000 ms, merah selama 3000 ms
  • gunakan enum untuk tiga status, switch, dan millis()
  • nyalakan lampu hijau di setup(), dan panggil showLight() 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);
}
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Proyek

Latihan sendiri: Playground Arduino