Menghubungkan BASIC Stamp dengan Modul Sonar SRF04

Mikrokontroler harus merubah level logika pada pin INIT pada modul sonar untuk memulai sebuah pembacaan. Setelah pin input INIT menjadi LOW, modul sonar akan mengirimkan sebuah ping. Setelah itu, output ECHO menjadi HIGH dan akan menjadi LOW kembali setelah modul menerima sebuah pantulan.

Perintah PULSOUT mengirimkan sebuah pulsa high pada pin INIT pada modul sonar. Perintah PULSIN mengukur waktu yang diperlukan gelombang pantul untuk kembali. Setelah merekam pembacaan, mikrokontroler menunggu 10 ms untuk memberikan waktu pada modul untuk melakukan reset secara baik.

Waktu eksekusi dari perintah PULSIN adalah berbeda untuk pin yang berbeda. Bila kita merubah pin yang digunakan, perintah PULSIN dalam subrutin sr_sonar di atas mungkin akan kehilangan tepi naik dari input ECHO dan mengembalikan nilai pembacaan nol. Menggunakan perintah RCTIME akan memperbaiki masalah ini. Trik lain adalah memberikan sedikit jeda dengan sebuah perintah dummy sebelum mengukur waktu echo dengan perintah RCTIME (lihat contoh di bawah). Kita perlu melakukan percobaan untuk menentukan kode terbaik untuk aplikasi yang dibuat.

'
' Devantech SRF04 Example
'

wDist var word

INIT con 0
ECHO con 1

' CONVERSION FACTORS:
'
' The PULSIN command returns the round-trip echo time in 2us units
' which is equivalent to the one-way trip time in 1us units.
'
' Filename: srf04-1.bs2
' distance = (echo time) / (conversion factor)
'
' use 74 for inches (73.746us per 1 in)
' use 29 for centimeters (29.033us per 1 cm)
'

convfac con 74 ' use inches

'---------------------------------------------

main:
 gosub sr_sonar
 debug dec wDist, cr
 pause 200
 goto main

sr_sonar:
 pulsout INIT,5 ' 10us init pulse
 pulsin ECHO,1,wDist ' measure echo time
 wDist=wDist/convfac ' convert to inches
 pause 10
 return

sr_sonar_2:
 pulsout INIT,5 ' 10us init pulse
 output INIT ' dummy command (delay)
 rctime ECHO,1,wDist ' measure echo time
 wDist=wDist/convfac ' convert to inches
 pause 10
 return