Catatan Belajar oleh : Reza Ervani bin Asmanu
Secara teknis, jawabannya adalah “Ya” dan “Tidak”.
Secara syntax (tata bahasa), Arduino itu 100% C++. Compiler yang digunakan Arduino (biasanya avr-g++ atau xtensa-lx106-elf-g++ untuk ESP8266/ESP32) adalah compiler C++ standar. Semua fitur C++ seperti Class, Object, Inheritance, dan Pointer bisa digunakan di Arduino.
Namun, secara filosofi dan lingkungan (environment), ada perbedaan mendasar yang membuat “rasa” coding-nya berbeda.
Berikut adalah perbedaannya yang paling signifikan:
1. Titik Awal Program (Entry Point)
Ini adalah perbedaan yang paling terlihat oleh pemula.
- C++ Biasa (Standard): Program selalu dimulai dari fungsi
main(). Jika fungsi ini selesai, program berhenti. - Arduino: Anda tidak menulis
main(). Anda diberikan dua fungsi wajib:setup()(dijalankan sekali) danloop()(dijalankan berulang-ulang selamanya).- Fakta Unik: Sebenarnya di balik layar, Arduino IDE membuatkan fungsi
main()tersembunyi yang memanggilsetup()lalu memanggilloop()di dalamwhile(1).
- Fakta Unik: Sebenarnya di balik layar, Arduino IDE membuatkan fungsi
2. Standard Template Library (STL) vs Arduino Core
- C++ Biasa: Sangat bergantung pada STL (Standard Template Library). Anda biasa menggunakan
std::vector,std::map,std::string, danstd::coutuntuk output ke layar. - Arduino:
- Di mikrokontroler kecil (seperti Arduino Uno/Nano), STL biasanya tidak ada atau sangat terbatas karena memakan banyak memori.
- Sebagai gantinya, Arduino menyediakan Arduino Core API (seperti
Stringobject,digitalWrite,Serial.print). - Catatan: Pada board yang lebih kuat seperti ESP32, Anda bisa menggunakan sebagian fitur STL (seperti
std::vectorataustd::string) karena RAM-nya cukup besar.
3. Akses Hardware (Abstraksi)
- C++ Biasa (di PC): Anda tidak bisa langsung menyalakan lampu LED di keyboard atau membaca voltase dari port USB hanya dengan satu baris kode. Anda berurusan dengan OS (Windows/Linux) dan Driver.
- Arduino: Didesain untuk “Bare Metal”. Anda punya akses langsung ke hardware melalui fungsi pembungkus (wrapper) yang mudah.
- Contoh:
digitalWrite(13, HIGH)adalah fungsi C++ yang membungkus manipulasi register memori mikrokontroler yang rumit agar mudah dibaca manusia.
- Contoh:
4. Manajemen Memori (Sangat Krusial)
- C++ Biasa: PC modern punya RAM bergiga-giga. Memory Leak kecil atau penggunaan objek yang boros seringkali tidak langsung mematikan program.
- Arduino: Anda bekerja dengan batasan ekstrem (Arduino Uno hanya punya 2KB RAM!).
- Di Arduino, penggunaan
newdandelete(alokasi memori dinamis) sangat tidak disarankan kecuali Anda tahu persis apa yang Anda lakukan, karena bisa menyebabkan fragmentasi memori (heap fragmentation) yang membuat mikrokontroler macet (hang) setelah beberapa jam/hari berjalan.
- Di Arduino, penggunaan
5. Prototipe Fungsi
- C++ Biasa: Anda harus mendeklarasikan fungsi di atas
main()atau menggunakan file header (.h) sebelum fungsi itu dipanggil. Jika tidak, akan error. - Arduino: Arduino IDE melakukan proses pre-processing. Ia secara otomatis memindai kode Anda dan membuatkan prototipe fungsi di bagian atas sebelum di-compile. Jadi, Anda bisa memanggil fungsi yang letaknya di bawah fungsi pemanggil tanpa error.
Tabel Perbandingan Singkat
| Fitur | C++ Biasa (PC) | C++ Arduino |
| Compiler | GCC / Clang / MSVC | GCC (avr/xtensa/arm) |
| Struktur | int main() { ... } | void setup(), void loop() |
| Output | std::cout << "Hello"; | Serial.print("Hello"); |
| String | std::string | String Object (atau char[]) |
| Library Utama | STL (<vector>, <iostream>) | Wiring / Arduino.h |
| Tujuan | Software Aplikasi / OS | Kontrol Hardware / IoT |
Contoh Kode
C++ Standar:
#include <iostream>
// Entry point wajib
int main() {
std::cout << "Hello World" << std::endl;
return 0;
}
Arduino:
// Tidak ada main(), tapi setup dan loop
void setup() {
Serial.begin(9600);
}
void loop() {
// Pengganti cout
Serial.println("Hello World");
delay(1000);
}
Kesimpulan
Jika Anda mahir C++ biasa, Anda sudah menguasai 80% pemrograman Arduino. Sisanya adalah belajar tentang register hardware, keterbatasan memori, dan library spesifik Arduino.
