Sub Process_Globals
'These global variables will be declared once when the application starts.
'Public variables can be accessed from all modules.
Private tmr As Timer
Private stopcount, endcount As Int
Private direction As Boolean
Private state As Int
Private p1,p2,p3,p4 As Pin
End Sub
Public Sub Initialize(dpin1 As Byte _
,dpin2 As Byte _
,dpin3 As Byte _
,dpin4 As Byte _
,TimeDelay As ULong )
tmr.Initialize("tmr_Tick",TimeDelay)
p1.Initialize(dpin1,p1.MODE_OUTPUT)
p2.Initialize(dpin2,p2.MODE_OUTPUT)
p3.Initialize(dpin3,p3.MODE_OUTPUT)
p4.Initialize(dpin4,p4.MODE_OUTPUT)
End Sub
public Sub turn(forward As Boolean, angle As Float)
stopcount = 0
endcount = angle * 2048 /360
direction = forward
state = 0
tmr.Enabled = True
End Sub
Private Sub tmr_Tick
If direction Then
rotateRight
Else
rotateLeft
End If
state = (state + 1) mod 4
If stopcount >= endcount Then
tmr.Enabled = False
zeroall
Main.turndone("done")
End If
stopcount = stopcount + 1
End Sub
Private Sub rotateLeft
Select state
Case 0
p1.DigitalWrite(True)
p4.DigitalWrite(False)
Case 1
p2.DigitalWrite(True)
p1.DigitalWrite(False)
Case 2
p3.DigitalWrite(True)
p2.DigitalWrite(False)
Case 3
p4.DigitalWrite(True)
p3.DigitalWrite(False)
End Select
End Sub
Private Sub rotateRight
Select state
Case 0
p1.DigitalWrite(True)
p2.DigitalWrite(False)
Case 1
p4.DigitalWrite(True)
p1.DigitalWrite(False)
Case 2
p3.DigitalWrite(True)
p4.DigitalWrite(False)
Case 3
p2.DigitalWrite(True)
p3.DigitalWrite(False)
End Select
End Sub
Private Sub zeroall
p1.DigitalWrite(False)
p2.DigitalWrite(False)
p3.DigitalWrite(False)
p4.DigitalWrite(False)
End Sub