INTERNET FOR LIFE IN THE WORLD, SOFTWARE, PHOTOSHOP, UBUNTU, BUSINESS, DRIVER, MOBILE

Full width home advertisement

Post Page Advertisement [Top]

Dasar Pemrograman Arduino

Buku Tutorial: Dasar Pemrograman Arduino

Buku panduan ini disusun untuk memudahkan Anda memahami struktur, perintah dasar, serta logika pemrograman pada mikrokontroler Arduino.

---

## Bab 1: Pengenalan Bahasa Pemrograman Arduino

Bahasa pemrograman Arduino pada dasarnya menggunakan bahasa tingkat tinggi **C**. Karena menggunakan fondasi tersebut, aturan penulisan (sintaks) yang digunakan akan sangat identik dengan bahasa C yang populer di kalangan *programmer*. Kode program yang ditulis untuk Arduino di dalam perangkat lunak Arduino IDE sering disebut dengan istilah ***sketch***.

Secara umum, terdapat **3 tahapan utama** yang harus dilalui agar sebuah program dapat dijalankan di papan sirkuit Arduino:

1. **Menulis program**: Menulis *sketch* instruksi menggunakan perangkat lunak Arduino IDE.
2. **Meng-compile program**: Mengecek program (*compile*) untuk menemukan apakah ada *error* atau kesalahan penulisan (*typo*) dan mengubahnya ke bahasa mesin.
3. **Meng-upload program**: Memasukkan program yang telah selesai dikompilasi ke dalam mikrokontroler Arduino.

---

## Bab 2: Struktur Dasar Program

Karakteristik penulisan kode program Arduino sangat sederhana. Secara umum wajib memiliki dua bagian atau fungsi utama, yaitu `setup()` dan `loop()`.

* **`void setup()`**: Bagian inisialisasi yang hanya dieksekusi **satu kali** saat program pertama kali dijalankan. Pada umumnya digunakan untuk mendefinisikan mode pin (apakah sebagai input atau output) atau untuk memulai komunikasi serial.
* **`void loop()`**: Fungsi yang akan dieksekusi secara **terus-menerus** (berulang-ulang) dari atas ke bawah selama Arduino menyala.
* **`function` (Fungsi Kustom)**: Blok pemrograman yang memiliki nama tersendiri. Fungsi ini memiliki instruksi spesifik di dalamnya dan hanya akan dieksekusi ketika fungsi tersebut dipanggil.
* **`{ }` (Kurung Kurawal)**: Mendefinisikan titik awal dan akhir dari sebuah blok fungsi atau perulangan. Jika lupa memberikan kurung kurawal tutup, maka saat di-*compile* akan terjadi laporan *error*.
* **`;` (Titik Koma / Semicolon)**: Pembatas akhir dari setiap pernyataan (*statement*). Wajib diberikan pada akhir baris program.
* **`//` (*Line Comment*)**: Digunakan untuk membuat catatan/komentar pada satu baris. Semua karakter setelah tanda ini tidak akan dieksekusi maupun dikompilasi oleh program.
* **`/*...*/` (*Block Comment*)**: Digunakan untuk membuat komentar panjang dalam banyak baris. Teks di antara tanda ini tidak akan dieksekusi.

---

## Bab 3: Tipe Data, Variabel, dan Konstanta

### Variabel dan Ruang Lingkup (*Scope*)

Variabel adalah tempat untuk menyimpan nilai data yang bisa berubah-ubah di dalam program. Variabel harus dideklarasikan terlebih dahulu beserta tipe datanya.

* **Variabel Global**: Dideklarasikan di bagian paling atas (sebelum fungsi `setup()`) dan nilainya bisa dipanggil pada seluruh blok fungsi apa pun.
* **Variabel Lokal**: Dideklarasikan di dalam sebuah fungsi khusus (misal di dalam `loop()` saja), sehingga hanya bisa digunakan dan dipanggil di dalam blok tersebut.

### Tipe Data

* **`byte`**: Menyimpan 8-bit nilai angka bilangan asli tanpa koma dengan jangkauan 0 hingga 255.
* **`int` (Integer)**: Tipe data utama untuk menyimpan bilangan bulat tanpa koma (16-bit) dengan jangkauan -32.768 hingga 32.767.
* **`long`**: Penyimpanan bilangan bulat dengan ukuran lebih besar (32-bit).
* **`float`**: Tipe data yang mampu menampung nilai bilangan desimal (berkoma).
* **`array`**: Kumpulan deretan nilai yang dapat diakses menggunakan nomor indeks (selalu dimulai dari nomor indeks 0).

### Konstanta

Arduino memiliki beberapa variabel bawaan (*built-in*) yang nilainya sudah pasti:

* **`TRUE / FALSE`**: Mewakili nilai logika boolean, di mana `true` sama dengan 1 dan `false` sama dengan 0.
* **`HIGH / LOW`**: Digunakan untuk menetapkan kondisi tegangan pada sebuah pin. `HIGH` berarti nyala/ON (5 Volt), dan `LOW` berarti mati/OFF (0 Volt).
* **`INPUT / OUTPUT`**: Menentukan mode operasional sebuah pin digital.

---

## Bab 4: Operator Dasar

### Operator Aritmatika

