Acercamiento a lo que pide el profe
Fork of 01-01EjercicioFuncionXY by
01_main.cpp
00001 #include "mbed.h" 00002 #include "draw.h" 00003 #include "stepmotor.h" 00004 00005 #define CM_EJECUTAR 0xFF 00006 #define CM_GUARDAR 0xFE 00007 #define CM_TRASLADAR 0xF9 00008 #define CM_VERTEX2D 0xFD 00009 #define CM_DRAW 0XFC 00010 #define CM_NODRAW 0xFB 00011 #define CM_STOP 0xFA 00012 #define CM_ENTER 0xF0 00013 #define CM_GIRO 0xF8 00014 00015 #define MEM_SIZE 100 00016 #define MEM_TYPE uint32_t //significa que de ahora en más donde diga MEM_TYPE será tipo uint32_t 00017 #define PASOSxCUADRANTE 250 //4096 00018 uint8_t mem_head = 0; 00019 uint8_t mem_tail = 0; 00020 char temp; 00021 bool full = 0; 00022 00023 MEM_TYPE buffer[MEM_SIZE]; 00024 stepmotor smotor1(D9,D10,D11,D12); 00025 stepmotor smotor2(D2,D6,D7,D8); 00026 Serial command(USBTX, USBRX); 00027 00028 void girar(uint8_t sentido) 00029 { 00030 command.printf(">>>> %d \n",sentido); 00031 uint32_t speed = 1500; 00032 smotor1.set_speed(speed); 00033 smotor2.set_speed(speed); 00034 if(sentido==1) 00035 { 00036 command.printf("pa la derecha!!\n"); 00037 smotor1.step(7* PASOSxCUADRANTE, 0); 00038 smotor2.step(7 * PASOSxCUADRANTE, 1); 00039 00040 }else 00041 { 00042 command.printf("pa la izquierda!\n"); 00043 smotor1.step(7 * PASOSxCUADRANTE, 1); 00044 smotor2.step(7 * PASOSxCUADRANTE, 0); 00045 } 00046 wait(2); 00047 } 00048 00049 void mem_free() 00050 { //Estaba como uint32_t no como void 00051 mem_head = 0; 00052 full = 0; 00053 } 00054 00055 bool mem_put(MEM_TYPE data) 00056 { //Escribir 00057 if (full) 00058 return 1; 00059 buffer[mem_head] = data; //carga en dato en el buffer 00060 mem_head += 1; 00061 if (mem_head == MEM_SIZE) 00062 full = 1; 00063 return 0; 00064 } 00065 00066 bool mem_get(MEM_TYPE *data) 00067 { //Leer 00068 if (mem_head == 0) 00069 return 1; 00070 if (mem_head == mem_tail) 00071 return 1; 00072 *data = buffer[mem_tail]; 00073 mem_tail += 1; 00074 return 0; 00075 } 00076 00077 void ejecutar() 00078 { 00079 command.printf("inicio de ejecutar...\n"); 00080 for (int j = 0; j <= mem_head - 1; j++) 00081 { 00082 command.printf("%x\n", buffer[j]); 00083 if (buffer[j] == CM_NODRAW) 00084 { 00085 nodraw(); 00086 } 00087 if (buffer[j] == CM_DRAW) 00088 { 00089 draw(); 00090 } 00091 if (buffer[j] == CM_STOP) 00092 { 00093 mem_free(); 00094 return; 00095 } 00096 temp = buffer[j] >> 24 & 0xFF; 00097 if (temp == CM_VERTEX2D) 00098 { 00099 uint8_t datoX = buffer[j] >> 16 & 0xFF; 00100 uint8_t datoY = buffer[j] >> 8 & 0xFF; 00101 vertex2d(datoX, datoY); 00102 //wait(1); 00103 } 00104 if (temp == CM_TRASLADAR) //no mover si draw se encuentra activo 00105 { 00106 uint32_t speed = 1500; 00107 smotor1.set_speed(speed); 00108 smotor2.set_speed(speed); 00109 uint32_t cuadrantes = buffer[j] >> 16 & 0xFF; 00110 bool direccion = buffer[j] >> 8 & 0xFF; 00111 smotor1.step(cuadrantes * PASOSxCUADRANTE, direccion); 00112 smotor2.step(cuadrantes * PASOSxCUADRANTE, direccion); 00113 wait(2); 00114 } 00115 } 00116 command.printf("fin de ejecutar...\n"); 00117 mem_free(); 00118 } 00119 00120 void guardar() 00121 { 00122 command.printf("inicio de guardar...\n"); 00123 MEM_TYPE val; //significa que la variable "val" es del tipo uint32_t 00124 char dato1, dato2; 00125 do 00126 { 00127 dato1 = command.getc(); 00128 if (dato1 == CM_STOP) 00129 { 00130 dato2 = command.getc(); 00131 if (dato2 == CM_ENTER) 00132 { 00133 val = dato1; 00134 mem_put(val); 00135 return; 00136 } 00137 } 00138 if (dato1 == CM_NODRAW | dato1 == CM_DRAW) 00139 { 00140 dato2 = command.getc(); 00141 if (dato2 == CM_ENTER) 00142 { 00143 val = dato1; 00144 mem_put(val); 00145 } 00146 } 00147 if (dato1 == CM_VERTEX2D) 00148 { 00149 dato2 = command.getc(); 00150 if (dato2 <= 0x32) 00151 { 00152 val = CM_VERTEX2D; 00153 val = val << 8; 00154 val = val | dato2; 00155 dato2 = command.getc(); 00156 if (dato2 <= 0x32) 00157 { 00158 val = val << 8; 00159 val = val | dato2; 00160 dato2 = command.getc(); 00161 if (dato2 == CM_ENTER) 00162 { 00163 val = val << 8; 00164 val = val | CM_ENTER; 00165 mem_put(val); 00166 } 00167 } 00168 } 00169 } 00170 if (dato1 == CM_TRASLADAR) 00171 { 00172 dato2 = command.getc(); 00173 if (dato2 <= 0xEF) 00174 { 00175 val = CM_TRASLADAR; 00176 val = val << 8; 00177 val = val | dato2; 00178 dato2 = command.getc(); 00179 if (dato2 <= 1) 00180 { 00181 val = val << 8; 00182 val = val | dato2; 00183 dato2 = command.getc(); 00184 if (dato2 == CM_ENTER) 00185 { 00186 val = val << 8; 00187 val = val | CM_ENTER; 00188 mem_put(val); 00189 } 00190 } 00191 } 00192 } 00193 } while (!full); 00194 command.printf("fin de guardar...\n"); 00195 } 00196 00197 int main() 00198 { 00199 command.baud(9600); 00200 init_servo(); 00201 //home(); //llama a no_draw y va a 0,0 00202 00203 char read_cc; 00204 while (1) 00205 { 00206 read_cc = command.getc(); 00207 switch (read_cc) 00208 { 00209 case CM_GUARDAR: 00210 if (read_cc = command.getc() == CM_ENTER) 00211 { 00212 guardar(); 00213 } 00214 break; //FE 00215 case CM_EJECUTAR: 00216 if (read_cc = command.getc() == CM_ENTER) 00217 { 00218 ejecutar(); 00219 } 00220 break; //FF 00221 case CM_GIRO: 00222 uint8_t sentido = command.getc(); 00223 if (sentido <= 1) 00224 { 00225 read_cc = command.getc(); 00226 if (read_cc = command.getc() == CM_ENTER) 00227 { 00228 girar(sentido); 00229 } 00230 } 00231 break; //F8 00232 default: 00233 command.printf("Paila \n"); 00234 break; 00235 } 00236 } 00237 } 00238 /* 00239 FE F0 FD 12 34 F0 FB F0 FD 0A 0A F0 FD 28 0A F0 FD 28 28 F0 FD 0A 28 F0 F9 27 00 F0 FC F0 FA F0 FF F0 00240 FE F0 F9 02 00 F0 F9 02 01 F0 F9 01 01 F0 F9 01 00 F0 FA F0 FF F0 00241 https://os.mbed.com/users/fabeltranm/ 00242 */
Generated on Thu Jul 28 2022 08:17:11 by
1.7.2
