Urutan traffic lights standar Inggris mengandung arti sebagai berikut :
- Lampu merah,
Setiap kendaraan wajib berhenti tidak lebih dari garis batas - Lampu merah dan lampu kuning,
Setiap kendaraan wajib berhenti namun bersiap untuk melanjutkan perjalanan - Lampu hijau,
Boleh melintasi traffic lights - Lampu kuning,
Bersiap untuk berhenti di belakang garis batas, tetapi jika sudah melewati garis batas masih di perbolehkan jalan.
Jumlah keseluruhan lampu yang dibutuhkan untuk 4 simpang adalah 12 buah, untuk menghemat jalur pin arduino, maka bisa diterapkan sistem scan yang menggunakan 3 jalur lampu, (untuk merah, kuning, hijau), serta 4 jalur untuk masing-masing posisi trafic led, sehingga untuk 4 simpang diperlukan 7 jalur pengontrolan saja.
skema traffic lights berbasis arduino:

program Urutan traffic lights menggunakan arduino:
#define jumlahTrafficLight 4
byte pinDigit[] = {7, 6, 5, 4};
byte pinRYG[] = {10, 9, 8};
#define lampuMerah (1 << 2)
#define lampuKuning (1 << 1)
#define lampuHijau (1 << 0)
byte hijauSekarang;
byte hijauSelanjutnya;
byte timingTraffic;
struct traffic {
byte lampu;
byte lampuSelanjutnya;
uint32_t waktu;
};
traffic skemaTraffic[] = {
{lampuHijau , lampuMerah , 5000},
{lampuKuning , lampuMerah , 1000},
{lampuMerah , lampuMerah | lampuKuning , 1000},
};
byte lampuTraffic[jumlahTrafficLight];
byte indexTraffic;
byte indexScan;
uint32_t millisTraffic;
byte jalurDarurat;
void setup() {
for (byte i = 0; i < jumlahTrafficLight; i++)
{
pinMode(pinDigit[i], OUTPUT);
}
for (byte i = 0; i < 3; i++)
{
pinMode(pinRYG[i], OUTPUT);
}
Serial.begin(9600);
for (byte i = 0 ; i < jumlahTrafficLight; i++)
{
lampuTraffic[i] = skemaTraffic[2].lampu;
}
hijauSekarang = 0;
hijauSelanjutnya = 1;
}
void loop() {
if (millisTraffic < millis())
{
lampuTraffic[hijauSekarang] = skemaTraffic[indexTraffic].lampu;
lampuTraffic[hijauSelanjutnya] = skemaTraffic[indexTraffic].lampuSelanjutnya;
millisTraffic += skemaTraffic[indexTraffic].waktu;
indexTraffic++;
if (indexTraffic == 3)
{
indexTraffic = 0;
hijauSekarang = hijauSelanjutnya;
hijauSelanjutnya = (hijauSekarang + 1) % jumlahTrafficLight;
}
}
trafficScan();
}
void trafficScan()
{
digitalWrite(pinDigit[indexScan], HIGH);
indexScan++;
indexScan %= jumlahTrafficLight;
digitalWrite(pinRYG[0], lampuTraffic[indexScan] & lampuMerah);
digitalWrite(pinRYG[1], lampuTraffic[indexScan] & lampuKuning);
digitalWrite(pinRYG[2], lampuTraffic[indexScan] & lampuHijau);
digitalWrite(pinDigit[indexScan], LOW);
}
gan kenapa led merah tdk mau mati?
Mantap…