Digunakan untuk kalkulasi matematis seperti Penjumlahan (`+`), Pengurangan (`-`), Perkalian (`*`), dan Pembagian (`/`). Terdapat pula *compound assignments* untuk merangkum baris kode matematika pada satu variabel:

* `x++` (Menaikkan nilai x dengan 1)
* `x--` (Mengurangi nilai x dengan 1)
* `x += y` (Sama dengan instruksi x = x + y)

### Operator Perbandingan

Membandingkan dua kondisi yang nantinya akan menghasilkan nilai benar (1) atau salah (0).

* `==` (Sama dengan)
* `!=` (Tidak sama dengan)
* `<` (Lebih kecil dari) dan `>` (Lebih besar dari)
* `<=` (Lebih kecil dari sama dengan) dan `>=` (Lebih besar dari sama dengan)

### Operator Logika

Sering digunakan dalam struktur kondisi bersyarat:

* **`&&` (AND)**: Logika akan bernilai benar jika KEDUA persyaratannya benar/terpenuhi.
* **`||` (OR)**: Logika akan bernilai benar jika SALAH SATU atau KEDUA persyaratannya benar.
* **`!` (NOT)**: Logika kebalikan, bernilai benar jika syaratnya ternyata salah.

---

## Bab 5: Kendali Alur (*Flow Control*)

Kendali alur digunakan untuk membuat sistem pengambilan keputusan dan menjalankan instruksi perulangan.

* **`if`**: Mengeksekusi blok program di dalamnya HANYA jika syarat/kondisinya terpenuhi (*true*).
* **`if...else`**: Menguji sebuah kondisi, jika syarat `if` tidak terpenuhi, maka instruksi yang dieksekusi adalah baris program yang berada di dalam `else`.
* **`for`**: Mengulang serangkaian instruksi dalam jumlah tertentu. Di dalamnya memiliki tiga parameter dasar: inisialisasi nilai, batas tes kondisi, dan instruksi penambahan/pengurangan (ekspresi).
* **`while`**: Akan terus mengulang baris perintah secara tiada henti selama kondisi ekspresinya masih bernilai benar (*true*).
* **`do...while`**: Berjalan persis seperti `while`, perbedaannya adalah perintah ini akan mengeksekusi instruksi minimal satu kali di awal sebelum mengecek kondisinya di baris akhir.

---

## Bab 6: Perintah Input / Output (I/O)

### Digital I/O

Secara bawaan (*default*), board Arduino umumnya memiliki deretan pin digital (berlabel D0-D13) yang dikonfigurasi sebagai input.

* **`pinMode(pin, mode)`**: Perintah dalam `void setup()` untuk mendefinisikan suatu pin secara tegas apakah akan bekerja sebagai `INPUT` atau `OUTPUT`.
* **`digitalWrite(pin, value)`**: Menentukan nilai arus pada output digital. Menghidupkan LED menggunakan logika `HIGH`, dan mematikannya dengan logika `LOW`.
* **`digitalRead(pin)`**: Membaca data tegangan dari komponen input digital, seperti membaca sensor atau membaca posisi status tombol tekan (*push button*).

### Analog I/O

Arduino memiliki deretan pin analog (contoh: A0-A5) yang bekerja menggunakan resolusi ADC 10-bit (range 0–1023).

* **`analogRead(pin)`**: Digunakan untuk membaca tegangan spesifik (0-5V) dari komponen analog seperti sensor suhu atau potensiometer.
* **`analogWrite(pin, value)`**: Mengirimkan nilai analog berupa metode *Pulse Width Modulation* (PWM). Perintah ini hanya bisa bekerja pada pin digital khusus berlabel PWM (umumnya bernomor 3, 5, 6, 9, 10, 11). Nilai parameter rentangnya antara 0 sampai 255.

---

## Bab 7: Waktu, Matematika, dan Komunikasi Serial

### Waktu (*Time*)

* **`delay(ms)`**: Memberikan instruksi jeda pada program dalam satuan milidetik (1 detik = 1000 milidetik) sebelum lanjut ke baris perintah berikutnya.
* **`millis()`**: Penghitung waktu (*stopwatch*) tak kasat mata dalam bentuk milidetik sejak Arduino pertama kali dihidupkan dayanya.

### Matematika dan Random

* **`min(x,y)` dan `max(x,y)**`: Membandingkan dua variabel angka lalu memilih nilai yang paling kecil (`min`) atau paling besar (`max`).
* **`random(min, max)`**: Menghasilkan sebuah bilangan angka secara acak di antara rentang batas bawah (`min`) dan batas atas (`max`).
* **`randomSeed(seed)`**: Menentukan sebuah titik pangkal acak agar fungsi `random()` selalu memiliki hasil yang benar-benar berbeda.

### Komunikasi Serial

Penting digunakan saat Arduino harus berkomunikasi ke komputer atau modul lainnya.

* **`Serial.begin(rate)`**: Diaktifkan di dalam `setup()` untuk memulai komunikasi serial dan menyepakati nilai kecepatannya (misal: 9600 bps).
* **`Serial.println(data)`**: Mengirimkan cetakan data dari papan ke *Serial Monitor* layar komputer di mana baris baru (enter/CRLF) akan selalu ditambahkan.
* **`Serial.read()`**: Membaca data yang diinputkan dan dikirim dari *Serial Monitor* ke mikrokontroler.

Tidak ada komentar:

Posting Komentar

Bottom Ad [Post Page]