Juan Camilo Peña
/
ProyectoC1
Funciones: Ejecutar Guadar Vertex2D Draw No-draw Stop End
Comunicacion.cpp@2:834c4394fd95, 2018-03-14 (annotated)
- Committer:
- JuanCamilo93
- Date:
- Wed Mar 14 00:43:30 2018 +0000
- Revision:
- 2:834c4394fd95
- Parent:
- 1:1e86d6321238
Corte 1
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
JuanCamilo93 | 2:834c4394fd95 | 1 | /* |
JuanCamilo93 | 2:834c4394fd95 | 2 | Código para controlar la comunicación entre la tarjeta y el pc a través de terminal |
JuanCamilo93 | 2:834c4394fd95 | 3 | */ |
JuanCamilo93 | 0:744135d2e43b | 4 | #include "mbed.h" |
JuanCamilo93 | 2:834c4394fd95 | 5 | //Se incluye la clase dibujar |
JuanCamilo93 | 0:744135d2e43b | 6 | #include "Dibujar.h" |
JuanCamilo93 | 2:834c4394fd95 | 7 | //Se incluye la clase para el control de la memoria |
JuanCamilo93 | 2:834c4394fd95 | 8 | #include "ControlMemoria.h" |
JuanCamilo93 | 2:834c4394fd95 | 9 | //Se establecen los valores de los diferentes comandos principales |
JuanCamilo93 | 0:744135d2e43b | 10 | #define CM_EJECUTAR 0xff |
JuanCamilo93 | 0:744135d2e43b | 11 | #define CM_GUARDAR 0xfe |
JuanCamilo93 | 0:744135d2e43b | 12 | #define CM_VERTEX2D 0xfd |
JuanCamilo93 | 0:744135d2e43b | 13 | #define CM_DRAW 0xfc |
JuanCamilo93 | 0:744135d2e43b | 14 | #define CM_NODRAW 0xfb |
JuanCamilo93 | 0:744135d2e43b | 15 | #define CM_STOP 0xfa |
JuanCamilo93 | 0:744135d2e43b | 16 | #define CM_END 0xf0 |
JuanCamilo93 | 0:744135d2e43b | 17 | |
JuanCamilo93 | 2:834c4394fd95 | 18 | //Variable para establecer la comunicación USB |
JuanCamilo93 | 0:744135d2e43b | 19 | Serial command(USBTX, USBRX); |
JuanCamilo93 | 0:744135d2e43b | 20 | |
JuanCamilo93 | 2:834c4394fd95 | 21 | //Variable para poder llevar el conteo de las líneas de código correctas |
JuanCamilo93 | 2:834c4394fd95 | 22 | int CantLineasCorr=0; |
JuanCamilo93 | 2:834c4394fd95 | 23 | |
JuanCamilo93 | 2:834c4394fd95 | 24 | //Función encargada de ejecutar todo el código |
JuanCamilo93 | 2:834c4394fd95 | 25 | void ejecutar() |
JuanCamilo93 | 2:834c4394fd95 | 26 | { |
JuanCamilo93 | 2:834c4394fd95 | 27 | command.printf("Dibujando..."); |
JuanCamilo93 | 2:834c4394fd95 | 28 | uint32_t *full = 0; |
JuanCamilo93 | 2:834c4394fd95 | 29 | |
JuanCamilo93 | 2:834c4394fd95 | 30 | if(CantLineasCorr>=1) { |
JuanCamilo93 | 2:834c4394fd95 | 31 | command.printf("Se inicia dibujo"); |
JuanCamilo93 | 2:834c4394fd95 | 32 | } else { |
JuanCamilo93 | 2:834c4394fd95 | 33 | command.printf("No se han encontrado lineas de comando"); |
JuanCamilo93 | 2:834c4394fd95 | 34 | } |
JuanCamilo93 | 2:834c4394fd95 | 35 | |
JuanCamilo93 | 2:834c4394fd95 | 36 | for(int i=0; i<=CantLineasCorr; i++) { |
JuanCamilo93 | 2:834c4394fd95 | 37 | |
JuanCamilo93 | 2:834c4394fd95 | 38 | //char Linea= mem_get(full); |
JuanCamilo93 | 2:834c4394fd95 | 39 | command.printf("Dibujando"); |
JuanCamilo93 | 2:834c4394fd95 | 40 | |
JuanCamilo93 | 2:834c4394fd95 | 41 | } |
JuanCamilo93 | 2:834c4394fd95 | 42 | |
JuanCamilo93 | 0:744135d2e43b | 43 | // ubicar acà el codigo |
JuanCamilo93 | 0:744135d2e43b | 44 | } |
JuanCamilo93 | 0:744135d2e43b | 45 | |
JuanCamilo93 | 2:834c4394fd95 | 46 | //Función encargada de empezar a guardar los comandos dentro de la pila |
JuanCamilo93 | 2:834c4394fd95 | 47 | void guardar() |
JuanCamilo93 | 2:834c4394fd95 | 48 | { |
JuanCamilo93 | 2:834c4394fd95 | 49 | command.printf("Se inicia el comado de guardar.."); |
JuanCamilo93 | 2:834c4394fd95 | 50 | // ubicar acà el codigo |
JuanCamilo93 | 0:744135d2e43b | 51 | |
JuanCamilo93 | 0:744135d2e43b | 52 | } |
JuanCamilo93 | 0:744135d2e43b | 53 | |
JuanCamilo93 | 2:834c4394fd95 | 54 | //Inicio de comunicación serial a 9600 |
JuanCamilo93 | 0:744135d2e43b | 55 | void init_serial() |
JuanCamilo93 | 0:744135d2e43b | 56 | { |
JuanCamilo93 | 2:834c4394fd95 | 57 | command.baud(9600); |
JuanCamilo93 | 0:744135d2e43b | 58 | } |
JuanCamilo93 | 0:744135d2e43b | 59 | |
JuanCamilo93 | 2:834c4394fd95 | 60 | //Variables para determinar los valores iniciales de las posiciones X y Y |
JuanCamilo93 | 2:834c4394fd95 | 61 | //Se establecen en -1 para saber cuando estas están cargadas con los valores reales |
JuanCamilo93 | 2:834c4394fd95 | 62 | int intPosX=-1; |
JuanCamilo93 | 2:834c4394fd95 | 63 | int intPosY=-1; |
JuanCamilo93 | 2:834c4394fd95 | 64 | //Variable para identificar si la función que está siendo llamada es Vertex |
JuanCamilo93 | 2:834c4394fd95 | 65 | bool VertexOn=false; |
JuanCamilo93 | 1:1e86d6321238 | 66 | |
JuanCamilo93 | 2:834c4394fd95 | 67 | //Variable para almacenar una línea de comandos; |
JuanCamilo93 | 2:834c4394fd95 | 68 | char LineaCodigo; |
JuanCamilo93 | 2:834c4394fd95 | 69 | //Variable para determinar si la línea tiene el formato correcto |
JuanCamilo93 | 2:834c4394fd95 | 70 | bool LineaCorrecta=false; |
JuanCamilo93 | 0:744135d2e43b | 71 | |
JuanCamilo93 | 2:834c4394fd95 | 72 | |
JuanCamilo93 | 2:834c4394fd95 | 73 | //Función para recibir los datos enviados desde el terminal |
JuanCamilo93 | 2:834c4394fd95 | 74 | void RecibirDatos() |
JuanCamilo93 | 2:834c4394fd95 | 75 | { |
JuanCamilo93 | 2:834c4394fd95 | 76 | //Se establece en un estado=1 |
JuanCamilo93 | 0:744135d2e43b | 77 | int Estado=1; |
JuanCamilo93 | 0:744135d2e43b | 78 | |
JuanCamilo93 | 2:834c4394fd95 | 79 | //Mientras que el estado sea = 1 la tarjeta va a recibir los datos de la terminal |
JuanCamilo93 | 2:834c4394fd95 | 80 | while(Estado==1) { |
JuanCamilo93 | 0:744135d2e43b | 81 | |
JuanCamilo93 | 0:744135d2e43b | 82 | init_servo(); |
JuanCamilo93 | 0:744135d2e43b | 83 | init_serial(); |
JuanCamilo93 | 0:744135d2e43b | 84 | home(); |
JuanCamilo93 | 2:834c4394fd95 | 85 | |
JuanCamilo93 | 2:834c4394fd95 | 86 | //Variable para almacenar la información en Hexadecimal desde terminal |
JuanCamilo93 | 0:744135d2e43b | 87 | char read_cc; |
JuanCamilo93 | 2:834c4394fd95 | 88 | |
JuanCamilo93 | 2:834c4394fd95 | 89 | //El while=1 garantiza que todo el tiempo la tarjeta está recibiendo información |
JuanCamilo93 | 2:834c4394fd95 | 90 | while(1) { |
JuanCamilo93 | 2:834c4394fd95 | 91 | |
JuanCamilo93 | 2:834c4394fd95 | 92 | //se valida cuantas líneas correctas se han enviado |
JuanCamilo93 | 2:834c4394fd95 | 93 | if(CantLineasCorr<=10) { |
JuanCamilo93 | 2:834c4394fd95 | 94 | |
JuanCamilo93 | 2:834c4394fd95 | 95 | //Se almacena el dato en la variable read_cc |
JuanCamilo93 | 2:834c4394fd95 | 96 | read_cc=command.getc(); |
JuanCamilo93 | 2:834c4394fd95 | 97 | |
JuanCamilo93 | 2:834c4394fd95 | 98 | //Si el parámetro enviado es 0xff se invoca la función ejecutar |
JuanCamilo93 | 2:834c4394fd95 | 99 | if(read_cc==CM_EJECUTAR) { |
JuanCamilo93 | 2:834c4394fd95 | 100 | //Se invoca el comando ejecutar para empezar a dibujar |
JuanCamilo93 | 2:834c4394fd95 | 101 | ejecutar(); |
JuanCamilo93 | 2:834c4394fd95 | 102 | } |
JuanCamilo93 | 2:834c4394fd95 | 103 | |
JuanCamilo93 | 2:834c4394fd95 | 104 | //Si el parámetro enviado es 0xfe se invoca la función guardar |
JuanCamilo93 | 2:834c4394fd95 | 105 | if(read_cc==CM_GUARDAR) { |
JuanCamilo93 | 2:834c4394fd95 | 106 | //Se hace el llamado a la función guardar |
JuanCamilo93 | 2:834c4394fd95 | 107 | guardar(); |
JuanCamilo93 | 2:834c4394fd95 | 108 | } |
JuanCamilo93 | 2:834c4394fd95 | 109 | |
JuanCamilo93 | 2:834c4394fd95 | 110 | //Si el parámetro enviado es 0xfd se invoca la función Vertex2D |
JuanCamilo93 | 2:834c4394fd95 | 111 | if(read_cc==CM_VERTEX2D || VertexOn) { |
JuanCamilo93 | 2:834c4394fd95 | 112 | |
JuanCamilo93 | 2:834c4394fd95 | 113 | //Se establece la variable VertexOn=true para poder recibir los valores en X y Y |
JuanCamilo93 | 2:834c4394fd95 | 114 | VertexOn=true; |
JuanCamilo93 | 2:834c4394fd95 | 115 | |
JuanCamilo93 | 2:834c4394fd95 | 116 | /* |
JuanCamilo93 | 2:834c4394fd95 | 117 | |
JuanCamilo93 | 2:834c4394fd95 | 118 | IMPORTANTE PARA LA EXPLICACIÓN AL PROFESOR: |
JuanCamilo93 | 2:834c4394fd95 | 119 | |
JuanCamilo93 | 2:834c4394fd95 | 120 | La validación del número se hace para evitar que lleguen parámetros no deseados a la función vertex, |
JuanCamilo93 | 2:834c4394fd95 | 121 | con un solo valor que llegue y no sea númerico puede generar fallos en la función Vertex |
JuanCamilo93 | 2:834c4394fd95 | 122 | |
JuanCamilo93 | 2:834c4394fd95 | 123 | Casos de error: |
JuanCamilo93 | 2:834c4394fd95 | 124 | Vertex2d(6,k); |
JuanCamilo93 | 2:834c4394fd95 | 125 | Vertex2d(k,6); |
JuanCamilo93 | 2:834c4394fd95 | 126 | |
JuanCamilo93 | 2:834c4394fd95 | 127 | Caso correcto: |
JuanCamilo93 | 2:834c4394fd95 | 128 | Vertex2d(5,5); |
JuanCamilo93 | 2:834c4394fd95 | 129 | |
JuanCamilo93 | 2:834c4394fd95 | 130 | La razón por la que X y Y están con un if y un elseif es porque si estuvieran en if separados, |
JuanCamilo93 | 2:834c4394fd95 | 131 | se podría almacenar 2 valores en X y Y quedaría =-1 |
JuanCamilo93 | 2:834c4394fd95 | 132 | |
JuanCamilo93 | 2:834c4394fd95 | 133 | */ |
JuanCamilo93 | 2:834c4394fd95 | 134 | |
JuanCamilo93 | 2:834c4394fd95 | 135 | |
JuanCamilo93 | 2:834c4394fd95 | 136 | //Se valida que el valor que está siendo ingresado sea un número |
JuanCamilo93 | 2:834c4394fd95 | 137 | if(read_cc>=0x30 && read_cc<=0x39) { |
JuanCamilo93 | 2:834c4394fd95 | 138 | |
JuanCamilo93 | 2:834c4394fd95 | 139 | //se realiza la resta de -48 al valor enviado para poder obtener el valor decimal exacto |
JuanCamilo93 | 2:834c4394fd95 | 140 | double Coord=(read_cc-48); |
JuanCamilo93 | 2:834c4394fd95 | 141 | |
JuanCamilo93 | 2:834c4394fd95 | 142 | //Se valida si la posición en X ya fue asignada |
JuanCamilo93 | 2:834c4394fd95 | 143 | if(intPosX==-1) { |
JuanCamilo93 | 2:834c4394fd95 | 144 | //Se asigna el valor en la posición X |
JuanCamilo93 | 2:834c4394fd95 | 145 | intPosX=Coord; |
JuanCamilo93 | 2:834c4394fd95 | 146 | //Se valida si la posición en Y ya fue asignada |
JuanCamilo93 | 2:834c4394fd95 | 147 | } else if(intPosY==-1) { |
JuanCamilo93 | 2:834c4394fd95 | 148 | //Se asigna el valor en la posición Y |
JuanCamilo93 | 2:834c4394fd95 | 149 | intPosY=Coord; |
JuanCamilo93 | 2:834c4394fd95 | 150 | //Se establece vertex en false para poder dar continuidad a la siguiente línea de código |
JuanCamilo93 | 2:834c4394fd95 | 151 | VertexOn=false; |
JuanCamilo93 | 2:834c4394fd95 | 152 | |
JuanCamilo93 | 2:834c4394fd95 | 153 | LineaCorrecta=true; |
JuanCamilo93 | 2:834c4394fd95 | 154 | LineaCodigo='FD ' + intPosX + ',' + intPosY; |
JuanCamilo93 | 2:834c4394fd95 | 155 | |
JuanCamilo93 | 2:834c4394fd95 | 156 | } |
JuanCamilo93 | 2:834c4394fd95 | 157 | } else { |
JuanCamilo93 | 2:834c4394fd95 | 158 | //Se establece que la línea enviada no es correcta y se ignora el envío a la pila |
JuanCamilo93 | 2:834c4394fd95 | 159 | LineaCorrecta=true; |
JuanCamilo93 | 2:834c4394fd95 | 160 | //Si el valor enviado no es numérico el paquete debe descartarse |
JuanCamilo93 | 2:834c4394fd95 | 161 | VertexOn=false; |
JuanCamilo93 | 1:1e86d6321238 | 162 | } |
JuanCamilo93 | 2:834c4394fd95 | 163 | |
JuanCamilo93 | 2:834c4394fd95 | 164 | } |
JuanCamilo93 | 2:834c4394fd95 | 165 | |
JuanCamilo93 | 2:834c4394fd95 | 166 | //Si el parámetro enviado es 0xfc se invoca la función DRAW |
JuanCamilo93 | 2:834c4394fd95 | 167 | if(read_cc==CM_DRAW) { |
JuanCamilo93 | 2:834c4394fd95 | 168 | //Invocar la función Draw |
JuanCamilo93 | 2:834c4394fd95 | 169 | //Se establece que la línea está correcta y se almacena el valor en la línea de código |
JuanCamilo93 | 2:834c4394fd95 | 170 | LineaCorrecta=true; |
JuanCamilo93 | 2:834c4394fd95 | 171 | LineaCodigo='DRAW'; |
JuanCamilo93 | 2:834c4394fd95 | 172 | } |
JuanCamilo93 | 2:834c4394fd95 | 173 | |
JuanCamilo93 | 2:834c4394fd95 | 174 | //Si el parámetro enviado es 0xfb se invoca la función No draw |
JuanCamilo93 | 2:834c4394fd95 | 175 | if(read_cc==CM_NODRAW) { |
JuanCamilo93 | 2:834c4394fd95 | 176 | //Invocar el función no draw |
JuanCamilo93 | 2:834c4394fd95 | 177 | //Se establece que la línea está correcta y se almacena el valor en la línea de código |
JuanCamilo93 | 2:834c4394fd95 | 178 | LineaCorrecta=true; |
JuanCamilo93 | 2:834c4394fd95 | 179 | LineaCodigo='NO_DRAW'; |
JuanCamilo93 | 1:1e86d6321238 | 180 | } |
JuanCamilo93 | 2:834c4394fd95 | 181 | |
JuanCamilo93 | 2:834c4394fd95 | 182 | //Si el parámetro enviado es 0xfa se invoca la función STOP |
JuanCamilo93 | 2:834c4394fd95 | 183 | if(read_cc==CM_STOP) { |
JuanCamilo93 | 2:834c4394fd95 | 184 | //Invocar el función STOP |
JuanCamilo93 | 2:834c4394fd95 | 185 | LineaCorrecta=true; |
JuanCamilo93 | 2:834c4394fd95 | 186 | LineaCodigo='NO_DRAW'; |
JuanCamilo93 | 2:834c4394fd95 | 187 | } |
JuanCamilo93 | 2:834c4394fd95 | 188 | |
JuanCamilo93 | 2:834c4394fd95 | 189 | //Si el parámetro enviado es 0xf0 se toma como fin de instrucción |
JuanCamilo93 | 2:834c4394fd95 | 190 | //CUANDO EXPLIQUEN ESTO AL PROFESOR DEFINAN EL F0 COMO AL EQUIVALENTE A UN ; |
JuanCamilo93 | 2:834c4394fd95 | 191 | if(read_cc==CM_END) { |
JuanCamilo93 | 2:834c4394fd95 | 192 | |
JuanCamilo93 | 2:834c4394fd95 | 193 | if( LineaCorrecta) { |
JuanCamilo93 | 2:834c4394fd95 | 194 | |
JuanCamilo93 | 2:834c4394fd95 | 195 | //Se aumenta el valor de las líneas correctas que se han enviado |
JuanCamilo93 | 2:834c4394fd95 | 196 | CantLineasCorr+=1; |
JuanCamilo93 | 2:834c4394fd95 | 197 | //Se envía la línea a la pila |
JuanCamilo93 | 2:834c4394fd95 | 198 | mem_set(LineaCodigo); |
JuanCamilo93 | 2:834c4394fd95 | 199 | } |
JuanCamilo93 | 2:834c4394fd95 | 200 | } |
JuanCamilo93 | 2:834c4394fd95 | 201 | } else { |
JuanCamilo93 | 2:834c4394fd95 | 202 | |
JuanCamilo93 | 2:834c4394fd95 | 203 | command.printf("Se ha alcanzado el máximo de líneas"); |
JuanCamilo93 | 2:834c4394fd95 | 204 | |
JuanCamilo93 | 2:834c4394fd95 | 205 | } |
JuanCamilo93 | 0:744135d2e43b | 206 | } |
JuanCamilo93 | 0:744135d2e43b | 207 | } |
JuanCamilo93 | 0:744135d2e43b | 208 | } |