← Daftar materi Arduino

Bab 5 · Arduino Uno R3

Dasar Pemrograman Arduino: setup, loop, dan Variabel

Pahami alur sketch Arduino, tipe data, konstanta, operator, komentar, dan cara membaca hasil program di Serial Monitor.

Baca program dari alurnya

Sketch Arduino memakai C/C++ dengan fungsi yang disediakan Arduino. Kita tidak perlu menghafal semua perintah untuk mulai. Pahami dulu dua tempat utama: setup() untuk persiapan sekali setelah board menyala atau di-reset, dan loop() untuk pekerjaan yang diulang terus.

Program pertama untuk dibaca

const int PIN_LED = LED_BUILTIN;
int jumlahKedip = 0;

void setup() {
  pinMode(PIN_LED, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  digitalWrite(PIN_LED, HIGH);
  delay(500);
  digitalWrite(PIN_LED, LOW);
  delay(500);
  jumlahKedip = jumlahKedip + 1;
  Serial.println(jumlahKedip);
  if (jumlahKedip >= 100) {
    jumlahKedip = 0;
  }
}

Pakai LED bawaan, jadi tidak perlu komponen luar. Buka Serial Monitor pada 9600 baud. Setiap satu kali kedip, angka bertambah. Setelah mencetak 100, hitungan diatur ke nol sehingga putaran berikutnya mencetak 1. Reset board juga mengulang hitungan dari awal.

Variabel dan konstanta

Variabel menyimpan nilai yang dapat berubah, seperti jumlahKedip. const menandai nilai yang tidak boleh diubah oleh program, seperti nomor pin. Deklarasi di luar fungsi dapat dipakai oleh setup() dan loop(). Variabel yang dibuat di dalam suatu blok hanya bisa dipakai dalam lingkup blok tersebut.

Tipe pada Uno R3Contoh pemakaian
byte: 0 sampai 255byte terang = 120;
int: −32768 sampai 32767int cahaya = 650;
unsigned long: bilangan bulat tanpa tanda 32 bitunsigned long waktu = millis();
float: angka pecahanfloat suhu = 27.5;
bool: true atau falsebool lampuAktif = true;
char: satu karakterchar pilihan = 'A';

Rentang int ini berlaku pada Uno R3. Board lain dapat memakai ukuran int berbeda. float juga bukan angka yang selalu tepat sampai digit terakhir; pembulatan merupakan hal biasa.

Tanda yang sering bikin bingung

  • = mengisi nilai; == membandingkan dua nilai.
  • Titik koma ; mengakhiri pernyataan. Kurung kurawal { } membatasi isi fungsi atau percabangan.
  • Nama membedakan huruf besar dan kecil. pinLed berbeda dengan pinLED.
  • Komentar // menjelaskan kode dan tidak dijalankan.
  • Teks memakai tanda petik ganda, misalnya "Suhu: "; satu karakter memakai petik tunggal.

Pembagian dua bilangan bulat menghasilkan bilangan bulat: 5 / 2 bernilai 2. Gunakan 5.0 / 2 jika ingin hasil 2.5. Perhatikan hal ini ketika mengolah data sensor.

Coba ubah sendiri

Ubah dua delay menjadi 250. Perhatikan seberapa cepat hitungan bertambah. Tambahkan Serial.print("Kedipan: ") sebelum Serial.println(jumlahKedip). print melanjutkan pada baris yang sama; println mengakhiri baris. Sebelum mengunggah, tekan Verify untuk memeriksa penulisan kode.

Mengapa tipe data perlu dipilih?

Setiap variabel menempati ruang di memori SRAM. Uno R3 hanya memiliki 2 KB SRAM, jadi memilih tipe yang pas bukan sekadar urusan rapi. Menyimpan angka 0 sampai 255 pada byte memakai satu byte, sedangkan int memakai dua byte. Untuk program kecil perbedaan itu tidak terasa, tetapi kebiasaan memilih tipe yang sesuai akan sangat membantu ketika program bertambah besar dan memakai banyak sensor sekaligus.

Tipe juga menentukan apa yang terjadi saat nilai terlalu besar. Pada Uno, int yang sudah bernilai 32767 lalu ditambah satu akan berputar menjadi -32768. Kejadian ini disebut overflow dan tidak memunculkan pesan kesalahan apa pun. Program tetap berjalan, hanya hasilnya yang aneh. Jika kamu menghitung sesuatu yang bisa melewati 32767, gunakan long atau unsigned long.

Contoh kedua: mengubah Celsius ke Fahrenheit

const float CELSIUS = 36.5;
float fahrenheit;

void setup() {
  Serial.begin(9600);
  fahrenheit = CELSIUS * 9.0 / 5.0 + 32.0;
  Serial.print("Celsius: ");
  Serial.println(CELSIUS, 1);
  Serial.print("Fahrenheit: ");
  Serial.println(fahrenheit, 1);
}

void loop() {
  // sengaja kosong: perhitungan cukup dilakukan satu kali
}

Penjelasan per bagian. Baris pertama membuat konstanta bertipe float sehingga nilainya tidak bisa terubah tanpa sengaja. Baris kedua membuat variabel global yang belum diberi nilai. Di dalam setup(), Serial.begin(9600) membuka jalur komunikasi ke komputer pada kecepatan 9600 baud. Rumus memakai 9.0 dan 5.0, bukan 9 dan 5, supaya pembagian dilakukan sebagai bilangan pecahan; jika ditulis 9 / 5 hasilnya 1 karena pembagian bilangan bulat, dan jawabannya akan keliru. Angka 1 pada Serial.println(CELSIUS, 1) berarti satu angka di belakang koma. Hasil yang tampil adalah 97.7. Karena semua pekerjaan selesai di setup(), loop() boleh kosong, tetapi fungsinya tetap harus ada agar sketch bisa dikompilasi.

Operator yang sering dipakai

OperatorArtiContoh dan hasil
+ - * /tambah, kurang, kali, bagi7 / 2 bernilai 3 untuk bilangan bulat
%sisa pembagian7 % 2 bernilai 1; berguna untuk menentukan bilangan genap atau ganjil
++ dan --tambah atau kurang satuhitung++ sama dengan hitung = hitung + 1
+= dan -=ubah nilai dari dirinya sendiriskor += 10 menambah skor sebanyak 10
== != < > <= >=perbandingansuhu >= 30 bernilai true atau false

Operator sisa pembagian sering dipakai untuk membuat pola berulang. Misalnya, kalau hitungan dibagi 2 bersisa nol, berarti hitungan sedang genap, sehingga LED bisa dinyalakan pada hitungan genap saja.

Kesalahan yang sering terjadi

  • Memakai = di dalam if. Menulis if (x = 5) bukan membandingkan, melainkan mengisi x dengan 5, dan kondisinya selalu benar. Tulis if (x == 5).
  • Lupa titik koma. Pesan kompilasi biasanya menyebut expected ; padahal barisnya tampak benar. Periksa baris sebelum baris yang ditandai.
  • Salah huruf besar-kecil. Serial.println dan serial.println berbeda. Yang kedua menghasilkan pesan serial was not declared.
  • Serial Monitor menampilkan karakter acak. Biasanya kecepatan baud di jendela Serial Monitor tidak sama dengan angka di Serial.begin().
  • Variabel dibuat di dalam loop(). Variabel lokal dibuat ulang pada setiap putaran, sehingga hitungan selalu kembali ke nilai awal. Pindahkan deklarasinya ke luar fungsi bila nilainya harus diingat.

Ringkasan

Sketch Arduino tersusun dari setup() yang berjalan sekali dan loop() yang berulang. Variabel menyimpan data yang berubah, const menjaga nilai tetap, dan tipe data menentukan ukuran serta ketelitian. Serial Monitor adalah jendela untuk mengintip isi variabel ketika program berjalan. Biasakan memberi nama variabel yang menjelaskan fungsinya, seperti jumlahKedip, bukan a atau x.

Soal latihan

  1. Berapa hasil 9 / 2 dan 9 % 2 pada Arduino jika keduanya bilangan bulat?
    Lihat jawaban

    9 / 2 bernilai 4 karena sisa pecahan dibuang, dan 9 % 2 bernilai 1 yaitu sisa pembagiannya.

  2. Tipe data apa yang cocok untuk menyimpan hasil millis(), dan mengapa?
    Lihat jawaban

    unsigned long, karena millis() bisa mencapai bilangan sangat besar yang tidak muat pada int di Uno R3.

  3. Apa yang salah pada baris if (jumlahKedip = 100)?
    Lihat jawaban

    Tanda = mengisi nilai, bukan membandingkan. Seharusnya if (jumlahKedip == 100).

  4. Ubah program Celsius tadi untuk mengonversi 100 derajat Celsius. Berapa Fahrenheit yang tampil?
    Lihat jawaban

    Ubah nilai CELSIUS menjadi 100.0. Hasilnya 212.0 derajat Fahrenheit, yaitu titik didih air pada tekanan standar.