Kali ini, proyek kita akan ditambah fungsinya dari proyek sebelumnya yaitu proyek Lampu Lintas. Fungsi yang ditambahkan adalah lampu penyebrang jalan. Saat penyebrang menekan saklar untuk menyebrang jalan, lampu lalu lintas akan berganti menjadi orange, lalu merah, kemudian lampu penyebrang jalan akan menyala hijau. Setelah sekian detik waktu, lampu penyebrang jalan akan berganti merah, lampu lalulintas akan kembali berjalan normal.
Jadi dalam proyek ini kita juga belajar menangkap input dari luar sistem, juga mengenal tipe data baru yaitu unsigned long.
Komponen
2 LED merah
1 LED kuning
2 LED hijau
1 resistor 10 kiloohm
5 resistor
1 pushbutton
Skema
Sketch
// Project 4 - Interactive Traffic Lights
int carRed = 12; // assign the car lights
int carYellow = 11;
int carGreen = 10;int pedRed = 9; // assign the pedestrian lights
int pedGreen = 8;
int button = 2; // button pin
int crossTime = 5000; // time allowed to cross
unsigned long changeTime = 0; // time last pedestrian cycle completed
void setup() {
pinMode(carRed, OUTPUT);
pinMode(carYellow, OUTPUT);
pinMode(carGreen, OUTPUT);
pinMode(pedRed, OUTPUT);
pinMode(pedGreen, OUTPUT);
pinMode(button, INPUT); // button on pin 2
// turn on the green light
digitalWrite(carGreen, HIGH);
digitalWrite(pedRed, HIGH);
}
void loop() {
int state = digitalRead(button);
/* check if button is pressed and it is over 5 seconds since last button press */
if (state == HIGH && (millis() - changeTime) > 5000) {
// Call the function to change the lights
changeLights();
}
}
void changeLights() {
digitalWrite(carGreen, LOW); // green off
digitalWrite(carYellow, HIGH); // yellow on
delay(2000); // wait 2 seconds
digitalWrite(carYellow, LOW); // yellow off
digitalWrite(carRed, HIGH); // red on
delay(1000); // wait 1 second till its safe
digitalWrite(pedRed, LOW); // ped red off
digitalWrite(pedGreen, HIGH); // ped green on
delay(crossTime); // wait for preset time period
// flash the ped green
for (int x=0; x<10; x++) {
digitalWrite(pedGreen, HIGH);
delay(250);
digitalWrite(pedGreen, LOW);
delay(250);
}
// turn ped red on
digitalWrite(pedRed, HIGH);
delay(500);
digitalWrite(carYellow, HIGH); // yellow on
digitalWrite(carRed, LOW); // red off
delay(1000);
digitalWrite(carGreen, HIGH);
digitalWrite(carYellow, LOW); // yellow off
// record the time since last change of lights
changeTime = millis();
// then return to the main program loop
}
Penjelasan Program
Kebanyakan dari program diatas sudah dapat Anda pahami, karena mirip dengan proyek sebelumnya. Disini ada hal baru yaitu tipe data baru unsigned long
unsigned long changeTime = 0;
tipe data integer mampu menyimpan angka dari −32,768 and 32,767, sementara long −2,147,483,648 to 2,147,483,647. kata keyword unsigned membuat variable changeTime mampu menampung angka 0 to 4,294,967,295. Pemilihan tipe data diatas agar variable tidak overflow dan program menjadi error secara logik.
Sempat terpikir oleh saya, mengapa gak semua pake tipe data long aja.. biar gak pusing. Nah, dikarenakan chip ATMega328 ini dibuat dengan resource yang minimum, kita harus pintar memilah tipe data agar tidak memboroskan resource.
Untuk menunggu input dari luar sistem, kita harus menentukan pin mana yang akan menjadi input.
pinMode(button, INPUT); // set pin sebagai input
Kemudian pada fungsi loop() kita menunggu input dari user, dan melakukan pengecekan, apakah ada input dari luar sistem.
void loop() {
int state = digitalRead(button);
/* check if button is pressed and it is over 5 seconds since last button press */
if (state == HIGH && (millis() - changeTime) > 5000) {
// Call the function to change the lights
changeLights();
}
}
Perintah if diatas akan melakukan cek, jika button ditekan dan waktu sekarang (semenjak Arduino menyala) - kurangi variable changeTime lebih besar dari 5000. Jika kedua syarat dipenuhi maka perintah fungsi changeLights() didalam blok if akan dijalankan.
Pada Proyek ini, kita juga belajar mengenai pull-down resistor. Untuk lebih detail mengenai pull-down resistor click disini.
Artikel Sebelumnya : Proyek Lampu Lalu Lintas
Artikel Selanjutnya : Proyek LED Chase Effect
Jadi dalam proyek ini kita juga belajar menangkap input dari luar sistem, juga mengenal tipe data baru yaitu unsigned long.
Komponen
2 LED merah
1 LED kuning
2 LED hijau
1 resistor 10 kiloohm
5 resistor
1 pushbutton
Skema
Sketch
// Project 4 - Interactive Traffic Lights
int carRed = 12; // assign the car lights
int carYellow = 11;
int carGreen = 10;int pedRed = 9; // assign the pedestrian lights
int pedGreen = 8;
int button = 2; // button pin
int crossTime = 5000; // time allowed to cross
unsigned long changeTime = 0; // time last pedestrian cycle completed
void setup() {
pinMode(carRed, OUTPUT);
pinMode(carYellow, OUTPUT);
pinMode(carGreen, OUTPUT);
pinMode(pedRed, OUTPUT);
pinMode(pedGreen, OUTPUT);
pinMode(button, INPUT); // button on pin 2
// turn on the green light
digitalWrite(carGreen, HIGH);
digitalWrite(pedRed, HIGH);
}
void loop() {
int state = digitalRead(button);
/* check if button is pressed and it is over 5 seconds since last button press */
if (state == HIGH && (millis() - changeTime) > 5000) {
// Call the function to change the lights
changeLights();
}
}
void changeLights() {
digitalWrite(carGreen, LOW); // green off
digitalWrite(carYellow, HIGH); // yellow on
delay(2000); // wait 2 seconds
digitalWrite(carYellow, LOW); // yellow off
digitalWrite(carRed, HIGH); // red on
delay(1000); // wait 1 second till its safe
digitalWrite(pedRed, LOW); // ped red off
digitalWrite(pedGreen, HIGH); // ped green on
delay(crossTime); // wait for preset time period
// flash the ped green
for (int x=0; x<10; x++) {
digitalWrite(pedGreen, HIGH);
delay(250);
digitalWrite(pedGreen, LOW);
delay(250);
}
// turn ped red on
digitalWrite(pedRed, HIGH);
delay(500);
digitalWrite(carYellow, HIGH); // yellow on
digitalWrite(carRed, LOW); // red off
delay(1000);
digitalWrite(carGreen, HIGH);
digitalWrite(carYellow, LOW); // yellow off
// record the time since last change of lights
changeTime = millis();
// then return to the main program loop
}
Penjelasan Program
Kebanyakan dari program diatas sudah dapat Anda pahami, karena mirip dengan proyek sebelumnya. Disini ada hal baru yaitu tipe data baru unsigned long
unsigned long changeTime = 0;
tipe data integer mampu menyimpan angka dari −32,768 and 32,767, sementara long −2,147,483,648 to 2,147,483,647. kata keyword unsigned membuat variable changeTime mampu menampung angka 0 to 4,294,967,295. Pemilihan tipe data diatas agar variable tidak overflow dan program menjadi error secara logik.
Sempat terpikir oleh saya, mengapa gak semua pake tipe data long aja.. biar gak pusing. Nah, dikarenakan chip ATMega328 ini dibuat dengan resource yang minimum, kita harus pintar memilah tipe data agar tidak memboroskan resource.
Untuk menunggu input dari luar sistem, kita harus menentukan pin mana yang akan menjadi input.
pinMode(button, INPUT); // set pin sebagai input
Kemudian pada fungsi loop() kita menunggu input dari user, dan melakukan pengecekan, apakah ada input dari luar sistem.
void loop() {
int state = digitalRead(button);
/* check if button is pressed and it is over 5 seconds since last button press */
if (state == HIGH && (millis() - changeTime) > 5000) {
// Call the function to change the lights
changeLights();
}
}
Perintah if diatas akan melakukan cek, jika button ditekan dan waktu sekarang (semenjak Arduino menyala) - kurangi variable changeTime lebih besar dari 5000. Jika kedua syarat dipenuhi maka perintah fungsi changeLights() didalam blok if akan dijalankan.
Pada Proyek ini, kita juga belajar mengenai pull-down resistor. Untuk lebih detail mengenai pull-down resistor click disini.
Artikel Sebelumnya : Proyek Lampu Lalu Lintas
Artikel Selanjutnya : Proyek LED Chase Effect
08 - Proyek Lampu Lalu Lintas Advanced
Reviewed by MCH
on
January 27, 2014
Rating:
No comments: