Belajar Python Bagian 1: Python dan Hello World OpenCV

Sudah beberapa bulan ini saya kesengsem lagi dengan bahasa pemrograman Python. Mungkin karena sedang getol-getolnya baca-baca soal data, statistik dan Machine Learning, jadi ingin belajar Python lagi. Maka dari itu, saya tulis blog ini sebagai catatan perjalanan saya belajar Python lagi.

Continue reading →

Arduino untuk Pemula Bagian 2: Keajaiban Pemrograman

Masih menyimpan rangkaian dari tutorial sebelumnya? Kalau iya, bagus. Kalau tidak, silakan baca pelan-pelan dan kembali setelah rangkaiannya siap 🙂

Jika sudah siap, maka kita bisa memulai bagian kedua tutorial ini. Kali ini, saya akan menunjukkan fleksibilitas dari pemrogaman Arduino. Sebagaimana kita ketahui, Arduino sejatinya adalah sebuah mikrokontroler yang bisa diprogram untuk mengolah input tertentu menjadi sebuah output. Artinya, sebagaimana sebuah komputer yang secara hardware tidak berubah, mampu diprogram untuk melakukan hal-hal yang beragam, maka Arduino juga bisa kita program untuk melakukan hal berbeda, meski terdiri dari komponen yang sama.

IMG_3669.JPG

Tutorial kali ini akan difokuskan pada pemrograman Arduino. Tutorial sebelumnya menghasilkan sebuah rangkaian yang terdiri dari tombol dan LED, di mana selama tombol ditekan, maka LED akan menyala. Sangat dasar dan tidak menarik. Kali ini, kita akan membuat LED berkedip jika tombol ditekan, dan mati jika tombol ditekan untuk kedua kalinya. Seperti kita menyalakan saklar. Ini akan kita lakukan dengan menggunakan rangkaian yang sama.

Kode yang kita gunakan adalah pengembangan dari kode sebelumnya. Hanya ada sedikit penambahan di awal, dan di bagian fungsi loop()

Bagi yang belum pernah melakukan programming, mungkin ada hal-hal berikut yang perlu disimak:

1. Setiap baris yang diawali dengan // artinya baris ini adalah komentar, berisi keterangan atau penjelasan tertentu. Bagian ini tidak akan di-compile dan diupload ke Arduino, hanya penjelasan bagi yang membaca source code program tersebut
2. dalam program, ada yang disebut sebagai variabel. Ini adalah tempat menampung nilai-nilai yang bisa berubah seiring program berjalan. Variabel-variabel ini memiliki tipe tertentu dan akan diinisialisasi dengan memberikan nilai. Sebagai contoh, untuk membuat sebuah variabel dengan nama x yang memiliki tipe data integer (bilangan bulat) dan memiliki nilai 10, kita bisa menulis
int x = 10

3. Setiap baris dalam program yang melakukan sebuah hal disebut sebagai pernyataan (statement). Satu pernyataan diakhiri dengan titik koma ;
4. Ada bagian program yang mengumpulkan satu atau beberapa pernyataan menjadi satu blok tertentu. Ini dikenal sebagai fungsi, dan ia akan melakukan tugas tertentu. Sebagai contoh di program kita, ada 2 buah fungsi, yakni setup() dan loop()

Yak, inilah kodenya:

// set pin nomor 2 sebagai pin button dan pin 13 sebagai pin untuk LED
const int buttonPin = 2;
const int ledPin = 13;

// membuat variabel untuk menyimpan status tombol, status sebelumnya, dan status LED
int buttonState = LOW;
int prevButtonState = LOW;
int ledState = LOW;

void setup() {
    // pin ledPin dibuat sebagai output
    pinMode(ledPin, OUTPUT);
    // pin button dibuat sebagai input
    pinMode(buttonPin, INPUT);
}

void loop(){
    // baca status dari pin button
    buttonState = digitalRead(buttonPin);

    // bagian ini akan kita ubah
    // kita memeriksa apakah kondisi button berbeda dengan kondisi sebelumnya
    if (buttonState != prevButtonState) {
        // jika iya, maka kondisi button sebelumnya, adalah kondisi button sekarang
        prevButtonState = buttonState;
        // jika kondisi button sebelumnya LOW, maka status LED akan berbeda dari sebelumnya
        if (prevButtonState == LOW) {
           ledState = !ledState;
        }
    }
    // jika ledState = HIGH, maka LED akan berkedip, jika tidak, maka LED mati
    if (ledState == HIGH) {
        blink();
    } else { 
        digitalWrite (ledPin, ledState);
  }
}

//fungsi ini membuat lampu LED berkedip
void blink(){
  digitalWrite(ledPin, HIGH);   // nyalakan LED
  delay(1000);                  // tunggu sebentar
  digitalWrite(ledPin, LOW);    // matikan LED
  delay(1000);                  // tunggu lagi
}

Kode yang kita ubah dalam fungsi loop() menyatakan bahwa kali ini, yang kita perhatikan adalah perubahan kondisi button. Apabila ada perubahan kondisi, yang terjadi setiap kali ia ditekan, maka variabel ledState akan berubah pula kondisinya. Seperti mengatakan ON atau OFF. Ini berbeda dengan sebelumnya, di mana yang kita perhatikan adalah kondisi button.

Apabila kondisi LED HIGH, maka program akan memanggil fungsi blink() yang mengatur LED agar berkedip, dan mati jika sebaliknya. Fungsi ini bisa digambarkan sebagai bagian program yang melakukan, well, fungsi tertentu. Setidaknya, dalam Arduino ada 2 fungsi yang wajib ada, yakni setup() yang berjalan sekali di awal program, serta loop() yang dieksekusi berulang-ulang selama program berjalan. Menggunakan fungsi yang berbeda ini adalah latihan yang bagus untuk berpikir prosedural, atau berurutan, yang bisa membantu pemula untuk memecahkan masalah secara terstruktur.

Itu dia tutorial kali ini, semoga membantu pengalaman menggunakan Arduino. Tutorial selanjutnya akan membahas jenis input yang lain. Jika ada ide, silakan juga tulis komentar pada postingan ini.

Selamat ngoprek 🙂