Tipe Data
Selain tipe data bawaan (built-in) dan turunan (derived), Arduino memungkinkan kita membuat tipe data sendiri. Tipe ini sangat berguna untuk program besar atau kompleks, karena memudahkan pengelolaan data dan penerapan konsep pemrograman berorientasi objek (Object-Oriented Programming OOP). Tipe buatan pengguna yang umum adalah: struct, class, enum, dan union.
A. Struct (Structure)
Digunakan untuk mengelompokkan beberapa variabel dengan tipe berbeda ke dalam satu unit untuk memudahkan pengelolaan data yang saling berkaitan seperti data sensor, konfigurasi perangkat atau paket komunikasi. Sehingga, sangat efisien di Arduino untuk mengirim data dalam bentuk blok (misalnya via serial atau komunikasi I2C). Hal ini dimungkinkan karena struct hanya berisi data tanpa metode atau fungsi internal, sehingga ukuran memori yang digunakan lebih ringkas dan mudah ditransfer.

B. Class (Kelas)
Merupakan pengembangan dari struct yang mendukung Object-Oriented Programming (OOP) dengan perbedaan seperti tabel dibawah. Selain menyimpan data (properties), class juga dapat menyertakan fungsi atau metode yang mengatur perilaku objek. Class memiliki keunggulan dalam menggabungkan data dan fungsi dalam satu kesatuan, serta mendukung enkapsulasi, pewarisan (inheritance), dan polimorfisme. Hal ini menjadikannya sangat penting untuk program besar, misalnya library sensor, pengendalian robot, dan sistem OOP Arduino.

C. enum (Enumeration)
Merupakan daftar konstanta bernama yang nilainya otomatis berupa bilangan bulat (integer), dimulai dari 0 secara default. Class memiliki keunggulan untuk membuat kode lebih mudah dibaca dan dipelihara dibandingkan menggunakan angka mentah dan juga dapat mengatur nilai awal secara manual seperti:

D. union
Memungkinkan beberapa variabel berbeda berbagi lokasi memori yang sama untuk menghemat memori, sangat berguna di mikrokontroler dengan RAM terbatas dan cocok untuk konversi data misalnya konversi float menjadi byte array untuk pengiriman data biner.
Berikut adalah contoh sintak union:

nilai.angka dan nilai.pecahan menempati alamat memori yang sama. Menulis ke pecahan menimpa isi memori yang sebelumnya diisi angka. Artinya, jika menulis ke satu anggota, nilai anggota lain akan berubah.
Untuk memudahkan mengingatnya, berikut adalah tabel ringkasan perbandingan dan pengunaan sintak untuk tipe struct, class, enum dan union.

