Codigo donde falta la comunicacion serial

Dependencies:   mbed

Committer:
fabeltranm
Date:
Sat Mar 17 00:57:56 2018 +0000
Revision:
0:89b318e49395
Child:
1:526bdd5faa37
ok codigo

Who changed what in which revision?

UserRevisionLine numberNew contents of line
fabeltranm 0:89b318e49395 1 #include "mbed.h"
fabeltranm 0:89b318e49395 2
fabeltranm 0:89b318e49395 3 #include "main.h"
fabeltranm 0:89b318e49395 4
fabeltranm 0:89b318e49395 5
fabeltranm 0:89b318e49395 6
fabeltranm 0:89b318e49395 7 /*
fabeltranm 0:89b318e49395 8 El sitema tiene tres estados:
fabeltranm 0:89b318e49395 9 1. Standby: estado que indica que esta en espera de un telecomando (Ejecutar 0 guardar)
fabeltranm 0:89b318e49395 10 2. Drawing: estado en donde el piccolo eejecuta las ordenes giardadas en el array
fabeltranm 0:89b318e49395 11 de memora hasta encontrar el comando CM_STOP
fabeltranm 0:89b318e49395 12 3. Saving: estado donde el sistema recibe lso datos y lso almacena en memoria acorde
fabeltranm 0:89b318e49395 13 a los comandos de 0xfd, oxfc, 0xfb,0cfa, se sake de este modo cuado se recibe
fabeltranm 0:89b318e49395 14 el comando CM_STOP
fabeltranm 0:89b318e49395 15
fabeltranm 0:89b318e49395 16 todo telecomando debe finalizar con el dato CM_END
fabeltranm 0:89b318e49395 17 */
fabeltranm 0:89b318e49395 18
fabeltranm 0:89b318e49395 19
fabeltranm 0:89b318e49395 20 Serial command(USBTX, USBRX);
fabeltranm 0:89b318e49395 21
fabeltranm 0:89b318e49395 22
fabeltranm 0:89b318e49395 23
fabeltranm 0:89b318e49395 24 int main() {
fabeltranm 0:89b318e49395 25 init_servo();
fabeltranm 0:89b318e49395 26 init_serial();
fabeltranm 0:89b318e49395 27 draw();
fabeltranm 0:89b318e49395 28 nodraw();
fabeltranm 0:89b318e49395 29 home();
fabeltranm 0:89b318e49395 30 debug_m("inicio \n");
fabeltranm 0:89b318e49395 31 uint32_t read_cc;
fabeltranm 0:89b318e49395 32 while(1)
fabeltranm 0:89b318e49395 33 {
fabeltranm 0:89b318e49395 34 read_cc=read_command();
fabeltranm 0:89b318e49395 35 switch (read_cc) {
fabeltranm 0:89b318e49395 36 case CM_DRAWING: drawing(); break;
fabeltranm 0:89b318e49395 37 case CM_SAVING: saving(); break;
fabeltranm 0:89b318e49395 38 default: debug_m("error de comando. \nSe espera 0xFEF0 o 0xFFF0 \n");break ;
fabeltranm 0:89b318e49395 39 }
fabeltranm 0:89b318e49395 40 }
fabeltranm 0:89b318e49395 41 }
fabeltranm 0:89b318e49395 42
fabeltranm 0:89b318e49395 43
fabeltranm 0:89b318e49395 44
fabeltranm 0:89b318e49395 45 uint32_t read_command()
fabeltranm 0:89b318e49395 46 {
fabeltranm 0:89b318e49395 47 // retorna los byte recibidos concatenados en un entero, se reciben maximo 4 bytes,
fabeltranm 0:89b318e49395 48 // recibe hasta que encuetra un fin de comando "CM_END".
fabeltranm 0:89b318e49395 49 // Ejemplo: para el comando drawing se
fabeltranm 0:89b318e49395 50 // espera un byte, por lo que al recibir 0xFF y 0xF0 la funcióm retorna el 0xff
fabeltranm 0:89b318e49395 51 // siempre y cuando se reciba el fin de dato F0 de lo contrario retorna un cero
fabeltranm 0:89b318e49395 52 // para el caso del comando vertex2d se espera recibir 3 bytes, 1 del comando
fabeltranm 0:89b318e49395 53 // y dos bytes para x y y, se retorna la concatenación de los tres bytes siempre y
fabeltranm 0:89b318e49395 54 // cuando el cuarto byte sea CM_END de lo contrario retorna un cero
fabeltranm 0:89b318e49395 55
fabeltranm 0:89b318e49395 56 uint32_t val=0;
fabeltranm 0:89b318e49395 57 uint8_t cnt=0;
fabeltranm 0:89b318e49395 58
fabeltranm 0:89b318e49395 59 char endc=command.getc();
fabeltranm 0:89b318e49395 60
fabeltranm 0:89b318e49395 61 while(endc != CM_END && cnt <4) {
fabeltranm 0:89b318e49395 62 if(endc!=CM_END)
fabeltranm 0:89b318e49395 63 val=((val<<8) +endc);
fabeltranm 0:89b318e49395 64 endc=command.getc();
fabeltranm 0:89b318e49395 65 cnt++;
fabeltranm 0:89b318e49395 66 }
fabeltranm 0:89b318e49395 67 if(endc==CM_END)
fabeltranm 0:89b318e49395 68 return val;
fabeltranm 0:89b318e49395 69 return 0; //al retornar 0 indica que no se recibe el comando
fabeltranm 0:89b318e49395 70 }
fabeltranm 0:89b318e49395 71 void init_serial()
fabeltranm 0:89b318e49395 72 {
fabeltranm 0:89b318e49395 73 command.baud(9600);
fabeltranm 0:89b318e49395 74 }
fabeltranm 0:89b318e49395 75
fabeltranm 0:89b318e49395 76
fabeltranm 0:89b318e49395 77 void drawing(){
fabeltranm 0:89b318e49395 78 // la funcion se ejecuta siemrpe y cuando exista datos validos para leer de
fabeltranm 0:89b318e49395 79 // memoria
fabeltranm 0:89b318e49395 80 debug_m("se esta ejecutando el dibujo... \n");
fabeltranm 0:89b318e49395 81
fabeltranm 0:89b318e49395 82 uint8_t error=0;
fabeltranm 0:89b318e49395 83 MEM_TYPE dato;
fabeltranm 0:89b318e49395 84
fabeltranm 0:89b318e49395 85 tail_reset();
fabeltranm 0:89b318e49395 86
fabeltranm 0:89b318e49395 87 while(error==0){
fabeltranm 0:89b318e49395 88 error = mem_get(&dato);
fabeltranm 0:89b318e49395 89 if (error==0) {
fabeltranm 0:89b318e49395 90 switch (dato) {
fabeltranm 0:89b318e49395 91 case CM_DRAW:
fabeltranm 0:89b318e49395 92 debug_m("-> Baja Z\n");
fabeltranm 0:89b318e49395 93 draw();
fabeltranm 0:89b318e49395 94 break ;
fabeltranm 0:89b318e49395 95 case CM_NODRAW:
fabeltranm 0:89b318e49395 96 debug_m("-> Sube Z\n");
fabeltranm 0:89b318e49395 97 nodraw();
fabeltranm 0:89b318e49395 98 break ;
fabeltranm 0:89b318e49395 99 default:
fabeltranm 0:89b318e49395 100 int y = (uint8_t)(dato);
fabeltranm 0:89b318e49395 101 int x = (uint8_t)(dato>>8);
fabeltranm 0:89b318e49395 102 char ncomm = (uint8_t)(dato>>16);
fabeltranm 0:89b318e49395 103
fabeltranm 0:89b318e49395 104 if (ncomm == CM_VERTEX2D) {
fabeltranm 0:89b318e49395 105 debug_m("-> Mover piccolo x a %d y y a %d \n",x,x, y);
fabeltranm 0:89b318e49395 106 vertex2d(x,y);
fabeltranm 0:89b318e49395 107 }else
fabeltranm 0:89b318e49395 108 debug_m("-> ERROR DE COMMANDO: %d %d %d \n " ,ncomm,x,y,y);
fabeltranm 0:89b318e49395 109 break;
fabeltranm 0:89b318e49395 110 }
fabeltranm 0:89b318e49395 111 }
fabeltranm 0:89b318e49395 112 }
fabeltranm 0:89b318e49395 113
fabeltranm 0:89b318e49395 114 debug_m("fin del comando dibujar..\n");
fabeltranm 0:89b318e49395 115
fabeltranm 0:89b318e49395 116 }
fabeltranm 0:89b318e49395 117
fabeltranm 0:89b318e49395 118
fabeltranm 0:89b318e49395 119 void saving(){
fabeltranm 0:89b318e49395 120 debug_m("se inicia el comado guardar..\n");
fabeltranm 0:89b318e49395 121
fabeltranm 0:89b318e49395 122 MEM_TYPE dato=0;
fabeltranm 0:89b318e49395 123 mem_free();
fabeltranm 0:89b318e49395 124 while(dato !=CM_STOP){
fabeltranm 0:89b318e49395 125 dato = read_command();
fabeltranm 0:89b318e49395 126 if (dato !=CM_STOP)
fabeltranm 0:89b318e49395 127 mem_put(dato);
fabeltranm 0:89b318e49395 128 }
fabeltranm 0:89b318e49395 129 debug_m("fin del comado guardar..\n");
fabeltranm 0:89b318e49395 130
fabeltranm 0:89b318e49395 131 }
fabeltranm 0:89b318e49395 132
fabeltranm 0:89b318e49395 133 void debug_m(char *s , ... ){
fabeltranm 0:89b318e49395 134 #if DEBUG
fabeltranm 0:89b318e49395 135 command.printf(s);
fabeltranm 0:89b318e49395 136 #endif
fabeltranm 0:89b318e49395 137 }