This module is part of the original MMBasic library. It is reproduced here with kind permission of Hugh Buckle and Geoff Graham. Be aware it may reference functionality which has changed or is deprecated in the latest versions of MMBasic.¶
Note: Any required file(s) are available in the attachments tab (top right).
PotTest.bas
' Potentiometer test
' -----------------------
' Author: Graeme Anderson
' Date: Oct-2012
' -----------------------
' GND and pin 10 are the 10k resistance ---/\/\/\/\/\---
' pin 8 is the wiper ----^
SetPin 8,1 ' analog input
SetPin 10,8 ' digital output (used as v+)
' I use pin 10 as v+ as the wiring of my project is neater
' and I can deactivate the pot by settiing pin 10 low.
' Read value from pin 8 to check for any change as pin 10 is set from low to
' high. If a change is detected the the potentiometer is connected.
' Set the wiper to about midway to ensure that the program detects the pot
Pin(10)=0 ' initial low
For i = 1 To 10
vValue = Pin(8) ' initial voltage value
Next
Pin(10)=1 ' set high (3.3v)
If Abs(Pin(8) - vValue)>1 Then ' pot is connected (this is not foolproof!)
' calbration
' the value read can represent anything; my project treats it as milliseconds
Print "Rotate the potentiometer to one extreme and ";
Input "enter the minimum delay (ms)";dMin
vMin =Pin(8)
Print "Rotate the potentiometer to the other extreme and ";
Input "enter the maximum delay (ms)";dMax
vMax=Pin(8)
Cls
Print @(50, 80) "Delay = ";
Do
vValue =Pin(8)
dValue=Cint(dMin+Abs((dmax-dmin)/(vmax-vmin))*vValue)
If dvalue <> dPrev Then
Print @(90, 80) dvalue;" ms "
Print String$(Cint(dValue*70/dMax),"#");Space$(70)
EndIf
dPrev = dValue
Loop
Else
Print "Potentiometer was not detected"
EndIf