Pernah ga punya pertanyaan “setelah klik compile di Arduino IDE, apa sih proses yang terjadi dibelakang layar ?”. Nah, saat kita klik Compile, Arduino IDE akan pelakukan proses Preprocessing dimana file dengan ekstensi .ino dikonversi menjadi Bahasa C++ dan menambahkan header #include <Arduino.h>. setelah preprocessing lanjut ke proses compiling, yaitu mengubah High Level Code (C++) menjadi Low Level Code (kode biner), sebuah Bahasa yang dipahami oleh mikrokontroller. Pada artikel ini saya ingin membahas mengenai proses preprocessing, kita juga bisa melakukan pengaturan pada preprocessing untuk membuat kode menjadi efisien.
Preprocessing
Sudah dijelaskan sebelumnya bahwa preprocessing akan mengubah Bahasa arduino (.ino) menjadi Bahasa C++, namun yang sebenarnya dilakukan preprocessing adalah :
1.Membaca dan mengganti makro
Makro adalah sebaris kode atau nilai yang diberi nama, Kita bisa membuat makro dan mendefinisikan nilainya dengan menggunakan #define. Ketika kita mendefinisikan sebuah makro, ketika proses compile, setiap pembacaan nama yang sama dengan makro akan secara otomatis digantikan oleh nilai yang didefinisikan pada makro. Contoh :
Pada program diatas, karena saya mendefinisikan makro dengan nama LED_PIN dan diisi nilai 13. Maka ketika proses compile setiap baris yang ada nama LED_PIN akan diganti menjadi 13. Lalu apa bedanya dengan mendeklarasikan variabel ?, perbedaan nya, Makro hanya mengganti teks pada program dengan nilai makro sedangkan deklarasi variabel akan melakukan write pada memori dan akan mengakses memori setiap variabel dibaca, intinya makro tidak memakai memori.
2. Menambahkan header #include <Arduino.h>
Proses selanjutnya adalah menambahkan header #include <Arduino.h> secara otomatis pada program. Pertanyaannya, kenapa arduino IDE menambahkan header itu di programnya ?. karena bahasa pemrogramnnya akan diubah menjadi C++, maka library Arduino.h harus ditambahkan kedalam program agar program tersebut memiliki akses ke class dan object pada Bahasa pemrograman arduino, tanpa library itu kita tidak akan bisa menggunakan fungsi-fungsi seperti pinMode(), digitalWrite(), delay(), dan ketika di compile akan muncul error seperti :
“pinMode' was not declared in this scope”
Itu artinya sebuah object yang bernama pinMode berada dalam library Arduino.h. ada 2 cara untuk menambahkan library:
#include
#include "myCustomLibrary.h"
Perbedaan antara < > dan ” “:
< >: Untuk mencari file library di folder C:\Program Files (x86)\Arduino\libraries
” “: Untuk mencari file library di folder project.
3. Seleksi kompilasi
Proses terakhir adalah menentukan baris program mana saja yang ingin dikompilasi berdasarkan suatu kondisi. Kita bisa mengatur arduino IDE agar hanya mengkompilasi program yang kita inginkan, untuk mengatur kompilasi bisa menggunakan #ifdef, #ifndef, #else, #elif, #endif, #undef.
#ifdef – Jika Simbol Telah Didefinisikan
Dengan menggunakan #ifdef, kita bisa mengkompilasi baris kode yang sebelumnya sudah di definisikan.
Dibaca : Jika DEBUG_MODE didefinisikan, maka baris Serial.println(..) akan dikompilasi.
#ifndef – Jika Simbol Tidak Didefinisikan
Dengan menggunakan #ifndef, kita bisa mengkompilasi baris kode yang makronya belum di definisikan, digunakan untuk memastikan makro hanya di proses sekali dan mencegah makro didefinisikan berkali-kali.
#ifndef LED_PIN
#define LED_PIN 13
#endif
Dibaca : Jika LED_PIN tidak didefinisikan, maka definisikan LED_PIN dengan nilai 13.
#else dan #elif
Fungsinya sama dengan conditional statement If dan Else, ini bisa memilih mana yang akan dikompilasi sesuai dengan makro yang didefinisikan. Contoh
#define DEVICE_TYPE 2
void setup() {
#if DEVICE_TYPE == 1
Serial.println("Menggunakan Sensor Jenis A");
#elif DEVICE_TYPE == 2
Serial.println("Menggunakan Sensor Jenis B");
#else
Serial.println("Sensor Tidak Diketahui");
#endif
}
Dibaca : Karena yang didefinisikan adalah DEVICE_TYPE 2, maka yang di kompilasi adalah baris program
Dibaca : karena TEMP_SENSOR 1 pendefinisiannya dibatalkan, maka baris program pembacaan sensor temperature tidak akan dikompilasi.
Pengaturan pada preprocessing bisa membantu mengoptimasi program yang kita buat, tidak harus mengkompilasi semua baris program, seleksi program mana saja yang kita butuhkan.
Satu pemikiran pada “Preprosessor Pada Pemrograman Arduino”
Start earning passive income—become our affiliate partner! https://shorturl.fm/3xSkx