Inisialisasi program Fungsi setup Fungsi debounce

yang dibangkitkan akan ditampilkan ke LCD. Diagram alir perangkat lunak yang dirancang untuk prototipe tampak seperti pada gambar 3.8.

3.3.1 Inisialisasi program

Library yang digunakan dimasukkan pada inisialisasi program. Library yang digunakan pada perancangan perangkat lunak ini adalah LiquidCrystal.h. Library ini digunakan untuk memungkinkan Arduino untuk mengontrol LCD. Variabel – variabel yang digunakan dideklarasikan pada inisialisasi program. Kode program inisialisasi dapat dilihat pada lampiran 1.

3.3.2 Fungsi setup

Pada fungsi setup, pin digital 10 dan 11 diset sebagai pin masukan pull-up dan pin 9 sebagai pin keluaran dengan fungsi pinMode. Pada fungsi ini inisialisasi antarmuka layar LCD dilakukan dan dan dimensi dari layar ditentukan. Setelah itu, teks “Frekuensi” dan “Hz” akan ditampilkan pada layar LCD. Penampilan teks ini dilakukan pada fungsi setup karena teks ini tidak akan berubah-ubah selama program berjalan. Berikut ini adalah kode lengkap fungsi setup: void setup { inisialisasi antarmuka layar dan dimensi LCD lcd. begin 16, 2; konfigurasi pin pinMode button_up, INPUT_PULLUP ; pinMode button_down, INPUT_PULLUP ; pinMode speaker, OUTPUT ; menampilkan teks ke layar LCD lcd. clear ; lcd. setCursor 0,0; lcd. print Frekuensi : ; lcd. setCursor 6,1; lcd. print Hz ; } Universitas Sumatera Utara

3.3.3 Fungsi debounce

Pada perancangan perangkat keras terdapat dua tombol push button yang digunakan untuk menaikkan dan menurunkan frekuensi yang dibangkitkan. Permasalahan yang sering terjadi pada saklar mekanis seperti push button adalah getaran yang terjadi pada kontak saklar saat tombol ditekan. Ketika kontak bersentuhan, momentum dan elastisitas beraksi bersamaan sehingga menimbulkan getaran yang mengakibatkan sejumlah pulsa listrik yang dapat menimbulkan salah interpretasi. Kejadaian ini disebut bouncing. Bouncing tidak berlangsung lama beberapa mikro atau milidetik, namun cukup lama untuk sebuah mikrokontroler. Gambar 3.9 Diagram alir fungsi pembacaan tombol Universitas Sumatera Utara Dari sisi software, permasalahan bouncing dapat diatasi. Pembacaan masukan akan diberi delay sehingga kesalahan interpretasi tidak akan terjadi. Ketika push button ditekan, mikrokontroler akan mendeteksi adanya perubahan masukan. Setelah terdeteksi adanya perubahan pada masukan, mikrokontroler akan memberi delay beberapa milisekon kemudian membaca kembali masukan dan menyimpulkan apakah tombol ditekan atau tidak. Fungsi pembacaan tombol ini disebut fungsi debounce. Gambar 3.10 Lanjutan diagram alir fungsi pembacaan tombol Universitas Sumatera Utara Setelah memberi 3 waktu delay 3 ms, 5 ms, 10 ms pada fungsi debounce lalu dilakukan pengujian, didapat bahwa waktu delay yang tepat digunakan adalah 10 ms. Dengan waktu delay 10 ms, kesalahan interpretasi pada pembacaan tombol tidak ada terjadi. Diagram alir fungsi debounce tampak seperti pada gambar 3.9 dan gambar 3.10. Berikut ini adalah kode lengkap fungsi debounce: fungsi untuk pembacaan tombol void debounce{ membaca nilai input button_up dan button_down int readingUp = digitalRead button_up; int readingDown = digitalRead button_down; mendeteksi apakah tombol ditekan perubahan HIGH menjadi LOW noise selama 10 ms debounceDelay diabaikan Melihat apakah noise atau tombol memang ditekan jika ada perubahan pada input button_up dan button_down. if readingUp = lastButtonStateUp || readingDown = lastButtonStateDown { reset waktu debounce lastDebounceTime = millis ; } if millis - lastDebounceTime debounceDelay { jika lwat dari 10 ms, maka perubahan input dianggap sebagai tombol yang ditekan. jika nilai pembacaan input button_up berubah if readingUp = buttonStateUp { buttonStateUp = readingUp; tombol button_up ditekan LOW if buttonStateUp == LOW { frekuensi=frekuensi+1000; } } jika nilai pembacaan input button_down berubah if readingDown = buttonStateDown { buttonStateDown = readingDown; jika tombol button_up ditekan LOW if buttonStateDown == LOW { frekuensi=frekuensi-1000; } } } Universitas Sumatera Utara menyimpan hasil pembacaan input sebagai nilai pembacaan input terakhir kali lastButtonStateUp = readingUp; lastButtonStateDown = readingDown; }

3.3.4 Fungsi loop