'------------------------------------------------------------------------------- ' File: gp2d12.bas ' Description: subroutines to manipulate data from Sharp GP2D12 sensors ' Author: Dennis Draheim ' Created: 8/10/2000 ' Support Files: GP2D12Cal2.txt, a file of calibration constants ' first column is distance in inches, 2nd is sensor reading '------------------------------------------------------------------------------- Option Explicit Private GP2D12CalibrationTable As New SingleTableData Private Const NumTableEntries As Integer = 22 '------------------------------------------------------------------------------- Sub InitGP2D12CalibrationTable() Call GP2D12CalibrationTable.Source("GP2D12Cal2.txt") End Sub '------------------------------------------------------------------------------- Sub LinearizeGP2D12(ByVal reading as Single, ByRef inches as Single) Dim i as Integer Dim x0 As Single, x1 As Single Dim y0 As Single, y1 As Single For i = 1 to NumTableEntries If reading >= GP2D12CalibrationTable(2,i) Then If i = 1 Then inches = GP2D12CalibrationTable(1,i) Else x0 = GP2D12CalibrationTable(2,i-1) x1 = GP2D12CalibrationTable(2,i) y0 = GP2D12CalibrationTable(1,i-1) y1 = GP2D12CalibrationTable(1,i) inches = y0 + (((reading - x0) / (x1 - x0)) * (y1 - y0)) End If Exit Sub End If Next inches = GP2D12CalibrationTable(1,NumTableEntries) End Sub '------------------------------------------------------------------------------- Sub EchoADC(ByVal pin as Byte) ' interactive routine to build calibration file Dim adcReading As Single Dim i as Integer Dim serialByte As Byte, success As Boolean For i = 1 to 48 Do Call GetByte(serialByte, success) Loop Until success Call GetADC(pin, adcReading) Call PutI(i) Call PutByte(Asc(",")) Call PutS(adcReading) Call NewLine Next End Sub '------------------------------------------------------------------------------- Sub TestGP2D12() ' routine to test calibration accuracy Do Call EchoInches(IRForkLeft) Call EchoInches(IRFront) Call EchoInches(IRForkRight) Call NewLine Call Delay(0.5) Loop End Sub '------------------------------------------------------------------------------- Sub EchoInches(ByVal pin as Byte) Dim adcReading As Single, inches As Single Call GetADC(pin, adcReading) Call LinearizeGP2D12(adcReading, inches) Call PutS(inches) Call PutByte(Asc(" ")) End Sub