BBROBOTINDONESIA PANDUAN PRAKTIKUM DASAR ARDUINO www.BELAJARBIKINROBOT.WEEBLY.com Praktikum 8 Belajar Arduino Menggunakan Array di Arduino Ingatkah Anda, saat sekolah dulu setiap siswa memiliki nomer induk siswa. Dimana, semua informasi yang berhubungan dengan data siswa mulai dari nama, alamat, tempat lahir, dan informasi-informasi yang dibutuhkan oleh sekolah di simpan sesuai dengan nomer induk tersebut. Nah, dalam dunia programming, kita juga akan menemukan hal seperti itu,-- Catatan-catatan itu disebut Struktur Data. Salah satu Struktur Data yang akan kita pelajari saat ini yaitu Array. Array, sering kali digunakan karena Array dapat mempermudah kita dalam pengaturan data maupun penelusurannya (peng-index-an). Peng-index-an adalah cara kita dalam menemukan atau menelusuri informasi yang telah tercatat di dalam Array. -- Sebagai contoh, seorang petugas sekolah membuka berkas nomer 5 untuk melihat data salah seorang siswa bernama Reza. Nah, dalam hal ini berkas nomer 5 inilah nomer “index” dari siswa yang dalam datanya, bernama “Reza”. Sebuah Array dapat diisi dengan berbagai macam data. Data yang ada pada halaman pertama dari Array ini, disebut index 0 -- Karna setiap Array diawali dari index 0. Jika kita memiliki 5 data dalam Array kita, maka kelima data tersebut akan terindex mulai dari 0,1, 2,3,dan 4. Baiklah, untuk lebih jelasnya, kita langsung saja lanjutkan ke praktikumnya. Komponen yang dibutuhkan Arduino Uno 1x Protoboard 1x LED 5mm 6x Langkah-Langkah Praktikum Resistor 220Ohm 6x Kabel Jumper 7x 1.Hubungkan kaki-kaki + LED ke pin digital 2,3,4,5,6,dan 7 Arduino. 2. Hubungkan kaki-kaki - LED ke tiap resistor 220 Ohm. 3. Hubungkan tiap Resistor ke pin Gnd Arduino menggunakan kabel jumper (warna hitam). 4. Pasangkan board Arduino dengan port USB komputer menggunakan kabel USB. 5. Bukalah IDE Arduino kemudian ketikkan sketch berikut. int timer = 100; int ledPins[ ] = { 2, 7, 4, 6, 5, 3}; int jumlahPin = 6; void setup() { for (int thisPin = 0; thisPin < jumlahPin; thisPin++) { pinMode(ledPins[thisPin], OUTPUT); } } void loop() { for (int thisPin = 0; thisPin < jumlahPin; thisPin++) { digitalWrite(ledPins[thisPin], HIGH); delay(timer); digitalWrite(ledPins[thisPin], LOW); } for (int thisPin = jumlahPin-1; thisPin >= 0; thisPin--) { digitalWrite(ledPins[thisPin], HIGH); delay(timer); digitalWrite(ledPins[thisPin], LOW); } } 6. Jika sudah, compile menggunakan tombol "verify" , cek apakah ada kesalahan pengetikan sketch. Jika masih ada error coba di perbaiki lagi, mungkin ada kesalahan dalam pengetikan. 7. Upload ke Board Arduino menggunakan tombol "Upload" atau melalui File > Upload. Jika program yang diupload benar dan tidak ada kesalahan dalam pemasangan rangkaian elektronikanya maka, LED akan menyala secara bergiliran sesuai dengan urutan indexnya. Diskusi Sketch Baiklah, sekarang kita bahas tentang kode-kode program tersebut. Perhatikan kembali sketch yang telah kita ketikkan pada praktikum ini. Seperti biasa, bagi menjadi 3 blok. Blok atau bagian pertama yang kita ketikkan pada program di atas yaitu deklarasi dan inisialisasi variable. BLOK PERTAMA Kita mulai dari Blok pertama sketch ini yaitu, blok deklarasi variable. Kode yang ada pada blok program ini adalah sebagai berikut, int timer = 100; int ledPins[ ] = { 2, 7, 4, 6, 5, 3}; int jumlahPin = 6; Saya yakin, anda sudah paham betul dengan deklarasi dan inisialisasi variable. Tapi, coba sekarang perhatikan -- “apa yang berbeda dari kode di atas?” -- Ya, benar! kali ini ada baris kode yang sedikit berbeda dan itulah yang menjadi inti dari pembahasan praktikum kita kali ini, kode ini disebut sebagai Array. int ledPins[ ] = { 2, 7, 4, 6, 5, 3}; Pada Array ini, kita menyimpan data bertipe integer sesuai dengan angka pin Arduino yang kita hubungkan ke LED namun, nomor-nomer pin yang kita gunakan tidak kita susun secara berurutan. Di sebelah nama Array ini, terdapat tanda [ ] (ini disebut Array empty) – tanda tersebut merupakan compiler (program yang terintegrasi dengan IDE Arduino yang mengubah kode human readable ke machine readable), yang kita gunakan untuk meng-index data pada Array yang dalam praktikum ini, yaitu terdiri dari 6 data yang berisi 2, 7, 4, 6, 5, dan 3. Untuk penamaan sebuah Array bisa Anda berikan nama secara bebas; saya biasanya menamakan array sesuai dengan fungsinya. Seperti pada praktikum ini saya menamakannya “ ledPins” yang fungsinya untuk menyimpan nilai dari pin-pin yang kita gunakan dalam praktikum ini. Tujuannya, sekedar untuk mempermudah mengingatnya saja. BLOK KEDUA Kita lanjutkan ke bagian yang selanjutnya, yaitu routine setup(). Pada bagian ini, kita mengatur mode dari tiaptiap pin yang terhubung ke LED menggunakan kombinasi penggunaan Array dan For Loop. Berikut ini adalah kode pada blok routine setup() kita kali ini. void setup ( ) { for (int thisPin = 0; thisPin < jumlahPin; thisPin + + ) { pinMode (ledPins[thisPin] , OUTPUT ) ;} } Baiklah, mari kita simak apa yang ada pada For Loop di atas. Di routine setup() kita kali ini, kita memiliki sebuah For Loop dengan kondisi sebagai berikut, thisPin < jumlahPin ; Kita bisa lihat pada For Loop kali ini, variable thisPin telah kita inisialisasikan dengan nilai 0 dan jumlahPin kita inisialisasikan dengan nilai 6. Setiap kali kondisi thisPin < jumlahPin pada For Loop masih terpenuhi maka, nilai variable thisPin akan bertambah 1 akibat di eksekusinya kode (thisPin++). Kode program yang dieksekusi pada For Loop ini adalah data Array yang peng-index-annya menggunakan variable thisPin sebagai variable counternya. Karna pada routine setup () ini, kita akan mengatur mode dari pin agar menjadi OUTPUT, maka kita menggunakan fungsi pinMode() untuk mengaturnya modenya. Berikut ini adalah kodenya. pinMode (ledPins[thisPin] , OUTPUT ) ; Semoga anda masih ingat, bahwa fungsi pinMode membutuhkan dua parametert -- Yang pertama yaitu, nomer pin yang digunakan? Dan yang kedua, apakah modenya INPUT atau OUTPUT?! Nah, perhatikan pada kode di atas, parametert pertama memberikan informasi bahwa pin yang akan dimodekan adalah pin pada Array bernama ledPins dengan nomor index thisPin. Dan parameter kedua adalah pilihan modenya sebagai OUTPUT. Perhatikan kembali Array-nya berikut ini. int ledPins[ ] = { 2, 7, 4, 6, 5, 3}; Karna index ke 0 adalah index pertama dari sebuah Array, maka pada Array ledPins ini, pin 2 lah pin yang modenya diatur pertama kali kemudian diikuti dengan index selanjutnya yaitu index ke 1 yang bernilai 7 dan seterusnya sampai index ke 6 yang nilainya 3. Pada kasus ini, semua pin pada Array ledPins diatur modenya menjadi OUTPUT. Ketika nilai variable thisPin sudah sama dengan 6 maka, For Loop akan berhenti di eksekusi. Jadi, melalui contoh di atas, sekarang kita sudah dapat memahami bagaimana menggunakan For Loop dan Array secara bersamaan. Variable counter thisPin yang ada pada For Loop yang pertama ini, kita gunakan sebagai patokan nomor untuk meng-index data-data yang terdapat pada Array tersebut. BLOK KETIGA Kita lanjutkan kembali pembahasan kita ke routine yang berikutnya, yaitu routine loop(). Kode program yang ada pada routine ini adalah sebagai berikut, void loop() { for (int thisPin = 0; thisPin < jumlahPin; thisPin + + ) { digitalWrite ( ledPins[thisPin] , HIGH); delay ( timer) ; digitalWrite ( ledPins[thisPin] , LOW ) ; } Bisa kita lihat di atas, semua kode dalam kurung " for loop " di sini sama seperti pada for loop pada routine setup() sebelumnya. Yang berubah, adalah kode yang ada di dalam kurung kurawalnya saja. Sebelumnya, sudah kita bahas bahwa ketika kondisi perbandingan masih terpenuhi, maka variable counter akan terus bertambah. Pada routine sebelumnya, kita telah mengeksekusi pengaturan mode pin sebagai OUTPUT. Sedangkan, pada kode di routine ini, yang dieksekusi adalah kode program untuk menyalakan LED, mendelaynya beberapa saat, dan kemudian memadamkannya kembali menggunakan kode berikut, digitalWrite ( ledPins[thisPin] , HIGH); delay ( timer) ; digitalWrite ( ledPins[thisPin] , LOW ) ; LED yang menyala adalah LED yang nomor indexnya sesuai dengan nilai dari variable counter thisPin. Contoh, nilai dari variable counter thisPin awalnya bernilai 0 (index ke 0) maka, LED yang akan menyala adalah LED pada pin 2 karna index ke 0 pada Array ledPins adalah 2. Index akan terus bertambah sesuai dengan penambahan nilai variable counter thisPin sampai nilai pada variable thisPin ini sudah sama dengan 6. Barulah For Loop ini berhenti dan melanjutkan eksekusi kode program berikutnya. Kode program yang berikutnya yaitu kode untuk mengembalikan nilai dari variable counter “ thisPin” kembali lagi. Dimana pada kode for loop ini, nilai dari “thisPin” akan dikurangi satu-persatu. Berikut ini adalah kode programnya. for (int thisPin = jumlahPin-1; thisPin >=0; thisPin - - ) { digitalWrite ( ledPins[thisPin] , HIGH); delay ( timer) ; digitalWrite ( ledPins[thisPin] , LOW ) ; } Coba kita perhatikan For Loop pada kode program ini! for (int thisPin = jumlahPin-1; thisPin >=0; thisPin - - ) Variable counter “thisPin” kali ini kita berikan nilai sama dengan nilai variable “jumlahPin” yang kita kurangi satu. Ingat, bahwa variable “ jumlahPin” telah kita inisialisasikan dengan nilai 6 pada bagian awal program. Variable “jumlahPin” adalah jumlah pin yang terhubung ke LED pada rangkaian protoboard, dan juga sebagai informasi jumlah data pada array kita. Sebagai pengingat, silahkan kita lihat kembali apa yang ada pada Array yang sebelumnya telah kita buat. int ledPins[ ] = { 2, 7, 4, 6, 5, 3}; ketika nilai dari thisPin = jumlahPin – 1 maka, ledPins[thisPin] akan bernilai seperti berikut ledPins[5] setelah For Loop kembali di cek maka variable “thisPin” akan berkurang sehingga ledPins[thisPin] akan bernilai seperti berikut ledPins[4] dan seterusnya sampai variable “thisPin kembali ke nilai semula. Setelah itu, program akan membaca kembali routine loop() dan mengulang kembali proses yang sama. Sekian untuk praktikum kita kali ini dan sampai jumpa pada praktikum-praktukum yang berikutnya. Latihan Mandiri Untuk latihan mandiri kali ini coba beberapa hal berikut! 1. Ganti nilai data yang ada pada Array ledPins[].(Pastikan nilainya sama hanya ubah posisi urutannya) 2. Tambah lagi 2 LED tambahan. Ubah sketch agar LED tersebut ikut dalam barisan LED sebelumnya. www.BELAJARBIKINROBOT.WEEBLY.com