Alyson Castiblanco
/
PARQUEADERO_VERTICAL
Codigo donde falta la comunicacion serial
main.cpp@0:89b318e49395, 2018-03-17 (annotated)
- 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?
User | Revision | Line number | New 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 | } |