Pada percobaan dalam posting sebelumnya, kita sudah mencoba menyalakan dan memadamkan LED pada board dan menerima input dari pushbutton untuk mengatur LED. Pada percobaan ini, kita akan mencoba mengendalikan intensitas cahaya dari LED, bukan hanya menyalakan dan memadamkan saja.
Sebelumnya, pin yang digunakan hanya dapat mengeluarkan dua nilai saja yaitu LOW dan HIGH. Pada percobaan ini, kita akan memakai pin yang dapat mengeluarkan nilai di antara LOW dan HIGH dengan teknik pulse width modulation (PWM). Pin tersebut memiliki range antara 0 sampai 255. Dengan rentang nilai tersebut kita dapat mengendalikan intensitas cahaya LED antara padam (0) sampai paling terang (255), tidak terbatas menyalakan dan memadamkan saja.
Peralatan yang digunakan pada percobaan ini adalah
Sebelumnya, pin yang digunakan hanya dapat mengeluarkan dua nilai saja yaitu LOW dan HIGH. Pada percobaan ini, kita akan memakai pin yang dapat mengeluarkan nilai di antara LOW dan HIGH dengan teknik pulse width modulation (PWM). Pin tersebut memiliki range antara 0 sampai 255. Dengan rentang nilai tersebut kita dapat mengendalikan intensitas cahaya LED antara padam (0) sampai paling terang (255), tidak terbatas menyalakan dan memadamkan saja.
Peralatan yang digunakan pada percobaan ini adalah
- Board Arduino Uno + konektor PC
- LED
- Pushbutton
- Resistor 10K Ohm
- Kabel tembaga
Memberikan Efek Fade-in dan Fade-out pada LED
Pada percobaan ini intensitas cahaya LED akan dinaikkan kemudian diturunkan secara periodik untuk menciptakan efek fade.
Rangkaian
Source Code
const int LED = 7; // LED pada pin 7
int i = 0; // Nilai output
void setup() {
pinMode(LED, OUTPUT); //Set pin 7 sebagai output
}
void loop(){
for (i = 0; i < 255; i++) { // loop nilai i dari 0 ke 255
analogWrite(LED, i); // mengeluarkan nilai i pada pin LED
delay(10); // Jeda 10 ms agar hasilnya kelihatan
}
for (i = 255; i > 0; i--) { // loop nilai i dari 0 ke 255
analogWrite(LED, i); // mengeluarkan nilai i pada pin LED
delay(10); // Jeda 10 ms agar hasilnya kelihatan
}
}
pinMode(LED, OUTPUT); //Set pin 7 sebagai output
}
void loop(){
for (i = 0; i < 255; i++) { // loop nilai i dari 0 ke 255
analogWrite(LED, i); // mengeluarkan nilai i pada pin LED
delay(10); // Jeda 10 ms agar hasilnya kelihatan
}
for (i = 255; i > 0; i--) { // loop nilai i dari 0 ke 255
analogWrite(LED, i); // mengeluarkan nilai i pada pin LED
delay(10); // Jeda 10 ms agar hasilnya kelihatan
}
}
Penjelasan :
Intensitas cahaya LED ditentukan oleh variabel i yang memiliki nilai minimum 0 (padam) dan nilai maksimum 255 (paling terang). Nilai variabel inilah yang akan terus berubah selama program berjalan. Ketika fungsi loop() dijalankan, perintah iterasi untuk menaikkan nilai i sampai batas maksimum (255) kemudian menurunkan nilai i sampai batas minimum (0) terus diulang. Nilai i naik/turun dalam waktu 10 ms agar perubahan tidak terlalu cepat sehingga dapat dilihat. Nilai i yang terus berubah naik turun secara periodik menghasilkan efek fade pada LED.
Video
Menyalakan LED jika Pushbutton Ditekan, Mengubah Tingkat Intensitas LED jika Pushbutton Ditahan
Pada percobaan ini LED bertransisi antara menyala dan padam ketika pushbutton ditekan dan mengalami perubahan intensitas cahaya jika pushbutton ditahan selama 0,5 detik dalam keadaan menyala.
Rangkaian |
Source Code
const int LED = 9; //LED pada pin 9
const int BUTTON = 7; // Pushbutton pada pin 7
int val = 0; // Nilai input
int old_val = 0; // Nilai input sebelumnya
int state = 0; // 0 = LED padam, 1 = LED menyala
int brightness = 128; // Nilai intensitas cahaya LED
unsigned long startTime = 0; // Waktu mulai
void setup() {
pinMode(LED, OUTPUT);
pinMode(BUTTON, INPUT);
}
void loop() {
val = digitalRead(BUTTON); // baca nilai input pushbutton
//Memeriksa apakah pushbbutton sedang ditekan
//Nilai input pushbutton HIGH, sementara nilai input sebelumnya LOW
if ((val == HIGH) && (old_val == LOW)) {
state = 1 - state; //Mengganti state LED antara menyala dan padam
startTime = millis();//Waktu mulai
delay(10);//Filter
}
// Memeriksa apakah pushbbutton sedang ditahan
// Nilai input pushbutton dan sebelumnya HIGH,
if ((val == HIGH) && (old_val == HIGH)) {
// Jika pushbutton ditahan lebih dari 500 ms dan LED sedang menyala
if (state == 1 && (millis() - startTime) > 500) {
brightness++; // Menaikkan tingkat intensitas cahaya LED sebesar 1
delay(10); //Jeda 10 ms agar perubahan dapat terlihat
if (brightness > 255) { //Jika sudah mencapai nilai maksimum
brightness = 0; // Kembali ke 0
}
}
}
old_val = val; // Menyimpan nilai input pushbutton yang lama
if (state == 1) {
analogWrite(LED, brightness);
// Menyalakan LED dengan intensitas tertentu
} else {
analogWrite(LED, 0); //Memadamkan LED
}
}
Jika pushbutton ditahan selama 0,5 detik dan LED dalam keadaan menyala, nilai variabel brightness bertambah sebesar 1 setiap 10 ms selama pushbutton belum dilepas. Nilai variabel akan kembali ke 0 (LED padam) setelah nilai variabel mencapai nilai 255 (LED menyala paling terang). Intensitas LED akan terus berubah dari padam ke terang kemudian padam lagi selama pushbutton ditahan.
const int BUTTON = 7; // Pushbutton pada pin 7
int val = 0; // Nilai input
int old_val = 0; // Nilai input sebelumnya
int state = 0; // 0 = LED padam, 1 = LED menyala
int brightness = 128; // Nilai intensitas cahaya LED
unsigned long startTime = 0; // Waktu mulai
void setup() {
pinMode(LED, OUTPUT);
pinMode(BUTTON, INPUT);
}
void loop() {
val = digitalRead(BUTTON); // baca nilai input pushbutton
//Memeriksa apakah pushbbutton sedang ditekan
//Nilai input pushbutton HIGH, sementara nilai input sebelumnya LOW
if ((val == HIGH) && (old_val == LOW)) {
state = 1 - state; //Mengganti state LED antara menyala dan padam
startTime = millis();//Waktu mulai
delay(10);//Filter
}
// Memeriksa apakah pushbbutton sedang ditahan
// Nilai input pushbutton dan sebelumnya HIGH,
if ((val == HIGH) && (old_val == HIGH)) {
// Jika pushbutton ditahan lebih dari 500 ms dan LED sedang menyala
if (state == 1 && (millis() - startTime) > 500) {
brightness++; // Menaikkan tingkat intensitas cahaya LED sebesar 1
delay(10); //Jeda 10 ms agar perubahan dapat terlihat
if (brightness > 255) { //Jika sudah mencapai nilai maksimum
brightness = 0; // Kembali ke 0
}
}
}
old_val = val; // Menyimpan nilai input pushbutton yang lama
if (state == 1) {
analogWrite(LED, brightness);
// Menyalakan LED dengan intensitas tertentu
} else {
analogWrite(LED, 0); //Memadamkan LED
}
}
Penjelasan :
Intensitas cahaya LED ditentukan oleh variabel brightness yang memiliki nilai minimum 0 (padam) dan nilai maksimum 255 (paling terang). Ketika program dijalankan, board sudah siap menerima input dari pushbutton. Saat pushbutton ditekan, val bernilai HIGH sehingga program menjalankan perintah untuk mengganti state LED antara menyala dan padam. Selain itu waktu ketika pushbutton ditekan disimpan di dalam variabel startTime.
Jika pushbutton ditahan selama 0,5 detik dan LED dalam keadaan menyala, nilai variabel brightness bertambah sebesar 1 setiap 10 ms selama pushbutton belum dilepas. Nilai variabel akan kembali ke 0 (LED padam) setelah nilai variabel mencapai nilai 255 (LED menyala paling terang). Intensitas LED akan terus berubah dari padam ke terang kemudian padam lagi selama pushbutton ditahan.
Ada kodingnya untuk kecerahan led bertambah ketika ditekan lalu berkurang? Terimakasih
BalasHapushalo kakak,bisa bantu metode apa yang membedakan terang dan gelap?
BalasHapusrentang nilainya berapa?