Rangkaian Led Trainner IoT
Sebelum Menyalakan LED dengan Arduino ESP32, kita lihat dulu rangkaian LED nya pada trainner IoT SKU01. Agar nanti program yang kita buat sesuai dengan yang kita harapkan. Rangkaian nya adalah sebagai berikut.
Pada Rangkaian di atas, GPIO ESP32 terhubung ke LED melalui sebuah resistor dengan nilai tahanan 4.7k Ohm. Resistor ini berfungsi untuk mengurangi beban arus pada pin GPIO , Sehingga ESP32 nya menjadi awet dan LED yang akan hidup tahan, tidak Rusak.
Nah karena LED hanya melewatkan tegangan dari Anoda ke Katoda, dimana Anoda terhubung ke GPIO, sementara Katoda terhubung ke GND, maka, LED akan menyala jika GPIO memiliki Tegangan, atau Kondisi Satu, dan LED akan Padam jika GPIO tidak bertegangan atau Kondisi LOW.
Menyalakan dan Mematikan LED
Berikut Contoh program menyalakan dan mematikan LED
byte pin_led1 = 17;
void setup() {
// put your setup code here, to run once:
pinMode(pin_led1, OUTPUT);
}
void loop() {
// put your main code here, to run repeatedly:
digitalWrite(pin_led1, HIGH);
delay(100);
digitalWrite(pin_led1, LOW);
delay(100);
}
Compile dan upload program di atas, apakah yang Terjadi?
Penjelasan Program di Atas adalah Sebagai berikut,
byte pin_led1 = 17;
pin_led1 adalah sebuah Variable dengan tipe data byte, bingung apa itu tipe data Arduino, click button di bawah ini,
Variable pin_led1 ini menyimpan angka dengan nilai 17.
void setup() {
// put your setup code here, to run once:
pinMode(pin_led1, OUTPUT);
}
Pada program pinMode(pin_led1, OUTPUT) maksud nya adalah sama dengan pinMode(17, OUTPUT), Arti nya GPIO17 ESP32 kita setting sebagai OUTPUT. Bisa lihat pada rangkaian di atas. Pada fungsi void setup hanya akan di jalankan sekali ketika Arduino ESP32 pertama kali di hidupkan. Jika ingin lebih jelas tentang fungsi void setup() dan void loop(), bisa click link Tombol di bawah ini
void loop() {
// put your main code here, to run repeatedly:
digitalWrite(pin_led1, HIGH);
delay(100);
digitalWrite(pin_led1, LOW);
delay(100);
}
Fungsi void loop() di atas adalah main program, sebuah fungsi yang akan berjalan secara berulang-ulang secara terus menerus sampai power supply Arduino di matikan.
digitalWrite(pin_led1, HIGH); maksud nya adalah GPIO17 di set Logika HIGH ( Mengeluarkan tegangan 3.3v), sehingga LED menyala, dan di tahan selama 100ms ( delay(1000) ); Begitu juga dengan digitalWrite(pin_led1, LOW); yang mana GPIO17 di set LOW ( tidak ada tegangan ).
Tugas 1 Menyalakan LED
Buat lah program LED dengan Mode berikut.
- Menyalakan dan Mematikan 8 channel LED dengan interval waktu selama 50ms
- Menyalakan 1 LED kemudian bergeser ke kiri
- Menyalakan 2 LED kemudian bergeser ke kanan
Saya harap teman-teman mengerjakan 3 Tugas di atas tanpa scroll ke bawah sebagai jawaban dari tugas ini.
LED 8 channel Flip-Flop dan Geser
Sekarang kita akan mencoba mengerjakan Tugas di atas, Menyalakan dan mematikan LED 8 Channel dengan jeda waktu selama 50ms. Bagaimana mana kah program nya? yuk kita coba contoh program panjang nya.
Flip-flop 8 channel
byte pin_led1 = 17;
byte pin_led2 = 16;
byte pin_led3 = 2;
byte pin_led4 = 15;
byte pin_led5 = 5;
byte pin_led6 = 18;
byte pin_led7 = 19;
byte pin_led8 = 23;
void setup() {
// put your setup code here, to run once:
pinMode(pin_led1, OUTPUT);
pinMode(pin_led2, OUTPUT);
pinMode(pin_led3, OUTPUT);
pinMode(pin_led4, OUTPUT);
pinMode(pin_led5, OUTPUT);
pinMode(pin_led6, OUTPUT);
pinMode(pin_led7, OUTPUT);
pinMode(pin_led8, OUTPUT);
}
void loop() {
// put your main code here, to run repeatedly:
digitalWrite(pin_led1, HIGH);
digitalWrite(pin_led2, HIGH);
digitalWrite(pin_led3, HIGH);
digitalWrite(pin_led4, HIGH);
digitalWrite(pin_led5, HIGH);
digitalWrite(pin_led6, HIGH);
digitalWrite(pin_led7, HIGH);
digitalWrite(pin_led8, HIGH);
delay(100);
digitalWrite(pin_led1, LOW);
digitalWrite(pin_led2, LOW);
digitalWrite(pin_led3, LOW);
digitalWrite(pin_led4, LOW);
digitalWrite(pin_led5, LOW);
digitalWrite(pin_led6, LOW);
digitalWrite(pin_led7, LOW);
digitalWrite(pin_led8, LOW);
delay(100);
}
Penjelasan program flip-flop 8 channel ini sama dengan contoh program di atas.
Mode Geser Kiri
byte pin_led1 = 17;
byte pin_led2 = 16;
byte pin_led3 = 2;
byte pin_led4 = 15;
byte pin_led5 = 5;
byte pin_led6 = 18;
byte pin_led7 = 19;
byte pin_led8 = 23;
void setup() {
// put your setup code here, to run once:
pinMode(pin_led1, OUTPUT);
pinMode(pin_led2, OUTPUT);
pinMode(pin_led3, OUTPUT);
pinMode(pin_led4, OUTPUT);
pinMode(pin_led5, OUTPUT);
pinMode(pin_led6, OUTPUT);
pinMode(pin_led7, OUTPUT);
pinMode(pin_led8, OUTPUT);
}
void loop() {
// put your main code here, to run repeatedly:
digitalWrite(pin_led1, HIGH);delay(50);
digitalWrite(pin_led2, HIGH);delay(50);
digitalWrite(pin_led3, HIGH);delay(50);
digitalWrite(pin_led4, HIGH);delay(50);
digitalWrite(pin_led5, HIGH);delay(50);
digitalWrite(pin_led6, HIGH);delay(50);
digitalWrite(pin_led7, HIGH);delay(50);
digitalWrite(pin_led8, HIGH);delay(50);
digitalWrite(pin_led1, LOW);delay(50);
digitalWrite(pin_led2, LOW);delay(50);
digitalWrite(pin_led3, LOW);delay(50);
digitalWrite(pin_led4, LOW);delay(50);
digitalWrite(pin_led5, LOW);delay(50);
digitalWrite(pin_led6, LOW);delay(50);
digitalWrite(pin_led7, LOW);delay(50);
digitalWrite(pin_led8, LOW);delay(50);
}
disini led akan di nyalakan secara berturut turut kemudian mematikan secara berturut-turut selama 50milli seconds. Sementara program untuk menyala ke kanan secara berturut turut berarti urutan LED nya di balik, seperti program yang ada di bawah ini.
Mode Geser ke Kanan
byte pin_led1 = 17;
byte pin_led2 = 16;
byte pin_led3 = 2;
byte pin_led4 = 15;
byte pin_led5 = 5;
byte pin_led6 = 18;
byte pin_led7 = 19;
byte pin_led8 = 23;
void setup() {
// put your setup code here, to run once:
pinMode(pin_led1, OUTPUT);
pinMode(pin_led2, OUTPUT);
pinMode(pin_led3, OUTPUT);
pinMode(pin_led4, OUTPUT);
pinMode(pin_led5, OUTPUT);
pinMode(pin_led6, OUTPUT);
pinMode(pin_led7, OUTPUT);
pinMode(pin_led8, OUTPUT);
}
void loop() {
// put your main code here, to run repeatedly:
digitalWrite(pin_led8, HIGH);delay(50);
digitalWrite(pin_led7, HIGH);delay(50);
digitalWrite(pin_led6, HIGH);delay(50);
digitalWrite(pin_led5, HIGH);delay(50);
digitalWrite(pin_led4, HIGH);delay(50);
digitalWrite(pin_led3, HIGH);delay(50);
digitalWrite(pin_led2, HIGH);delay(50);
digitalWrite(pin_led1, HIGH);delay(50);
digitalWrite(pin_led8, LOW);delay(50);
digitalWrite(pin_led7, LOW);delay(50);
digitalWrite(pin_led6, LOW);delay(50);
digitalWrite(pin_led5, LOW);delay(50);
digitalWrite(pin_led4, LOW);delay(50);
digitalWrite(pin_led3, LOW);delay(50);
digitalWrite(pin_led2, LOW);delay(50);
digitalWrite(pin_led1, LOW);delay(50);
}
Tugas
Buat lah program untuk menyalakan LED seperti berikut
- LED 8 channel Menyala dan Padam selama 5 kali, kemudian Kekiri Selama 5 kali dan Ke kanan selama 5 Kali.
Membuat Fungsi Mode LED
Jika mengerjakan Tugas di atas dengan cara program seperti contoh di atas, maka program akan menjadi sangat panjang. Karena ada program berulang-ulang yang di copy paste secara berulang-ulang. Ada cara agar mencegah pengetikan program secara berulang-ulang, cara nya adalah menggunakan sebuah fungsi. Kemudian fungsi akan kita panggil secara berulang-ulang. Bagaimana kah contoh nya? mari kita buat program nya
byte pin_led1 = 17;
byte pin_led2 = 16;
byte pin_led3 = 2;
byte pin_led4 = 15;
byte pin_led5 = 5;
byte pin_led6 = 18;
byte pin_led7 = 19;
byte pin_led8 = 23;
void setup() {
// put your setup code here, to run once:
pinMode(pin_led1, OUTPUT);
pinMode(pin_led2, OUTPUT);
pinMode(pin_led3, OUTPUT);
pinMode(pin_led4, OUTPUT);
pinMode(pin_led5, OUTPUT);
pinMode(pin_led6, OUTPUT);
pinMode(pin_led7, OUTPUT);
pinMode(pin_led8, OUTPUT);
}
void loop() {
// put your main code here, to run repeatedly:
on_off();
on_off();
on_off();
on_off();
on_off();
geser_kiri();
geser_kiri();
geser_kiri();
geser_kiri();
geser_kiri();
geser_kanan();
geser_kanan();
geser_kanan();
geser_kanan();
geser_kanan();
}
void on_off() {
digitalWrite(pin_led1, HIGH);
digitalWrite(pin_led2, HIGH);
digitalWrite(pin_led3, HIGH);
digitalWrite(pin_led4, HIGH);
digitalWrite(pin_led5, HIGH);
digitalWrite(pin_led6, HIGH);
digitalWrite(pin_led7, HIGH);
digitalWrite(pin_led8, HIGH);
delay(100);
digitalWrite(pin_led1, LOW);
digitalWrite(pin_led2, LOW);
digitalWrite(pin_led3, LOW);
digitalWrite(pin_led4, LOW);
digitalWrite(pin_led5, LOW);
digitalWrite(pin_led6, LOW);
digitalWrite(pin_led7, LOW);
digitalWrite(pin_led8, LOW);
delay(100);
}
void geser_kiri() {
digitalWrite(pin_led1, HIGH); delay(50);
digitalWrite(pin_led2, HIGH); delay(50);
digitalWrite(pin_led3, HIGH); delay(50);
digitalWrite(pin_led4, HIGH); delay(50);
digitalWrite(pin_led5, HIGH); delay(50);
digitalWrite(pin_led6, HIGH); delay(50);
digitalWrite(pin_led7, HIGH); delay(50);
digitalWrite(pin_led8, HIGH); delay(50);
digitalWrite(pin_led1, LOW); delay(50);
digitalWrite(pin_led2, LOW); delay(50);
digitalWrite(pin_led3, LOW); delay(50);
digitalWrite(pin_led4, LOW); delay(50);
digitalWrite(pin_led5, LOW); delay(50);
digitalWrite(pin_led6, LOW); delay(50);
digitalWrite(pin_led7, LOW); delay(50);
digitalWrite(pin_led8, LOW); delay(50);
}
void geser_kanan() {
digitalWrite(pin_led8, HIGH); delay(50);
digitalWrite(pin_led7, HIGH); delay(50);
digitalWrite(pin_led6, HIGH); delay(50);
digitalWrite(pin_led5, HIGH); delay(50);
digitalWrite(pin_led4, HIGH); delay(50);
digitalWrite(pin_led3, HIGH); delay(50);
digitalWrite(pin_led2, HIGH); delay(50);
digitalWrite(pin_led1, HIGH); delay(50);
digitalWrite(pin_led8, LOW); delay(50);
digitalWrite(pin_led7, LOW); delay(50);
digitalWrite(pin_led6, LOW); delay(50);
digitalWrite(pin_led5, LOW); delay(50);
digitalWrite(pin_led4, LOW); delay(50);
digitalWrite(pin_led3, LOW); delay(50);
digitalWrite(pin_led2, LOW); delay(50);
digitalWrite(pin_led1, LOW); delay(50);
}
Program di atas mempunyai tiga fungsi mode led yaitu
void on_off(){
//program on off
}
void geser_kiri(){
//program geser kiri
}
void geser_kanan(){
//program geser kanan
}
Ketiga fungsi ini akan di panggil fungsi utama ( void loop); Cara nya adalah sebagai berikut
void loop(){
on_off();
on_off();
on_off();
on_off();
on_off();
geser_kiri();
geser_kiri();
geser_kiri();
geser_kiri();
geser_kiri();
geser_kanan();
geser_kanan();
geser_kanan();
geser_kanan();
geser_kanan();
}
Program di atas masih terasa sangat panjang, padahal code yang bagus adalah code yang singkat, ringkas, pendek, namun dengan cara kerja yang sama, bagaimana kah cara mempersingkat program di atas? yuk kita coba.
Code yang lebih singkat, padat dan ringkas itu lebih baik dari pada program yang panjang.
rule pemrograman
Mempersingkat Program
byte pin_led[] = {17, 16, 2, 15, 5, 18, 19, 23};
void setup() {
// put your setup code here, to run once:
for (int i = 0; i < sizeof(pin_led); i++) {
pinMode(pin_led[i], OUTPUT);
}
}
void loop() {
// put your main code here, to run repeatedly:
for (int i = 0; i < 5; i++) {
on_off();
}
for (int i = 0; i < 5; i++) {
geser_kiri();
}
for (int i = 0; i < 5; i++) {
geser_kanan();
}
}
void on_off() {
for (int i = 0; i < sizeof(pin_led); i++) {
digitalWrite(pin_led[i], HIGH);
}
delay(100);
for (int i = 0; i < sizeof(pin_led); i++) {
digitalWrite(pin_led[i], LOW);
}
delay(100);
}
void geser_kiri() {
for (int i = 0; i < sizeof(pin_led); i++) {
digitalWrite(pin_led[i], HIGH); delay(50);
}
for (int i = 0; i < sizeof(pin_led); i++) {
digitalWrite(pin_led[i], LOW); delay(50);
}
}
void geser_kanan() {
for (int i = sizeof(pin_led); i > 0; i--) {
digitalWrite(pin_led[i], HIGH); delay(50);
}
for (int i = sizeof(pin_led); i > 0; i--) {
digitalWrite(pin_led[i], LOW); delay(50);
}
}
Dengan menggunakan fungsi perulangan for dan Array maka program menjadi lebih singkat.
Selamat mencoba di trainner iot kita , Sekian dulu materi belajar hari ini Semoga bermanfaat