Patricio Silva / Mbed 2 deprecated c3auto_c

Dependencies:   mbed

Committer:
elpatosilva
Date:
Sat Oct 26 00:55:35 2019 +0000
Revision:
0:749a196e6ebe
Child:
1:6e374a9b1bf5
first commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
elpatosilva 0:749a196e6ebe 1 #include "mbed.h"
elpatosilva 0:749a196e6ebe 2 #include "lib/Pserial.h"
elpatosilva 0:749a196e6ebe 3 #include "lib/Servo.h"
elpatosilva 0:749a196e6ebe 4 #include "lib/Sensor.h"
elpatosilva 0:749a196e6ebe 5
elpatosilva 0:749a196e6ebe 6 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
elpatosilva 0:749a196e6ebe 7 // Conf IO
elpatosilva 0:749a196e6ebe 8 DigitalOut led1(LED1); // HeartBeat
elpatosilva 0:749a196e6ebe 9 PwmOut cg90(PTD1);
elpatosilva 0:749a196e6ebe 10 AnalogIn opticLeftIn(PTB2);
elpatosilva 0:749a196e6ebe 11 AnalogIn opticRigthIn(PTB3);
elpatosilva 0:749a196e6ebe 12 DigitalOut ultrasonicTrigger(PTA1);
elpatosilva 0:749a196e6ebe 13 DigitalIn ultrasonicEcho(PTB9);
elpatosilva 0:749a196e6ebe 14 DigitalIn speedLeft(PTA2);
elpatosilva 0:749a196e6ebe 15 DigitalIn speedRigth(PTB23);
elpatosilva 0:749a196e6ebe 16
elpatosilva 0:749a196e6ebe 17 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
elpatosilva 0:749a196e6ebe 18 // Timers y relacionados
elpatosilva 0:749a196e6ebe 19 Ticker timer100ms;
elpatosilva 0:749a196e6ebe 20 LowPowerTimer timer1ms;
elpatosilva 0:749a196e6ebe 21 uint32_t maxUsTicker;
elpatosilva 0:749a196e6ebe 22
elpatosilva 0:749a196e6ebe 23 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
elpatosilva 0:749a196e6ebe 24 // Prototipos locales
elpatosilva 0:749a196e6ebe 25 void heartBeat();
elpatosilva 0:749a196e6ebe 26 void heartBeatSetFlag();
elpatosilva 0:749a196e6ebe 27 void serialReceivePc();
elpatosilva 0:749a196e6ebe 28 void cmdExec();
elpatosilva 0:749a196e6ebe 29 void sendOpticData();
elpatosilva 0:749a196e6ebe 30 void sendUltrasonicData();
elpatosilva 0:749a196e6ebe 31 void sendSpeedData();
elpatosilva 0:749a196e6ebe 32
elpatosilva 0:749a196e6ebe 33
elpatosilva 0:749a196e6ebe 34
elpatosilva 0:749a196e6ebe 35 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
elpatosilva 0:749a196e6ebe 36 // Constantes locales
elpatosilva 0:749a196e6ebe 37
elpatosilva 0:749a196e6ebe 38 // Version del FW
elpatosilva 0:749a196e6ebe 39 const uint8_t FIRMWARE_VERSION[] = "V0.03";
elpatosilva 0:749a196e6ebe 40
elpatosilva 0:749a196e6ebe 41 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
elpatosilva 0:749a196e6ebe 42 // Definiciones locales
elpatosilva 0:749a196e6ebe 43
elpatosilva 0:749a196e6ebe 44 // Estructura para uso auxiliar. Arduino es little endian
elpatosilva 0:749a196e6ebe 45 typedef union{
elpatosilva 0:749a196e6ebe 46 uint8_t u8[4];
elpatosilva 0:749a196e6ebe 47 uint16_t u16[2];
elpatosilva 0:749a196e6ebe 48 int8_t i8[2];
elpatosilva 0:749a196e6ebe 49 uint32_t u32;
elpatosilva 0:749a196e6ebe 50 int32_t i32;
elpatosilva 0:749a196e6ebe 51 }_work;
elpatosilva 0:749a196e6ebe 52
elpatosilva 0:749a196e6ebe 53
elpatosilva 0:749a196e6ebe 54 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
elpatosilva 0:749a196e6ebe 55 // Variables y objetos Locales
elpatosilva 0:749a196e6ebe 56 Serial pc(USBTX, USBRX, 19200);
elpatosilva 0:749a196e6ebe 57 _Pserial pserial;
elpatosilva 0:749a196e6ebe 58
elpatosilva 0:749a196e6ebe 59 _Sensor rigthOpticSensor;
elpatosilva 0:749a196e6ebe 60 _Sensor leftOpticSensor;
elpatosilva 0:749a196e6ebe 61 _Sensor ultrasonicSensor;
elpatosilva 0:749a196e6ebe 62 _Sensor rigthSpeedSensor;
elpatosilva 0:749a196e6ebe 63 _Sensor leftSpeedSensor;
elpatosilva 0:749a196e6ebe 64
elpatosilva 0:749a196e6ebe 65 _Servo servo;
elpatosilva 0:749a196e6ebe 66
elpatosilva 0:749a196e6ebe 67 //_Motor motorLeft
elpatosilva 0:749a196e6ebe 68 //_Motor motorRigth
elpatosilva 0:749a196e6ebe 69
elpatosilva 0:749a196e6ebe 70 /*
elpatosilva 0:749a196e6ebe 71 * Control de los sensores, tiempos de muestreo
elpatosilva 0:749a196e6ebe 72 */
elpatosilva 0:749a196e6ebe 73 uint16_t opticTimeInterval;
elpatosilva 0:749a196e6ebe 74 uint16_t ultrasonicTimeInterval;
elpatosilva 0:749a196e6ebe 75 uint16_t motorSpeedTimeInterval;
elpatosilva 0:749a196e6ebe 76
elpatosilva 0:749a196e6ebe 77 // Auxiliar
elpatosilva 0:749a196e6ebe 78 _work work;
elpatosilva 0:749a196e6ebe 79
elpatosilva 0:749a196e6ebe 80 // Flag del heartBeat()
elpatosilva 0:749a196e6ebe 81 bool heartBeatFlag;
elpatosilva 0:749a196e6ebe 82
elpatosilva 0:749a196e6ebe 83 extern _txbuffer TX;
elpatosilva 0:749a196e6ebe 84 extern _rxbuffer RX;
elpatosilva 0:749a196e6ebe 85 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
elpatosilva 0:749a196e6ebe 86 ///////////////// MAIN
elpatosilva 0:749a196e6ebe 87
elpatosilva 0:749a196e6ebe 88 int main(){
elpatosilva 0:749a196e6ebe 89 maxUsTicker = us_ticker_read();
elpatosilva 0:749a196e6ebe 90 timer100ms.attach(&heartBeatSetFlag, 0.1);
elpatosilva 0:749a196e6ebe 91 heartBeatFlag = false;
elpatosilva 0:749a196e6ebe 92 timer1ms.start();
elpatosilva 0:749a196e6ebe 93 setup(&rigthOpticSensor, &opticRigthIn);
elpatosilva 0:749a196e6ebe 94 setup(&leftOpticSensor, &opticLeftIn);
elpatosilva 0:749a196e6ebe 95 setup(&ultrasonicSensor, &ultrasonicTrigger, &ultrasonicEcho);
elpatosilva 0:749a196e6ebe 96 setup(&rigthSpeedSensor, &speedRigth);
elpatosilva 0:749a196e6ebe 97 setup(&leftSpeedSensor, &speedLeft);
elpatosilva 0:749a196e6ebe 98
elpatosilva 0:749a196e6ebe 99 opticTimeInterval = 0;
elpatosilva 0:749a196e6ebe 100 ultrasonicTimeInterval = 0;
elpatosilva 0:749a196e6ebe 101 motorSpeedTimeInterval = 0;
elpatosilva 0:749a196e6ebe 102
elpatosilva 0:749a196e6ebe 103 pc.attach(&serialReceivePc, Serial::RxIrq);
elpatosilva 0:749a196e6ebe 104 serialSetup(&pserial, &pc);
elpatosilva 0:749a196e6ebe 105
elpatosilva 0:749a196e6ebe 106 setup(&servo, &cg90);
elpatosilva 0:749a196e6ebe 107 while(1){
elpatosilva 0:749a196e6ebe 108 // heartBeat
elpatosilva 0:749a196e6ebe 109 if(heartBeatFlag) heartBeat();
elpatosilva 0:749a196e6ebe 110
elpatosilva 0:749a196e6ebe 111 // Overflow de us_ticker_read(), reseteo todo lo que utiliza este dato
elpatosilva 0:749a196e6ebe 112 if(maxUsTicker > us_ticker_read()){
elpatosilva 0:749a196e6ebe 113 maxUsTicker = us_ticker_read();
elpatosilva 0:749a196e6ebe 114 serialCmdClean(&pserial);
elpatosilva 0:749a196e6ebe 115 }
elpatosilva 0:749a196e6ebe 116
elpatosilva 0:749a196e6ebe 117 // envio datos que pueda haber en el buffer de salida
elpatosilva 0:749a196e6ebe 118 serialSubmit(&pserial);
elpatosilva 0:749a196e6ebe 119
elpatosilva 0:749a196e6ebe 120 // proceso comando presente en el buffer
elpatosilva 0:749a196e6ebe 121 if(pserial.RX.cmd)
elpatosilva 0:749a196e6ebe 122 cmdExec();
elpatosilva 0:749a196e6ebe 123
elpatosilva 0:749a196e6ebe 124 // Busco si hay un nuevo header en el buffer
elpatosilva 0:749a196e6ebe 125 serialGetFrame(&pserial);
elpatosilva 0:749a196e6ebe 126
elpatosilva 0:749a196e6ebe 127 // Ejecuto tareas de sensores
elpatosilva 0:749a196e6ebe 128 if(opticTimeInterval){
elpatosilva 0:749a196e6ebe 129 sendOpticData();
elpatosilva 0:749a196e6ebe 130 }
elpatosilva 0:749a196e6ebe 131
elpatosilva 0:749a196e6ebe 132 if(ultrasonicTimeInterval){
elpatosilva 0:749a196e6ebe 133 sendUltrasonicData();
elpatosilva 0:749a196e6ebe 134 }
elpatosilva 0:749a196e6ebe 135
elpatosilva 0:749a196e6ebe 136 if(motorSpeedTimeInterval){
elpatosilva 0:749a196e6ebe 137 sendSpeedData();
elpatosilva 0:749a196e6ebe 138 }
elpatosilva 0:749a196e6ebe 139 }
elpatosilva 0:749a196e6ebe 140 }
elpatosilva 0:749a196e6ebe 141
elpatosilva 0:749a196e6ebe 142
elpatosilva 0:749a196e6ebe 143
elpatosilva 0:749a196e6ebe 144 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
elpatosilva 0:749a196e6ebe 145 /// Funciones locales
elpatosilva 0:749a196e6ebe 146
elpatosilva 0:749a196e6ebe 147 /*
elpatosilva 0:749a196e6ebe 148 * Interrupcion, datos en el puerto serie con la PC
elpatosilva 0:749a196e6ebe 149 */
elpatosilva 0:749a196e6ebe 150 void serialReceivePc(){
elpatosilva 0:749a196e6ebe 151 serialReceive(&pserial);
elpatosilva 0:749a196e6ebe 152 }
elpatosilva 0:749a196e6ebe 153 void serialRecevePc(_Pserial *);
elpatosilva 0:749a196e6ebe 154
elpatosilva 0:749a196e6ebe 155
elpatosilva 0:749a196e6ebe 156 /*
elpatosilva 0:749a196e6ebe 157 * Señal de activo, dos parpadeos de 100ms cada dos segundos
elpatosilva 0:749a196e6ebe 158 */
elpatosilva 0:749a196e6ebe 159 void heartBeatSetFlag(){
elpatosilva 0:749a196e6ebe 160 heartBeatFlag = true;
elpatosilva 0:749a196e6ebe 161 }
elpatosilva 0:749a196e6ebe 162
elpatosilva 0:749a196e6ebe 163 void heartBeat(){
elpatosilva 0:749a196e6ebe 164 static int count = 0;
elpatosilva 0:749a196e6ebe 165 switch (count++){
elpatosilva 0:749a196e6ebe 166 case 0:
elpatosilva 0:749a196e6ebe 167 case 2:
elpatosilva 0:749a196e6ebe 168 led1 = 0;
elpatosilva 0:749a196e6ebe 169 break;
elpatosilva 0:749a196e6ebe 170 case 1:
elpatosilva 0:749a196e6ebe 171 case 3:
elpatosilva 0:749a196e6ebe 172 led1 = 1;
elpatosilva 0:749a196e6ebe 173 break;
elpatosilva 0:749a196e6ebe 174 case 20:
elpatosilva 0:749a196e6ebe 175 count = 0;
elpatosilva 0:749a196e6ebe 176 break;
elpatosilva 0:749a196e6ebe 177 }
elpatosilva 0:749a196e6ebe 178 heartBeatFlag = false;
elpatosilva 0:749a196e6ebe 179 }
elpatosilva 0:749a196e6ebe 180
elpatosilva 0:749a196e6ebe 181
elpatosilva 0:749a196e6ebe 182
elpatosilva 0:749a196e6ebe 183 /*
elpatosilva 0:749a196e6ebe 184 * Envio datos del sensor optico a la velocidad especificada
elpatosilva 0:749a196e6ebe 185 */
elpatosilva 0:749a196e6ebe 186 void sendOpticData(){
elpatosilva 0:749a196e6ebe 187 static unsigned long stime = timer1ms.read_ms();
elpatosilva 0:749a196e6ebe 188 if(timer1ms.read_ms() > stime+(opticTimeInterval*10)){
elpatosilva 0:749a196e6ebe 189 work.u16[0] = opticTimeInterval;
elpatosilva 0:749a196e6ebe 190 serialEnqueueHeader(&pserial, 12);
elpatosilva 0:749a196e6ebe 191 serialEnqueueData(&pserial, 0xA0); // Comando
elpatosilva 0:749a196e6ebe 192 serialEnqueueData(&pserial, work.u8[0]); // Intervalo actual (2 bytes)
elpatosilva 0:749a196e6ebe 193 serialEnqueueData(&pserial, work.u8[1]);
elpatosilva 0:749a196e6ebe 194 serialEnqueueData(&pserial, 0); // Sensor exterior izquierdo (2 bytes)
elpatosilva 0:749a196e6ebe 195 serialEnqueueData(&pserial, 0);
elpatosilva 0:749a196e6ebe 196 work.u16[0] = getValue(&leftOpticSensor);
elpatosilva 0:749a196e6ebe 197 work.u16[1] = getValue(&rigthOpticSensor);
elpatosilva 0:749a196e6ebe 198 serialEnqueueData(&pserial, work.u8[0]); // Sensor interior izquierdo (2 bytes)
elpatosilva 0:749a196e6ebe 199 serialEnqueueData(&pserial, work.u8[1]);
elpatosilva 0:749a196e6ebe 200 serialEnqueueData(&pserial, work.u8[2]); // Sensor interior drecho (2 bytes)
elpatosilva 0:749a196e6ebe 201 serialEnqueueData(&pserial, work.u8[3]);
elpatosilva 0:749a196e6ebe 202 serialEnqueueData(&pserial, 0); // Sensor exterior derecho (2 bytes)
elpatosilva 0:749a196e6ebe 203 serialEnqueueData(&pserial, 0);
elpatosilva 0:749a196e6ebe 204 serialEnqueueChksum(&pserial);
elpatosilva 0:749a196e6ebe 205 stime = timer1ms.read_ms();
elpatosilva 0:749a196e6ebe 206 }
elpatosilva 0:749a196e6ebe 207 }
elpatosilva 0:749a196e6ebe 208
elpatosilva 0:749a196e6ebe 209
elpatosilva 0:749a196e6ebe 210
elpatosilva 0:749a196e6ebe 211 /*
elpatosilva 0:749a196e6ebe 212 * Envio datos del sensor ultrasonico a la velocidad especificada
elpatosilva 0:749a196e6ebe 213 * Los tiempos de llamada deberian estar espaciados al menos 50ms
elpatosilva 0:749a196e6ebe 214 */
elpatosilva 0:749a196e6ebe 215 void sendUltrasonicData(){
elpatosilva 0:749a196e6ebe 216 static uint32_t stime = timer1ms.read_ms();
elpatosilva 0:749a196e6ebe 217 static bool inProgress = false;
elpatosilva 0:749a196e6ebe 218 if(inProgress){
elpatosilva 0:749a196e6ebe 219 uint16_t distance = isReady(&ultrasonicSensor);
elpatosilva 0:749a196e6ebe 220 if(distance){ // Ya tengo la distancia, la envio
elpatosilva 0:749a196e6ebe 221 work.u16[0] = ultrasonicTimeInterval;
elpatosilva 0:749a196e6ebe 222 serialEnqueueHeader(&pserial, 12);
elpatosilva 0:749a196e6ebe 223 serialEnqueueData(&pserial, 0xA1); // Comando
elpatosilva 0:749a196e6ebe 224 serialEnqueueData(&pserial, work.u8[0]); // Intervalo actual (2 bytes)
elpatosilva 0:749a196e6ebe 225 serialEnqueueData(&pserial, work.u8[1]);
elpatosilva 0:749a196e6ebe 226
elpatosilva 0:749a196e6ebe 227 work.u16[0] = ultrasonicTimeInterval;
elpatosilva 0:749a196e6ebe 228 serialEnqueueData(&pserial, work.u8[0]); // Distancia medida (2 bytes)
elpatosilva 0:749a196e6ebe 229 serialEnqueueData(&pserial, work.u8[1]);
elpatosilva 0:749a196e6ebe 230
elpatosilva 0:749a196e6ebe 231 serialEnqueueChksum(&pserial);
elpatosilva 0:749a196e6ebe 232 inProgress = false;
elpatosilva 0:749a196e6ebe 233 }
elpatosilva 0:749a196e6ebe 234 }
elpatosilva 0:749a196e6ebe 235
elpatosilva 0:749a196e6ebe 236 if(timer1ms.read_ms() > stime+(opticTimeInterval*10)){
elpatosilva 0:749a196e6ebe 237 reset(&ultrasonicSensor);
elpatosilva 0:749a196e6ebe 238 inProgress = init(&ultrasonicSensor);
elpatosilva 0:749a196e6ebe 239 stime = timer1ms.read_ms();
elpatosilva 0:749a196e6ebe 240 }
elpatosilva 0:749a196e6ebe 241 }
elpatosilva 0:749a196e6ebe 242
elpatosilva 0:749a196e6ebe 243
elpatosilva 0:749a196e6ebe 244
elpatosilva 0:749a196e6ebe 245 void sendSpeedData(){}
elpatosilva 0:749a196e6ebe 246
elpatosilva 0:749a196e6ebe 247 /*
elpatosilva 0:749a196e6ebe 248 * Se ha recibido un comando por puerto serie, lo interpreto y respondo
elpatosilva 0:749a196e6ebe 249 * Si no hay lugar en el buffer lo espero TXCMDTIME us
elpatosilva 0:749a196e6ebe 250 */
elpatosilva 0:749a196e6ebe 251 void cmdExec(){
elpatosilva 0:749a196e6ebe 252 bool ok = false;
elpatosilva 0:749a196e6ebe 253 switch(pserial.RX.buf[pserial.RX.cmdIndex]){
elpatosilva 0:749a196e6ebe 254 // ping
elpatosilva 0:749a196e6ebe 255 case 0xF0:{
elpatosilva 0:749a196e6ebe 256 ok = serialEnqueueHeader(&pserial, 3) && serialEnqueueData(&pserial, 0xF0) && serialEnqueueData(&pserial, 0x0D) && serialEnqueueChksum(&pserial);
elpatosilva 0:749a196e6ebe 257 break;
elpatosilva 0:749a196e6ebe 258 }
elpatosilva 0:749a196e6ebe 259 // Version de Firmware
elpatosilva 0:749a196e6ebe 260 case 0xF1:{
elpatosilva 0:749a196e6ebe 261 ok = serialEnqueueHeader(&pserial, 13+sizeof(FIRMWARE_VERSION)+sizeof(__DATE__)+sizeof(__TIME__)) && serialEnqueueData(&pserial, 0xF1);
elpatosilva 0:749a196e6ebe 262 for (int i = 0 ; i < sizeof(FIRMWARE_VERSION) ; i++)
elpatosilva 0:749a196e6ebe 263 ok = ok && serialEnqueueData(&pserial, FIRMWARE_VERSION[i]);
elpatosilva 0:749a196e6ebe 264 ok = ok && serialEnqueueData(&pserial, '_') && serialEnqueueData(&pserial, 'b') && serialEnqueueData(&pserial, 'u') && serialEnqueueData(&pserial, 'i') && serialEnqueueData(&pserial, 'l') && serialEnqueueData(&pserial, 'd') && serialEnqueueData(&pserial, '_');
elpatosilva 0:749a196e6ebe 265 for (int i = 0 ; i < sizeof(__DATE__) ; i++)
elpatosilva 0:749a196e6ebe 266 ok = ok && serialEnqueueData(&pserial, __DATE__[i]);
elpatosilva 0:749a196e6ebe 267 ok = ok && serialEnqueueData(&pserial, '_') && serialEnqueueData(&pserial, 'a') && serialEnqueueData(&pserial, 't') && serialEnqueueData(&pserial, '_');
elpatosilva 0:749a196e6ebe 268 for (int i = 0 ; i < sizeof(__TIME__) ; i++)
elpatosilva 0:749a196e6ebe 269 ok = ok && serialEnqueueData(&pserial, __TIME__[i]);
elpatosilva 0:749a196e6ebe 270 ok = ok && serialEnqueueChksum(&pserial);
elpatosilva 0:749a196e6ebe 271 break;
elpatosilva 0:749a196e6ebe 272 }
elpatosilva 0:749a196e6ebe 273 // Sensores Opticos
elpatosilva 0:749a196e6ebe 274 case 0xA0:{
elpatosilva 0:749a196e6ebe 275 work.u8[0] = pserial.RX.buf[pserial.RX.cmdIndex+1];
elpatosilva 0:749a196e6ebe 276 work.u8[1] = pserial.RX.buf[pserial.RX.cmdIndex+2];
elpatosilva 0:749a196e6ebe 277 opticTimeInterval = work.u16[0];
elpatosilva 0:749a196e6ebe 278 ok = true;
elpatosilva 0:749a196e6ebe 279 break;
elpatosilva 0:749a196e6ebe 280 }
elpatosilva 0:749a196e6ebe 281 // Sensor Ultrasonico
elpatosilva 0:749a196e6ebe 282 case 0xA1:{
elpatosilva 0:749a196e6ebe 283 work.u8[0] = pserial.RX.buf[pserial.RX.cmdIndex+1];
elpatosilva 0:749a196e6ebe 284 work.u8[1] = pserial.RX.buf[pserial.RX.cmdIndex+2];
elpatosilva 0:749a196e6ebe 285 ultrasonicTimeInterval = work.u16[0];
elpatosilva 0:749a196e6ebe 286 ok = true;
elpatosilva 0:749a196e6ebe 287 break;
elpatosilva 0:749a196e6ebe 288 }
elpatosilva 0:749a196e6ebe 289 // Sensores de horquilla
elpatosilva 0:749a196e6ebe 290 case 0xA4:{
elpatosilva 0:749a196e6ebe 291 work.u8[0] = pserial.RX.buf[pserial.RX.cmdIndex+1];
elpatosilva 0:749a196e6ebe 292 work.u8[1] = pserial.RX.buf[pserial.RX.cmdIndex+2];
elpatosilva 0:749a196e6ebe 293 motorSpeedTimeInterval = work.u16[0];
elpatosilva 0:749a196e6ebe 294 ok = true;
elpatosilva 0:749a196e6ebe 295 break;
elpatosilva 0:749a196e6ebe 296 }
elpatosilva 0:749a196e6ebe 297 default:{
elpatosilva 0:749a196e6ebe 298 ok = serialEnqueueHeader(&pserial, 2) && serialEnqueueData(&pserial, 0xFF) && serialEnqueueChksum(&pserial);
elpatosilva 0:749a196e6ebe 299 }
elpatosilva 0:749a196e6ebe 300 }
elpatosilva 0:749a196e6ebe 301 if (ok || us_ticker_read() > pserial.TX.cmdTime + TXCMDTIME){
elpatosilva 0:749a196e6ebe 302 pserial.RX.cmd = false;
elpatosilva 0:749a196e6ebe 303 pserial.RX.indexR = pserial.RX.cmdIndex+pserial.RX.payloadSize;
elpatosilva 0:749a196e6ebe 304 pserial.TX.cmdTime = 0;
elpatosilva 0:749a196e6ebe 305 }
elpatosilva 0:749a196e6ebe 306 }