@@ -96,104 +96,113 @@ void loop(){
96
96
}
97
97
if (packeter.checkPayload ()) {
98
98
code = packeter.payloadTop ();
99
- switch (code){
100
- case ' J' :
101
- packeter.unpacketC2F (code,left,right);
102
- alvik.disableKinematicsMovement ();
103
- alvik.disablePositionControl ();
104
- alvik.setRpm (left, right);
105
- break ;
106
-
107
- case ' V' :
108
- packeter.unpacketC2F (code,linear,angular);
109
- alvik.disableKinematicsMovement ();
110
- alvik.disablePositionControl ();
111
- alvik.drive (linear,angular);
112
- break ;
113
-
114
- case ' W' :
115
- packeter.unpacketC2B1F (code,label,control_type,value);
116
- alvik.disableKinematicsMovement ();
117
- if (label==' L' ){
118
- switch (control_type){
119
- case ' V' :
120
- alvik.disablePositionControlLeft ();
121
- alvik.setRpmLeft (value);
122
- break ;
123
- case ' P' :
124
- alvik.setPositionLeft (value);
125
- break ;
126
- case ' Z' :
127
- alvik.resetPositionLeft (value);
128
- break ;
99
+ if (!alvik.isBatteryAlert ()){
100
+ switch (code){
101
+ case ' J' :
102
+ packeter.unpacketC2F (code,left,right);
103
+ alvik.disableKinematicsMovement ();
104
+ alvik.disablePositionControl ();
105
+ alvik.setRpm (left, right);
106
+ break ;
107
+
108
+ case ' V' :
109
+ packeter.unpacketC2F (code,linear,angular);
110
+ alvik.disableKinematicsMovement ();
111
+ alvik.disablePositionControl ();
112
+ alvik.drive (linear,angular);
113
+ break ;
114
+
115
+ case ' W' :
116
+ packeter.unpacketC2B1F (code,label,control_type,value);
117
+ alvik.disableKinematicsMovement ();
118
+ if (label==' L' ){
119
+ switch (control_type){
120
+ case ' V' :
121
+ alvik.disablePositionControlLeft ();
122
+ alvik.setRpmLeft (value);
123
+ break ;
124
+ case ' P' :
125
+ alvik.setPositionLeft (value);
126
+ ack_required=MOVEMENT_LEFT;
127
+ ack_check=true ;
128
+ break ;
129
+ case ' Z' :
130
+ alvik.resetPositionLeft (value);
131
+ break ;
132
+ }
129
133
}
130
- }
131
- if (label==' R' ){
132
- switch (control_type){
133
- case ' V' :
134
- alvik.disablePositionControlRight ();
135
- alvik.setRpmRight (value);
136
- break ;
137
- case ' P' :
138
- alvik.setPositionRight (value);
139
- break ;
140
- case ' Z' :
141
- alvik.resetPositionRight (value);
142
- break ;
134
+ if (label==' R' ){
135
+ switch (control_type){
136
+ case ' V' :
137
+ alvik.disablePositionControlRight ();
138
+ alvik.setRpmRight (value);
139
+ break ;
140
+ case ' P' :
141
+ alvik.setPositionRight (value);
142
+ ack_required=MOVEMENT_RIGHT;
143
+ ack_check=true ;
144
+ break ;
145
+ case ' Z' :
146
+ alvik.resetPositionRight (value);
147
+ break ;
148
+ }
143
149
}
144
- }
145
- break ;
146
-
147
-
148
- case ' A' :
149
- packeter.unpacketC2F (code,position_left, position_right);
150
- alvik.disableKinematicsMovement ();
151
- alvik.setPosition (position_left, position_right);
152
- break ;
153
-
154
-
155
- case ' S' :
156
- packeter.unpacketC2B (code,servo_A,servo_B);
157
- alvik.setServoA (servo_A);
158
- alvik.setServoB (servo_B);
159
- break ;
160
-
161
- case ' L' :
162
- packeter.unpacketC1B (code,leds);
163
- alvik.setAllLeds (leds);
164
- break ;
165
-
166
- case ' P' :
167
- packeter.unpacketC1B3F (code,pid,kp,ki,kd);
168
- if (pid==' L' ){
169
- alvik.setKPidLeft (kp,ki,kd);
170
- }
171
- if (pid==' R' ){
172
- alvik.setKPidRight (kp,ki,kd);
173
- }
174
- break ;
175
-
176
- case ' R' :
177
- packeter.unpacketC1F (code, value);
178
- alvik.disablePositionControl ();
179
- alvik.rotate (value);
180
- ack_required=MOVEMENT_ROTATE;
181
- ack_check=true ;
182
- break ;
183
-
184
- case ' G' :
185
- packeter.unpacketC1F (code, value);
186
- alvik.disablePositionControl ();
187
- alvik.move (value);
188
- ack_required=MOVEMENT_MOVE;
189
- ack_check=true ;
190
- break ;
191
-
192
- case ' Z' :
193
- packeter.unpacketC3F (code, x, y, theta);
194
- alvik.resetPose (x, y, theta);
195
- break ;
196
-
150
+ break ;
151
+
152
+
153
+ case ' A' :
154
+ packeter.unpacketC2F (code,position_left, position_right);
155
+ alvik.disableKinematicsMovement ();
156
+ alvik.setPosition (position_left, position_right);
157
+ ack_required=MOVEMENT_POSITION;
158
+ ack_check=true ;
159
+ break ;
160
+
161
+
162
+ case ' S' :
163
+ packeter.unpacketC2B (code,servo_A,servo_B);
164
+ alvik.setServoA (servo_A);
165
+ alvik.setServoB (servo_B);
166
+ break ;
167
+
168
+ case ' L' :
169
+ packeter.unpacketC1B (code,leds);
170
+ alvik.setAllLeds (leds);
171
+ break ;
172
+
173
+ case ' P' :
174
+ packeter.unpacketC1B3F (code,pid,kp,ki,kd);
175
+ if (pid==' L' ){
176
+ alvik.setKPidLeft (kp,ki,kd);
177
+ }
178
+ if (pid==' R' ){
179
+ alvik.setKPidRight (kp,ki,kd);
180
+ }
181
+ break ;
182
+
183
+ case ' R' :
184
+ packeter.unpacketC1F (code, value);
185
+ alvik.disablePositionControl ();
186
+ alvik.rotate (value);
187
+ ack_required=MOVEMENT_ROTATE;
188
+ ack_check=true ;
189
+ break ;
190
+
191
+ case ' G' :
192
+ packeter.unpacketC1F (code, value);
193
+ alvik.disablePositionControl ();
194
+ alvik.move (value);
195
+ ack_required=MOVEMENT_MOVE;
196
+ ack_check=true ;
197
+ break ;
198
+
199
+ case ' Z' :
200
+ packeter.unpacketC3F (code, x, y, theta);
201
+ alvik.resetPose (x, y, theta);
202
+ break ;
203
+ }
204
+ }
205
+ switch (code){
197
206
case ' X' :
198
207
packeter.unpacketC1B (code, ack_code);
199
208
if (ack_code == ' K' ) {
@@ -207,6 +216,9 @@ void loop(){
207
216
case 1 :
208
217
alvik.setBehaviour (LIFT_ILLUMINATOR, true );
209
218
break ;
219
+ case 2 :
220
+ alvik.setBehaviour (BATTERY_ALERT, true );
221
+ break ;
210
222
default :
211
223
alvik.setBehaviour (ALL_BEHAVIOURS, false );
212
224
}
@@ -227,6 +239,8 @@ void loop(){
227
239
alvik.updateTouch ();
228
240
msg_size = packeter.packetC1B (' t' , alvik.getTouchKeys ());
229
241
alvik.serial ->write (packeter.msg ,msg_size);
242
+ msg_size = packeter.packetC1B (' m' , alvik.getMotion ());
243
+ alvik.serial ->write (packeter.msg ,msg_size);
230
244
break ;
231
245
case 2 :
232
246
alvik.updateAPDS ();
@@ -278,13 +292,22 @@ void loop(){
278
292
msg_size = packeter.packetC3B (0x7E , version[0 ], version[1 ], version[2 ]);
279
293
alvik.serial ->write (packeter.msg ,msg_size);
280
294
}
281
- if (ack_check && alvik.isTargetReached ()){
295
+ if (ack_check && ( alvik.isTargetReached () || alvik. isPositionReached () || alvik. isPositionLeftReached () || alvik. isPositionRightReached () )){
282
296
if (ack_required == MOVEMENT_ROTATE){
283
297
msg_size = packeter.packetC1B (' x' , ' R' );
284
298
}
285
299
if (ack_required == MOVEMENT_MOVE){
286
300
msg_size = packeter.packetC1B (' x' , ' M' );
287
301
}
302
+ if (ack_required == MOVEMENT_POSITION){
303
+ msg_size = packeter.packetC1B (' x' , ' P' );
304
+ }
305
+ if (ack_required == MOVEMENT_LEFT){
306
+ msg_size = packeter.packetC1B (' x' , ' P' );
307
+ }
308
+ if (ack_required == MOVEMENT_RIGHT){
309
+ msg_size = packeter.packetC1B (' x' , ' P' );
310
+ }
288
311
}
289
312
else {
290
313
msg_size = packeter.packetC1B (' x' , 0 );
@@ -309,7 +332,7 @@ void loop(){
309
332
if (millis ()-tbattery>1000 ){
310
333
tbattery = millis ();
311
334
alvik.updateBMS ();
312
- msg_size = packeter.packetC1F (' p' , alvik.getBatteryChargePercentage ());
335
+ msg_size = packeter.packetC1F (' p' , alvik.isBatteryCharging ()*alvik. getBatteryChargePercentage ());
313
336
alvik.serial ->write (packeter.msg ,msg_size);
314
337
}
315
338
}
0 commit comments