Funciones: Ejecutar Guadar Vertex2D Draw No-draw Stop End

Dependencies:   mbed

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?

UserRevisionLine numberNew 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 }