Hallo, selamat datang kembali. Pada artikel ini, kita akan membahas tentang fungsi advance input/output selain tone() dan noTone() yang sudah dibahas pada artikel sebelumnya, yaitu pulseIn(), shiftIn() dan shiftOut(). mari kita bahas satu per satu :
pulseIn()
Fungsi pulseIn() yaitu untuk menghitung durasi sinyal HIGH atau LOW pada suatu sinyal gelombang (pulse signal) yang dibaca oleh pin arduino. fungsi ini menghasilkan nilai balik (return value) berupa durasi sinyal dalam satuan mikrodetik, nilai balik itu bisa disimpan didalam variabel dan biasanya menggunakan tipe data unsigned long. berikut sintax nya:
pulseIn(pin, value)
pulseIn(pin, value, timeout)
- pin : pin yang menerima input sinyal gelombang
- value : Kondisi sinyal (HIGH atau LOW) yang akan dihitung durasinya
- timeout : (Opsional) Waktu tunggu maksimal yang kita tetapkan sebelum sinyal dihitung durasinya (satuan mikrodetik), jika tidak disertakan, nilai defaultnya adalah 1 detik.
Fungsi dan peran timeout yaitu Mencegah bloking program terlalu lama pada program jika tidak ada pulsa yang terdeteksi, fungsi pulseIn()
akan terus menunggu. Ini bisa menyebabkan program Arduino seolah-olah hang atau berhenti bekerja, karena fungsi ini bersifat blocking (menghentikan eksekusi kode lain sampai selesai). Parameter timeout
memastikan fungsi pulseIn() tidak membloking program terlalu lama.
Bagaimana cara kerja pulseIn() ?
- Menunggu sinyal dibaca: Pertama-tama fungsi ini akan menunggu sampai kondisi pin berubah sesuai dengan kondisi yang diminta (HIGH atau LOW).
Menghitung durasi sinyal: Setelah mendeteksi
perubahan kondisi, fungsi ini akan mulai menghitung waktu sampai kondisi pin
kembali ke keadaan semula.Memberikan nilai balik: Fungsi ini memberikan memberikan nilai balik berupa durasi sinyal dalam mikrodetik, nilai balik ini bisa disimpan didalam variabel untuk diproses lebih lanjut
Sensor ultrasonik biasanya digunakan untuk mengukur jarak dengan menggunakan pantulan gelombang ultrasonik, prosesnya yaitu sensor ultrasonik mengirim gelombang ultrasonik —-> benda lain memantulkan balik gelombang —-> sensor menerima pantulan balik gelombang tersebut. Nah, pada proses itu, saat sensor mulai mengirim gelombang ultrasonik, sensor juga menghasilkan output sinyal berupa perubahan kondisi dari LOW ke HIGH, dan akan kembali ke LOW sampai sensor menerima pantulan balik gelombang ultrasonik. pada kasus ini dirasi sinyal HIGH inilah yang kita hitung menggunakan fungsi pulseIn().
shiftIn()
Fungsi shiftIn() adalah fungsi untuk membaca data serial yang dikirim oleh perangkat external (sensor atau shift register) ke arduino melalui pin yang kita tentukan. tapi sebelum membahas tentang fungsi, alangkah baiknya kita memahami tentang transmisi data elektronik karena ini berhubungan erat dengan fungsi shiftIn() dan shiftOut().
Transmisi data serial adalah sebuah metoda untuk mengirim data antar perangkat elektronik, data yang dikirim adalah data bit per bit (satu per satu bit dikirim secara berurutan) melalui satu jalur komunikasi (jalur ini biasa disebut data line). Pada arduino, transmisi data serial digunakan pada protokol komunikasi I2C, SPI dan UART. ada 2 hal jalur yang digunakan pada transmisi data serial yaitu data line dan clock line. data line berfungsi sebagai jalur pengiriman data sedangkan clock line berfungsi untuk singkronasi pengiriman data, jadi setiap bit yang dikirim melalui data line harus berbarengan dengan sinyal clock pada clock line. berikut contoh ilustrasinya
Pada fungsi shiftIn(), kita membutuhkan 2 jalur (kabel) satu untuk data line, satu lagi untuk clock line, data yang dikirim oleh perangkat external adalah data bit per bit (satu per satu bit dikirim secara berurutan) dan jumlah data yang dibaca oleh fungsi ini maksimal 8 bit setiap transmisi data, jadi jika kita ingin membaca data dengan jumlah 16 bit kita perlu memanggil fungsi shiftIn() 2 kali. berikut sintaxnya
byte incoming = shiftIn(dataPin, clockPin, bitOrder)
Parameter
- dataPin : nomor pin arduino yang menerima data serial
- clockPin : nomor pin yang dijadikan sumber sinyal clock (pin berlabel CLK)
- bitOrder : urutan pengiriman data
- LSBFIRST —> (Least Significant Bit) data yang dikirim dimulai dari bit yang nilai nya paling kecil ke yang paling besar
- MSBFIRST —> (Most Significat Bit) data yang dikirim dimulai dari bit yang nilainya paling besar ke yang paling kecil
Untuk menentukan bitOrder kita harus melihat sinyal output perangkat eksternal jika dia mengirim data mulai dari bit yang paling besar maka kita harus mengatur bitOrdernya menjadi MSBFIRST.
Nilai balik (return value) dari fungsi ini adalah data biner sebanyak 8 bit yang bisa kita simpan kedalam variabel dengan tipe data byte.
shiftOut()
Kebalikan dari shiftIn(), fungsi shiftOut() adalah mengirim data serial ke perangkat external melalui pin yang kita tentukan. data yang dikirim oleh arduino adalah data bit per bit (satu per satu bit dikirim secara berurutan) dan jumlah data yang dibaca oleh fungsi ini maksimal 8 bit setiap transmisi data. berikut syntaxnya:
shiftOut(dataPin, clockPin, bitOrder, value)
Parameter
- dataPin : nomor pin arduino yang mengirim data serial
- clockPin : nomor pin yang dijadikan sumber sinyal clock (pin berlabel CLK)
- bitOrder : urutan pengiriman data
- LSBFIRST —> (Least Significant Bit) data yang dikirim dimulai dari bit yang nilai nya paling kecil ke yang paling besar
- MSBFIRST —> (Most Significat Bit) data yang dikirim dimulai dari bit yang nilainya paling besar ke yang paling kecil
- value : data sebanyak 8 bit yang akan dikirim (data biasanya disimpan di variabel dan nama variabelnya yang dijadikan parameter)
Experiment penggunaan fungsi shiftIn() dan shiftOut() akan kita lakukan pada artikel tentang shift register yang akan saya buat pada artikel project selanjutnya, semoga bermanfaat.