Apakah Ada Perbedaan C++ Biasa dengan Arduino ?

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) dan loop() (dijalankan berulang-ulang selamanya).
    • Fakta Unik: Sebenarnya di balik layar, Arduino IDE membuatkan fungsi main() tersembunyi yang memanggil setup() lalu memanggil loop() di dalam while(1).

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, dan std::cout untuk 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 String object, digitalWrite, Serial.print).
    • Catatan: Pada board yang lebih kuat seperti ESP32, Anda bisa menggunakan sebagian fitur STL (seperti std::vector atau std::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.

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 new dan delete (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.

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

FiturC++ Biasa (PC)C++ Arduino
CompilerGCC / Clang / MSVCGCC (avr/xtensa/arm)
Strukturint main() { ... }void setup(), void loop()
Outputstd::cout << "Hello";Serial.print("Hello");
Stringstd::stringString Object (atau char[])
Library UtamaSTL (<vector>, <iostream>)Wiring / Arduino.h
TujuanSoftware Aplikasi / OSKontrol 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.