-
Notifications
You must be signed in to change notification settings - Fork 4
/
HeaderEddieAbHb25Encoders.spin
134 lines (93 loc) · 3.79 KB
/
HeaderEddieAbHb25Encoders.spin
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
CON{{ ****** Public Notes ******
This header file should be used with robots using the Propeller Activity Board
and HB-25 Motor controllers.
This firmware update is part of the Open Propeller Project #8. For more information
about this project see the following thread in the Parallax forum.
http://forums.parallax.com/showthread.php/158030
This header file makes it possible to easily change hardware while using the
same base code.
The hardware specific objects are included in this header. This allows updates
to the Eddie firmware to be easily applied to both robots using the original
Eddie harware and to robots using the Arlo hardware.
}}
CON '' Activity Board Constants
' Encoders
ENCODERS_PIN_0 = 14
ENCODERS_PIN_1 = 16
ENABLE_0 = 12
ENABLE_1 = 13
POSITIVE_DIRECTION_PIN_0 = -1
POSITIVE_DIRECTION_PIN_1 = -1
NEGATIVE_DIRECTION_PIN_0 = -1
NEGATIVE_DIRECTION_PIN_1 = -1
' ADC (Activity Board)
ADC_CS = 21
ADC_SCL = 20
ADC_DO = 19
ADC_DI = 18
CON
'' distance travelled per encoder tick = 2,455mm / 720 = 3.410mm
'' bot radius = 59.52 ticks
MICROMETERS_PER_TICK = 3410 '' User changeable
POSITIONS_PER_ROTATION = 748 ' 744 '' User changeable
' "POSITIONS_PER_ROTATION" is the distance one wheel needs to travel to rotate the
' robot a full revolution while one wheel remains stationary.
' Motor names
#0
LEFT_MOTOR
RIGHT_MOTOR
REVERSE_LEFT_FLAG = 0
REVERSE_RIGHT_FLAG = 0
' Pin assignments
' Ping))) sensors
PING_0 = 0 '' User changeable
PING_1 = 1 '' User changeable
PINGS_IN_USE = 2 '' User changeable
INITIAL_PING = |< PING_0 | |< PING_1 '' User changeable
' PC COMMUNICATION
USB_TX = 30
USB_RX = 31
' PROP TO PROP COMMUNICATION
ALT_TX = 6 '10 '' User changeable
ALT_RX = 7 '11 '' User changeable
' Master GPIO mask (Only high pins can be set as outputs)
OUTPUTABLE = %00001100_00000000_00000011_11111111
PINGABLE = %00000000_00000000_00000011_11111111
SERVOABLE = PINGABLE
MAX_ALLOWED_PINGS = 10
INITIAL_GPIO = OUTPUTABLE & !INITIAL_PING
' Terminal Settings
BAUDMODE = %0000
USB_BAUD = 115_200 '' User changeable
ALT_BAUD = 115_200 '' User changeable
PROP_TO_PROP_BAUD = 9_600
MAX_POWER = 7520
SCALED_POWER = MAX_POWER / 500
SPEED_SCALER = 100
STOP_PULSE = 1_500
TOO_SMALL_TO_FIX = 0 '' User changeable
DEFAULT_INTEGRAL_NUMERATOR = 200 '' User changeable
DEFAULT_INTEGRAL_DENOMINATOR = 100 '' User changeable
DEFAULT_INTEGRAL_NUMERATOR_END = 100 '' User changeable
DEFAULT_INTEGRAL_DENOMINATOR_E = 100 '' User changeable
OBJ
'' The analog to digital converter object does not start a new cog.
'' The ADC object is required to use the "ADC" command
Adc : "ActivityBoardAdc" ' 4-channel 12-bits
'Motors : "Servo32v9Shared"
Music : "s2_music" ' uses one cog
PUB InitAdc
Adc.Init(ADC_CS, ADC_SCL, ADC_DI, ADC_DO)
'PUB StartMotors
'Motors.Start
'PUB SetMotorPower(side, power)
'Motors.Set(enablePin[side], STOP_PULSE + (power / SCALED_POWER))
PUB ReadAdc(ch)
result := Adc.Read(ch)
PUB InitMusic(volume)
Music.start_tones
Music.SetVolume(volume)
PUB PlaySong(songId, tempo)
Music.play_song(songId, tempo)
PUB SetVolume(volume)
Music.SetVolume(volume)