Vanesa Lara Cruz / Mbed 2 deprecated serial-protocol-V2

Dependencies:   mbed

Fork of 02_LAB_serial_protocol by ferney alberto beltran molina

Committer:
fabeltranm
Date:
Thu Oct 19 23:42:47 2017 +0000
Revision:
18:08bd68471535
Parent:
17:a0b884f78802
Child:
19:082e74f5e5ab
line okey all

Who changed what in which revision?

UserRevisionLine numberNew contents of line
fabeltranm 10:d2bf51fdc68a 1
fabeltranm 10:d2bf51fdc68a 2
fabeltranm 10:d2bf51fdc68a 3 #include "draw.h"
fabeltranm 10:d2bf51fdc68a 4 #include "main.h"
fabeltranm 0:55d11eeb0faf 5 #include "mbed.h"
fabeltranm 0:55d11eeb0faf 6
fabeltranm 10:d2bf51fdc68a 7
fabeltranm 0:55d11eeb0faf 8 Serial command(USBTX, USBRX);
fabeltranm 10:d2bf51fdc68a 9
fabeltranm 0:55d11eeb0faf 10 #define DEBUG 1
fabeltranm 0:55d11eeb0faf 11
fabeltranm 10:d2bf51fdc68a 12 uint8_t buffer_cmd[BUFF_SIZE]={0,0,0,0};
fabeltranm 7:fab201aa45b7 13
fabeltranm 7:fab201aa45b7 14
fabeltranm 7:fab201aa45b7 15
fabeltranm 0:55d11eeb0faf 16
fabeltranm 10:d2bf51fdc68a 17 void print_num(uint8_t val) {
fabeltranm 10:d2bf51fdc68a 18 if (val <10)
fabeltranm 1:0bcd96e56022 19 command.putc(val+0x30);
fabeltranm 1:0bcd96e56022 20 else
fabeltranm 2:200a9507b696 21 command.putc(val-9+0x40);
fabeltranm 10:d2bf51fdc68a 22
fabeltranm 1:0bcd96e56022 23 }
fabeltranm 10:d2bf51fdc68a 24
fabeltranm 1:0bcd96e56022 25 void print_bin2hex (uint8_t val)
fabeltranm 1:0bcd96e56022 26 {
fabeltranm 1:0bcd96e56022 27 command.printf(" 0x");
fabeltranm 1:0bcd96e56022 28 print_num(val>>4);
fabeltranm 10:d2bf51fdc68a 29 print_num(val&0x0f);
fabeltranm 1:0bcd96e56022 30 }
fabeltranm 1:0bcd96e56022 31
fabeltranm 10:d2bf51fdc68a 32
fabeltranm 0:55d11eeb0faf 33 void Read_command()
fabeltranm 0:55d11eeb0faf 34 {
fabeltranm 10:d2bf51fdc68a 35 // TODO : TIMEOUT UART SERIAL
fabeltranm 0:55d11eeb0faf 36 for (uint8_t i=0; i<BUFF_SIZE;i++)
fabeltranm 10:d2bf51fdc68a 37 buffer_cmd[i]=command.getc();
fabeltranm 0:55d11eeb0faf 38 }
fabeltranm 0:55d11eeb0faf 39
fabeltranm 0:55d11eeb0faf 40 void echo_command()
fabeltranm 0:55d11eeb0faf 41 {
fabeltranm 0:55d11eeb0faf 42 for (uint8_t i=0; i<BUFF_SIZE;i++)
fabeltranm 10:d2bf51fdc68a 43 print_bin2hex(buffer_cmd[i]);
fabeltranm 0:55d11eeb0faf 44
fabeltranm 0:55d11eeb0faf 45 }
fabeltranm 0:55d11eeb0faf 46
fabeltranm 0:55d11eeb0faf 47
fabeltranm 10:d2bf51fdc68a 48 bool check_command()
fabeltranm 5:bf9591a365a4 49 {
fabeltranm 10:d2bf51fdc68a 50 if (buffer_cmd[BUFF_SIZE-1]== '>')
fabeltranm 10:d2bf51fdc68a 51 return 1;
fabeltranm 10:d2bf51fdc68a 52 return 0;
fabeltranm 10:d2bf51fdc68a 53 }
fabeltranm 10:d2bf51fdc68a 54
fabeltranm 10:d2bf51fdc68a 55
fabeltranm 10:d2bf51fdc68a 56 void command_led(){
fabeltranm 10:d2bf51fdc68a 57 uint16_t sec = buffer_cmd[TIME_LED_S1];
fabeltranm 10:d2bf51fdc68a 58 sec = (sec <<8) + buffer_cmd[TIME_LED_S0];
fabeltranm 10:d2bf51fdc68a 59 uint16_t msec = buffer_cmd[TIME_LED_mS1];
fabeltranm 10:d2bf51fdc68a 60 msec = (msec <<8) + buffer_cmd[TIME_LED_mS0];
fabeltranm 10:d2bf51fdc68a 61 #if DEBUG
fabeltranm 10:d2bf51fdc68a 62 command.printf("LED ON: %i segundos y %i milisegundos\n", sec, msec);
fabeltranm 10:d2bf51fdc68a 63 #endif
fabeltranm 10:d2bf51fdc68a 64 led_on(sec,msec);
fabeltranm 10:d2bf51fdc68a 65
fabeltranm 10:d2bf51fdc68a 66
fabeltranm 10:d2bf51fdc68a 67 }
fabeltranm 10:d2bf51fdc68a 68 void command_dot(){
fabeltranm 10:d2bf51fdc68a 69 uint8_t x=buffer_cmd[DOT_POS_X];
fabeltranm 10:d2bf51fdc68a 70 uint8_t y=buffer_cmd[DOT_POS_Y];
fabeltranm 10:d2bf51fdc68a 71
fabeltranm 10:d2bf51fdc68a 72 #if DEBUG
fabeltranm 10:d2bf51fdc68a 73 command.printf("draw dot: Coord X= %i y Coord Y = %i\n", x,y);
fabeltranm 9:3a8624147a4c 74 #endif
fabeltranm 10:d2bf51fdc68a 75 vertex2d(x,y);
fabeltranm 10:d2bf51fdc68a 76 draw();
fabeltranm 10:d2bf51fdc68a 77 nodraw();
fabeltranm 10:d2bf51fdc68a 78
fabeltranm 10:d2bf51fdc68a 79 }
fabeltranm 10:d2bf51fdc68a 80 void command_line(){
fabeltranm 10:d2bf51fdc68a 81 uint8_t xi=buffer_cmd[LINE_POS_Xi];
fabeltranm 10:d2bf51fdc68a 82 uint8_t xf=buffer_cmd[LINE_POS_Xf];
fabeltranm 10:d2bf51fdc68a 83 uint8_t yi=buffer_cmd[LINE_POS_Yi];
fabeltranm 10:d2bf51fdc68a 84 uint8_t yf=buffer_cmd[LINE_POS_Yf];
fabeltranm 10:d2bf51fdc68a 85
fabeltranm 10:d2bf51fdc68a 86 #if DEBUG
fabeltranm 12:b780833f517e 87 command.printf("draw line: ");
fabeltranm 12:b780833f517e 88 command.printf("Coord Xi= %i Coord Yi = %i Coord Xf= %i Coord Yf = %i\n", xi,yi,xf,yf);
fabeltranm 10:d2bf51fdc68a 89 #endif
fabeltranm 18:08bd68471535 90 // line( xi, yi, xf, yf);
fabeltranm 18:08bd68471535 91
fabeltranm 18:08bd68471535 92 float xp; float yp;
fabeltranm 18:08bd68471535 93 float m=100000; float b;
fabeltranm 18:08bd68471535 94 int st=1 ;
fabeltranm 18:08bd68471535 95 m=(float)(yf-yi)/(xf-xi);
fabeltranm 17:a0b884f78802 96
fabeltranm 18:08bd68471535 97 int run=1;
fabeltranm 18:08bd68471535 98 if (abs(m)<=1){
fabeltranm 18:08bd68471535 99 b=(float)yf-(float)(m*xf);
fabeltranm 18:08bd68471535 100 command.printf(" m = %f b= %f \n", m,b);
fabeltranm 18:08bd68471535 101 xp =xi;
fabeltranm 18:08bd68471535 102 while(run)
fabeltranm 18:08bd68471535 103 {
fabeltranm 18:08bd68471535 104 yp =m*xp+b;
fabeltranm 18:08bd68471535 105
fabeltranm 18:08bd68471535 106 print_bin2hex(xp); print_bin2hex(yp);
fabeltranm 18:08bd68471535 107 command.printf(" \n");
fabeltranm 18:08bd68471535 108 if (xf>xi){
fabeltranm 18:08bd68471535 109 xp=xp+st;
fabeltranm 18:08bd68471535 110 if (xp>xf)run=0;
fabeltranm 18:08bd68471535 111 }else {
fabeltranm 18:08bd68471535 112 xp-=st;
fabeltranm 18:08bd68471535 113 if (xp<xf)run=0;
fabeltranm 18:08bd68471535 114 }
fabeltranm 18:08bd68471535 115
fabeltranm 18:08bd68471535 116 }
fabeltranm 18:08bd68471535 117 }else{
fabeltranm 18:08bd68471535 118 m=(float)(xf-xi)/(yf-yi);
fabeltranm 18:08bd68471535 119 b=(float)xf-(float)(m*yf);
fabeltranm 18:08bd68471535 120 command.printf(" m = %f b= %f \n", m,b);
fabeltranm 18:08bd68471535 121 yp =yi;
fabeltranm 18:08bd68471535 122 while(run)
fabeltranm 18:08bd68471535 123 {
fabeltranm 18:08bd68471535 124 xp =m*yp+b;
fabeltranm 18:08bd68471535 125
fabeltranm 18:08bd68471535 126 print_bin2hex(xp); print_bin2hex(yp);
fabeltranm 18:08bd68471535 127 command.printf(" \n");
fabeltranm 18:08bd68471535 128 if (yf>yi){
fabeltranm 18:08bd68471535 129 yp=yp+st;
fabeltranm 18:08bd68471535 130 if (yp>yf)run=0;
fabeltranm 18:08bd68471535 131 }else {
fabeltranm 18:08bd68471535 132 yp-=st;
fabeltranm 18:08bd68471535 133 if (yp<f)run=0;
fabeltranm 18:08bd68471535 134 }
fabeltranm 18:08bd68471535 135
fabeltranm 18:08bd68471535 136 }
fabeltranm 18:08bd68471535 137 }
fabeltranm 17:a0b884f78802 138 }
fabeltranm 10:d2bf51fdc68a 139
fabeltranm 10:d2bf51fdc68a 140 void command_rectangle(){
fabeltranm 10:d2bf51fdc68a 141 uint8_t x=buffer_cmd[REC_POS_X];
fabeltranm 10:d2bf51fdc68a 142 uint8_t y=buffer_cmd[REC_POS_Y];
fabeltranm 10:d2bf51fdc68a 143 uint8_t width=buffer_cmd[REC_WIDTH];
fabeltranm 10:d2bf51fdc68a 144 uint8_t height=buffer_cmd[REC_HEIGHT ];
fabeltranm 10:d2bf51fdc68a 145
fabeltranm 10:d2bf51fdc68a 146 #if DEBUG
fabeltranm 10:d2bf51fdc68a 147 command.printf("draw rectangle: ");
fabeltranm 10:d2bf51fdc68a 148 command.printf("Coord X= %i Coord Y = %i width = %i height= %i\n", x,y,width,height);
fabeltranm 10:d2bf51fdc68a 149 #endif
fabeltranm 10:d2bf51fdc68a 150 rectangle( x, y, width, height);
fabeltranm 10:d2bf51fdc68a 151 }
fabeltranm 13:4226825e2060 152 void command_cicle(){
fabeltranm 13:4226825e2060 153 #if DEBUG
fabeltranm 13:4226825e2060 154 command.printf("draw cicle: ");
fabeltranm 13:4226825e2060 155 #endif
fabeltranm 13:4226825e2060 156 }
fabeltranm 14:124051c4524a 157 void command_home(){
fabeltranm 14:124051c4524a 158 #if DEBUG
fabeltranm 14:124051c4524a 159 command.printf("pos home ");
fabeltranm 14:124051c4524a 160 #endif
fabeltranm 14:124051c4524a 161 home();
fabeltranm 14:124051c4524a 162 }
fabeltranm 13:4226825e2060 163 void command_rstepservo(){
fabeltranm 13:4226825e2060 164 #if DEBUG
fabeltranm 13:4226825e2060 165 command.printf("config rstepservo: ");
fabeltranm 13:4226825e2060 166 #endif
fabeltranm 13:4226825e2060 167 }
fabeltranm 13:4226825e2060 168 void command_sstime(){
fabeltranm 13:4226825e2060 169 #if DEBUG
fabeltranm 13:4226825e2060 170 command.printf("config tiempo entre movimientos de los servos: ");
fabeltranm 13:4226825e2060 171 #endif
fabeltranm 14:124051c4524a 172 put_sstime(buffer_cmd[POS_1]);
fabeltranm 13:4226825e2060 173 }
fabeltranm 13:4226825e2060 174 void command_stop(){
fabeltranm 13:4226825e2060 175 #if DEBUG
fabeltranm 13:4226825e2060 176 command.printf("stop");
fabeltranm 13:4226825e2060 177 #endif
fabeltranm 13:4226825e2060 178 }
fabeltranm 13:4226825e2060 179 void command_pause(){
fabeltranm 13:4226825e2060 180 #if DEBUG
fabeltranm 13:4226825e2060 181 command.printf("picolo en pausa ");
fabeltranm 13:4226825e2060 182 #endif
fabeltranm 13:4226825e2060 183 }
fabeltranm 13:4226825e2060 184 void command_reanudar(){
fabeltranm 13:4226825e2060 185 #if DEBUG
fabeltranm 13:4226825e2060 186 command.printf("reanuda picolo ");
fabeltranm 13:4226825e2060 187 #endif
fabeltranm 13:4226825e2060 188 }
fabeltranm 13:4226825e2060 189 void command_stepmotor(){
fabeltranm 13:4226825e2060 190 #if DEBUG
fabeltranm 13:4226825e2060 191 command.printf("comando mover picolo: ");
fabeltranm 13:4226825e2060 192 #endif
fabeltranm 13:4226825e2060 193 }
fabeltranm 10:d2bf51fdc68a 194
fabeltranm 7:fab201aa45b7 195 void command_exe()
fabeltranm 7:fab201aa45b7 196 {
fabeltranm 9:3a8624147a4c 197 #if DEBUG
fabeltranm 10:d2bf51fdc68a 198 command.printf("Ejecutando comando: \n");
fabeltranm 7:fab201aa45b7 199 #endif
fabeltranm 10:d2bf51fdc68a 200
fabeltranm 10:d2bf51fdc68a 201 switch (buffer_cmd[COMM_N]){
fabeltranm 13:4226825e2060 202 case COMMAND_LED : command_led(); break;
fabeltranm 13:4226825e2060 203 case COMMAND_DOT : command_dot(); break;
fabeltranm 13:4226825e2060 204 case COMMAND_LINE: command_line(); break;
fabeltranm 13:4226825e2060 205 case COMMAND_RECTANGLE: command_rectangle(); break;
fabeltranm 13:4226825e2060 206 case COMMAND_CICLE: command_cicle(); break;
fabeltranm 14:124051c4524a 207 case COMMAND_HOME: command_home(); break;
fabeltranm 13:4226825e2060 208 case COMMAND_RSTEPSERVO: command_rstepservo(); break;
fabeltranm 13:4226825e2060 209 case COMMAND_SS_TIME: command_sstime(); break;
fabeltranm 13:4226825e2060 210 case COMMAND_STOP : command_stop(); break;
fabeltranm 13:4226825e2060 211 case COMMAND_PAUSA: command_pause(); break;
fabeltranm 13:4226825e2060 212 case COMMAND_REANUDAR: command_reanudar(); break;
fabeltranm 13:4226825e2060 213 case MOVER_STEPMOTOR: command_stepmotor(); break;
fabeltranm 10:d2bf51fdc68a 214 default:
fabeltranm 10:d2bf51fdc68a 215 #if DEBUG
fabeltranm 10:d2bf51fdc68a 216 command.printf("comando no encontrado\n");
fabeltranm 10:d2bf51fdc68a 217 #endif
fabeltranm 10:d2bf51fdc68a 218 }
fabeltranm 7:fab201aa45b7 219 }
fabeltranm 7:fab201aa45b7 220
fabeltranm 7:fab201aa45b7 221
fabeltranm 7:fab201aa45b7 222
fabeltranm 0:55d11eeb0faf 223 int main() {
fabeltranm 0:55d11eeb0faf 224 #if DEBUG
fabeltranm 0:55d11eeb0faf 225 command.printf("inicio con debug\n");
fabeltranm 0:55d11eeb0faf 226 #else
fabeltranm 0:55d11eeb0faf 227 command.printf("inicio sin debug\n");
fabeltranm 0:55d11eeb0faf 228 #endif
fabeltranm 0:55d11eeb0faf 229 uint8_t val;
fabeltranm 0:55d11eeb0faf 230 while(1){
fabeltranm 0:55d11eeb0faf 231 val=command.getc();
fabeltranm 0:55d11eeb0faf 232 if (val== '<'){
fabeltranm 0:55d11eeb0faf 233 Read_command();
fabeltranm 4:bcc2d1bebb95 234 if (check_command()){
fabeltranm 7:fab201aa45b7 235 command_exe();
fabeltranm 8:cd9b52716920 236 }else{
fabeltranm 6:cb6b868465c3 237 #if DEBUG
fabeltranm 8:cd9b52716920 238 command.printf("\n ERROR COMANDO -> ");
fabeltranm 8:cd9b52716920 239 echo_command();
fabeltranm 10:d2bf51fdc68a 240 command.printf("\n");
fabeltranm 6:cb6b868465c3 241 #endif
fabeltranm 8:cd9b52716920 242 }
fabeltranm 8:cd9b52716920 243 }else{
fabeltranm 8:cd9b52716920 244 #if DEBUG
fabeltranm 8:cd9b52716920 245 command.printf("error de inicio de trama: ");
fabeltranm 8:cd9b52716920 246 command.putc(val);
fabeltranm 8:cd9b52716920 247 #endif
fabeltranm 3:7c26d338e372 248 }
fabeltranm 3:7c26d338e372 249
fabeltranm 0:55d11eeb0faf 250 }
fabeltranm 0:55d11eeb0faf 251 }
fabeltranm 0:55d11eeb0faf 252