elemes/examples/content/traffic_light_arduino.md

339 lines
6.9 KiB
Markdown

---LESSON_INFO---
Pelajaran Arduino: Membuat simulasi lampu lalu lintas dengan 3 LED.
**Learning Objectives:**
- Mengontrol beberapa LED secara berurutan
- Menerapkan pola sequence/timing dengan `delay()`
- Merangkai 3 LED ke Arduino
- Menggunakan `const int` untuk nama pin yang mudah dibaca
**Prerequisites:**
- Hello, World!
- LED Blink
- Hello Serial
- Button Input
---END_LESSON_INFO---
# Traffic Light — Lampu Lalu Lintas
Proyek ini mensimulasikan **lampu lalu lintas** menggunakan 3 LED:
merah, kuning, dan hijau. Kita akan mengontrol urutan nyala-mati
LED persis seperti lampu lalu lintas sungguhan.
## Urutan Lampu Lalu Lintas
```
1. MERAH menyala (3 detik) → Berhenti
2. KUNING menyala (1 detik) → Bersiap
3. HIJAU menyala (3 detik) → Jalan
4. KUNING menyala (1 detik) → Bersiap berhenti
5. Kembali ke MERAH...
```
## Menggunakan Konstanta untuk Pin
Daripada mengingat nomor pin, gunakan **konstanta bernama**:
```
const int RED_PIN = 13;
const int YELLOW_PIN = 12;
const int GREEN_PIN = 11;
```
Keuntungan:
- Kode lebih mudah dibaca: `digitalWrite(RED_PIN, HIGH)` vs `digitalWrite(13, HIGH)`
- Jika ingin ganti pin, cukup ubah di satu tempat
## Mengontrol Beberapa LED
Setiap LED memerlukan pin output sendiri:
```
void setup() {
pinMode(RED_PIN, OUTPUT);
pinMode(YELLOW_PIN, OUTPUT);
pinMode(GREEN_PIN, OUTPUT);
}
```
Pastikan hanya **satu LED menyala** pada satu waktu:
```
// Nyalakan merah, matikan yang lain
digitalWrite(RED_PIN, HIGH);
digitalWrite(YELLOW_PIN, LOW);
digitalWrite(GREEN_PIN, LOW);
```
## Serial Monitor untuk Debugging
Cetak status lampu ke Serial Monitor agar mudah di-debug:
```
Serial.println("RED");
delay(3000); // Merah menyala 3 detik
```
---EXERCISE---
### Tantangan
**Kode Arduino:**
Buat program yang mensimulasikan lampu lalu lintas:
1. **Merah** di pin 13 menyala selama 3 detik, cetak `RED` ke Serial
2. **Kuning** di pin 12 menyala selama 1 detik, cetak `YELLOW` ke Serial
3. **Hijau** di pin 11 menyala selama 3 detik, cetak `GREEN` ke Serial
4. **Kuning** lagi selama 1 detik, cetak `YELLOW` ke Serial
5. Ulangi dari merah
Pastikan hanya satu LED yang menyala pada satu waktu!
**Rangkaian:**
Hubungkan 3 LED ke Arduino:
- Pin 13 → LED Merah (Anode A), Cathode C → GND
- Pin 12 → LED Kuning (Anode A), Cathode C → GND
- Pin 11 → LED Hijau (Anode A), Cathode C → GND
Setelah selesai, tekan **Compile & Run** dan perhatikan LED menyala bergantian.
---
---INITIAL_CODE_ARDUINO---
// Traffic Light - Lampu Lalu Lintas
// Simulasi lampu merah, kuning, hijau
const int RED_PIN = 13;
const int YELLOW_PIN = 12;
const int GREEN_PIN = 11;
void setup() {
pinMode(RED_PIN, OUTPUT);
pinMode(YELLOW_PIN, OUTPUT);
pinMode(GREEN_PIN, OUTPUT);
Serial.begin(9600);
}
void loop() {
// Lampu MERAH
digitalWrite(RED_PIN, HIGH);
digitalWrite(YELLOW_PIN, LOW);
digitalWrite(GREEN_PIN, LOW);
Serial.println("RED");
delay(3000);
// Lampu KUNING
digitalWrite(RED_PIN, LOW);
digitalWrite(YELLOW_PIN, HIGH);
digitalWrite(GREEN_PIN, LOW);
Serial.println("YELLOW");
delay(1000);
// Lampu HIJAU
digitalWrite(RED_PIN, LOW);
digitalWrite(YELLOW_PIN, LOW);
digitalWrite(GREEN_PIN, HIGH);
Serial.println("GREEN");
delay(3000);
// Lampu KUNING lagi
digitalWrite(RED_PIN, LOW);
digitalWrite(YELLOW_PIN, HIGH);
digitalWrite(GREEN_PIN, LOW);
Serial.println("YELLOW");
delay(1000);
}
---END_INITIAL_CODE_ARDUINO---
---VELXIO_CIRCUIT---
{
"board": "arduino:avr:uno",
"components": [
{
"type": "led",
"id": "led-red",
"x": 409.6091884525257,
"y": 65.40692157090741,
"rotation": 0,
"props": {
"color": "red",
"pin": 13,
"state": true,
"value": true
}
},
{
"type": "led",
"id": "led-yellow",
"x": 466.09101803924966,
"y": 66.43228050989252,
"rotation": 0,
"props": {
"color": "yellow",
"pin": 12,
"state": false,
"value": false
}
},
{
"type": "led",
"id": "led-green",
"x": 522.0366933470766,
"y": 63.613964067867315,
"rotation": 0,
"props": {
"color": "green",
"pin": 11,
"state": false,
"value": false
}
},
{
"type": "resistor",
"id": "resistor-1776300566703-7pi4wei9j",
"x": 275.08055011716567,
"y": 133.79325981817132,
"rotation": 0,
"props": {
"value": true,
"state": true
}
},
{
"type": "resistor",
"id": "resistor-1776300590088-k4l87u1rf",
"x": 273.3198126609919,
"y": 178.95644554504224,
"rotation": 0,
"props": {
"value": false,
"state": false
}
},
{
"type": "resistor",
"id": "resistor-1776300593575-rklkixiwy",
"x": 270.5981563595655,
"y": 220.2759558909028,
"rotation": 0,
"props": {
"value": false,
"state": false
}
}
],
"wires": [
]
}
---END_VELXIO_CIRCUIT---
---EXPECTED_SERIAL_OUTPUT---
RED
YELLOW
GREEN
YELLOW
---END_EXPECTED_SERIAL_OUTPUT---
---EXPECTED_WIRING---
{
"wires": [
{
"start": {
"componentId": "resistor-1776300566703-7pi4wei9j",
"pinName": "2"
},
"end": {
"componentId": "led-red",
"pinName": "A"
}
},
{
"start": {
"componentId": "resistor-1776300590088-k4l87u1rf",
"pinName": "2"
},
"end": {
"componentId": "led-yellow",
"pinName": "A"
}
},
{
"start": {
"componentId": "resistor-1776300593575-rklkixiwy",
"pinName": "2"
},
"end": {
"componentId": "led-green",
"pinName": "A"
}
},
{
"start": {
"componentId": "arduino-uno",
"pinName": "GND.3"
},
"end": {
"componentId": "led-red",
"pinName": "C"
}
},
{
"start": {
"componentId": "arduino-uno",
"pinName": "GND.3"
},
"end": {
"componentId": "led-yellow",
"pinName": "C"
}
},
{
"start": {
"componentId": "arduino-uno",
"pinName": "GND.3"
},
"end": {
"componentId": "led-green",
"pinName": "C"
}
},
{
"start": {
"componentId": "resistor-1776300566703-7pi4wei9j",
"pinName": "1"
},
"end": {
"componentId": "arduino-uno",
"pinName": "13"
}
},
{
"start": {
"componentId": "resistor-1776300590088-k4l87u1rf",
"pinName": "1"
},
"end": {
"componentId": "arduino-uno",
"pinName": "12"
}
},
{
"start": {
"componentId": "resistor-1776300593575-rklkixiwy",
"pinName": "1"
},
"end": {
"componentId": "arduino-uno",
"pinName": "11"
}
}
]
}
---END_EXPECTED_WIRING---
---KEY_TEXT---
pinMode
digitalWrite
const int
Serial
delay
---END_KEY_TEXT---