Program Kontrol ON/OFF Dengan Satu Tombol Versi Forth (FORTHUNER46)


ON/OFF dengan satu tombol maksudnya adalah mengaktifkan dan menon-aktifkan output dengan menggunakan satu tombol saja. Istilahnya toggle atau pembalik kondisi. Jadi jika saat ini kondisi output off, maka kondisi output akan berubah menjadi on jika tombol kontrol ditekan. Dan jika kondisi output on, maka kondisi output akan berubah menjadi off jika tombol kontrol ditekan.

Bagaimanakah membuat program untuk implementasi on/off satu tombol menggunakan bahasa Forth? Simak yang berikut ini.

Pada eksperimen ini, saya menggunakan board FORTHUNER46, sebuah TOMBOL dan sebuah LED yang masing-masing terhubung ke ATmega8 pada pin PB0 dan PB2.

 

Penjelasan Program

Target dari pembuatan program ini adalah tersedianya fungsi untuk membaca kondisi input (TOMBOL) dan mengupdate kondisi output (LED) sedemikian rupa sehingga kita bisa menuliskan implementasi on/off satu tombol dengan cara seperti ini:

   I1 ----------> TQ1

Sekarang mari kita bahas baris-baris kode program di atas.

   : SETUP B0 B1 OH OH B2 B3 OL OL RET

Fungsi SETUP berfungsi untuk mengeset PB0 dan PB1 karena akan digunakan sebagai input tombol, dan mereset PB2 dan PB3 untuk mematikan LED yang terhubung kepada pin-pin tersebut.

   : /I1 B0 RIO RET

Fungsi /I1 berfungsi untuk membaca kondisi pin PB0 (TOMBOL). Karena tombol aktif-rendah, maka dalam keadaan normal (tidak ditekan), fungsi /I1 akan mengembalikan logika 1 pada stack.

   : I1 /I1 0= IF REPEAT /I1 UNTIL 1 ELSE 0 ENDIF RET

Fungsi I1 berfungsi membaca kondisi tombol pada PB0. Jika tidak ditekan, maka fungsi ini akan mengembalikan logika 0 pada stack. Jika tombol ditekan, maka fungsi akan menunggu hingga tombol dilepas dan mengembalikan logika 1 pada stack.

   : Q1 IF B2 OH ELSE B2 OL ENDIF RET

Fungsi Q1 berfungsi untuk mengeset output LED jika masukan berlogika 1 dan sebaliknya.

   : &Q1 B2 RIO RET

Fungsi &Q1 berfungsi untuk membaca kondisi output Q1 (LED). Fungsi ini mengembalikan logika 1 jika Q1=ON dan mengembalikan logika 0 jika Q1=OFF.

   : TQ1 IF &Q1 0= Q1 ENDIF RET

Fungsi TQ1 berfungsi untuk membalik kondisi Q1 (toggle) jika masukan berlogika 1 (true). Caranya dengan membaca kondisi Q1 dan membalik logikanya dan menuliskan kembali ke Q1.

Untuk membaca kondisi Q1 digunakan fungsi &Q1. Hasil pembacaan ini (logika 0/1) dibalik menggunakan fungsi 0= (apakah sama dengan nol). 1 0= akan menghasilkan 0 dan 0 0= akan menghasilkan 1. Sehingga fungsi 0= disini berfungsi sebagaimana gerbang NOT.

   : ----------> RET

Fungsi ini tidak mempunyai fungsi apapun selain untuk mempercantik penulisan kode program, supaya terlihat ala-ala ladder. 😀

Sekarang tibalah kita pada fungsi utama program, yakni MAIN.

: MAIN
  BEGIN SETUP
  REPEAT
    I1 ----------> TQ1
    KEY?
  UNTIL DROP
RET

Awal dari fungsi MAIN adalah memanggil fungsi BEGIN dan SETUP. Fungsi BEGIN berfungsi untuk menginisialisasi board FORTHUNER46 untuk memastikan output LED pada PB5 dan BUZZER pada PD2 dalam keadaan off (berlogika 0). Sedangkan fungsi SETUP telah dijelaskan fungsinya di atas.

Selanjutnya masuk kepada looping REPEAT UNTIL.

Dalam perulangan tersebut, baris program

   I1 ----------> TQ1

akan dieksekusi secara berulang-ulang. Selama TOMBOL tidak ditekan, fungsi I1 akan mengembalikan logika 0 (false). Logika ini diterima fungsi TQ1 dan akan diabaikan karena bernilai false.

Dan jika TOMBOL ditekan, maka fungsi I1 akan menunggu hingga tombol dilepas dan mengembalikan logika 1 pada stack. Logika 1 ini diterima fungsi TQ1 sebagai masukan. Dan karena berlogika 1 (true), maka fungsi TQ1 pun melaksanakan fungsinya yakni membalik kondisi output Q1.

Dengan demikian, selesailah implementasi fungsi toggle atau on/off dengan satu tombol versi bahasa Forth.

Btw, fungsi KEY? berfungsi mendeteksi adanya karakter yang masuk melalui port serial. Jika ada, maka KEY? akan berlogika 1. Logika 1 ini (true) akan diterima fungsi UNTIL sehingga perulangan pun dihentikan.

Fungsi DROP setelah UNTIL berfungsi untuk menghapus stack teratas (karakter yang masuk melalui serial ada di stack teratas). Hal ini penting karena kondisi stack murni tanggung jawab programmer Forth.

 

Info Harga & Pemesanan

Board FORTHUNER46 dapat Anda pesan dengan menghubungi WA 081231784018 atau email ke info [at] teknikelektrolinks [dot] com. Harga board FORTHUNER46 adalah 150rb. Gratis pelatihan selama 1 jam (Up & Running) untuk setiap pembelian.

Tersedia juga sistem Forth dengan koneksi Wi-Fi, yakni WIFI-IOIOIO seperti ditunjukkan oleh gambar berikut ini.

Selamat belajar dan semoga bermanfaat.

Iklan

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout /  Ubah )

Foto Google+

You are commenting using your Google+ account. Logout /  Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout /  Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout /  Ubah )

w

Connecting to %s