@@ -96,104 +96,113 @@ void loop(){
9696 }
9797 if (packeter.checkPayload ()) {
9898 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+ }
129133 }
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+ }
143149 }
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){
197206 case ' X' :
198207 packeter.unpacketC1B (code, ack_code);
199208 if (ack_code == ' K' ) {
@@ -207,6 +216,9 @@ void loop(){
207216 case 1 :
208217 alvik.setBehaviour (LIFT_ILLUMINATOR, true );
209218 break ;
219+ case 2 :
220+ alvik.setBehaviour (BATTERY_ALERT, true );
221+ break ;
210222 default :
211223 alvik.setBehaviour (ALL_BEHAVIOURS, false );
212224 }
@@ -227,6 +239,8 @@ void loop(){
227239 alvik.updateTouch ();
228240 msg_size = packeter.packetC1B (' t' , alvik.getTouchKeys ());
229241 alvik.serial ->write (packeter.msg ,msg_size);
242+ msg_size = packeter.packetC1B (' m' , alvik.getMotion ());
243+ alvik.serial ->write (packeter.msg ,msg_size);
230244 break ;
231245 case 2 :
232246 alvik.updateAPDS ();
@@ -278,13 +292,22 @@ void loop(){
278292 msg_size = packeter.packetC3B (0x7E , version[0 ], version[1 ], version[2 ]);
279293 alvik.serial ->write (packeter.msg ,msg_size);
280294 }
281- if (ack_check && alvik.isTargetReached ()){
295+ if (ack_check && ( alvik.isTargetReached () || alvik. isPositionReached () || alvik. isPositionLeftReached () || alvik. isPositionRightReached () )){
282296 if (ack_required == MOVEMENT_ROTATE){
283297 msg_size = packeter.packetC1B (' x' , ' R' );
284298 }
285299 if (ack_required == MOVEMENT_MOVE){
286300 msg_size = packeter.packetC1B (' x' , ' M' );
287301 }
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+ }
288311 }
289312 else {
290313 msg_size = packeter.packetC1B (' x' , 0 );
@@ -309,7 +332,7 @@ void loop(){
309332 if (millis ()-tbattery>1000 ){
310333 tbattery = millis ();
311334 alvik.updateBMS ();
312- msg_size = packeter.packetC1F (' p' , alvik.getBatteryChargePercentage ());
335+ msg_size = packeter.packetC1F (' p' , alvik.isBatteryCharging ()*alvik. getBatteryChargePercentage ());
313336 alvik.serial ->write (packeter.msg ,msg_size);
314337 }
315338}
0 commit comments