Giro en su propio eje Presentado por: Julio Fajardo, Cesar Pacheco, Angel Trujillo, Daniel Vizcaya

Dependencies:   mbed

Fork of 01_Embebidos by Daniel Vizcaya

Committer:
Bethory
Date:
Wed Apr 25 02:12:19 2018 +0000
Revision:
6:87a37f4163bd
Parent:
5:8e100835b017
Ejercicio 2do corte

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Bethory 3:3665eb7346e2 1 #include "mbed.h"
Bethory 3:3665eb7346e2 2 #include "draw.h"
Bethory 6:87a37f4163bd 3 #include "stepmotor.h"
Bethory 6:87a37f4163bd 4
Bethory 3:3665eb7346e2 5 #define CM_EJECUTAR 0xFF
Bethory 3:3665eb7346e2 6 #define CM_GUARDAR 0xFE
Bethory 6:87a37f4163bd 7 #define CM_TRASLADAR 0xF9
Bethory 3:3665eb7346e2 8 #define CM_VERTEX2D 0xFD
Bethory 3:3665eb7346e2 9 #define CM_DRAW 0XFC
Bethory 3:3665eb7346e2 10 #define CM_NODRAW 0xFB
Bethory 3:3665eb7346e2 11 #define CM_STOP 0xFA
Bethory 4:8a884a5dd8c8 12 #define CM_ENTER 0xF0
Bethory 6:87a37f4163bd 13 #define CM_GIRO 0xF8
Bethory 3:3665eb7346e2 14
Bethory 6:87a37f4163bd 15 #define MEM_SIZE 100
Bethory 3:3665eb7346e2 16 #define MEM_TYPE uint32_t //significa que de ahora en más donde diga MEM_TYPE será tipo uint32_t
Bethory 6:87a37f4163bd 17 #define PASOSxCUADRANTE 250 //4096
Bethory 3:3665eb7346e2 18 uint8_t mem_head = 0;
Bethory 3:3665eb7346e2 19 uint8_t mem_tail = 0;
Bethory 6:87a37f4163bd 20 char temp;
Bethory 3:3665eb7346e2 21 bool full = 0;
Bethory 3:3665eb7346e2 22
Bethory 3:3665eb7346e2 23 MEM_TYPE buffer[MEM_SIZE];
Bethory 6:87a37f4163bd 24 stepmotor smotor1(D9,D10,D11,D12);
Bethory 6:87a37f4163bd 25 stepmotor smotor2(D2,D6,D7,D8);
Bethory 3:3665eb7346e2 26 Serial command(USBTX, USBRX);
Bethory 3:3665eb7346e2 27
Bethory 6:87a37f4163bd 28 void girar(uint8_t sentido)
Bethory 6:87a37f4163bd 29 {
Bethory 6:87a37f4163bd 30 command.printf(">>>> %d \n",sentido);
Bethory 6:87a37f4163bd 31 uint32_t speed = 1500;
Bethory 6:87a37f4163bd 32 smotor1.set_speed(speed);
Bethory 6:87a37f4163bd 33 smotor2.set_speed(speed);
Bethory 6:87a37f4163bd 34 if(sentido==1)
Bethory 6:87a37f4163bd 35 {
Bethory 6:87a37f4163bd 36 command.printf("pa la derecha!!\n");
Bethory 6:87a37f4163bd 37 smotor1.step(7* PASOSxCUADRANTE, 0);
Bethory 6:87a37f4163bd 38 smotor2.step(7 * PASOSxCUADRANTE, 1);
Bethory 6:87a37f4163bd 39
Bethory 6:87a37f4163bd 40 }else
Bethory 6:87a37f4163bd 41 {
Bethory 6:87a37f4163bd 42 command.printf("pa la izquierda!\n");
Bethory 6:87a37f4163bd 43 smotor1.step(7 * PASOSxCUADRANTE, 1);
Bethory 6:87a37f4163bd 44 smotor2.step(7 * PASOSxCUADRANTE, 0);
Bethory 6:87a37f4163bd 45 }
Bethory 6:87a37f4163bd 46 wait(2);
Bethory 3:3665eb7346e2 47 }
Bethory 3:3665eb7346e2 48
Bethory 6:87a37f4163bd 49 void mem_free()
Bethory 6:87a37f4163bd 50 { //Estaba como uint32_t no como void
Bethory 6:87a37f4163bd 51 mem_head = 0;
Bethory 6:87a37f4163bd 52 full = 0;
Bethory 6:87a37f4163bd 53 }
Bethory 6:87a37f4163bd 54
Bethory 6:87a37f4163bd 55 bool mem_put(MEM_TYPE data)
Bethory 6:87a37f4163bd 56 { //Escribir
Bethory 3:3665eb7346e2 57 if (full)
Bethory 3:3665eb7346e2 58 return 1;
Bethory 3:3665eb7346e2 59 buffer[mem_head] = data; //carga en dato en el buffer
Bethory 3:3665eb7346e2 60 mem_head += 1;
Bethory 3:3665eb7346e2 61 if (mem_head == MEM_SIZE)
Bethory 6:87a37f4163bd 62 full = 1;
Bethory 3:3665eb7346e2 63 return 0;
Bethory 3:3665eb7346e2 64 }
Bethory 3:3665eb7346e2 65
Bethory 6:87a37f4163bd 66 bool mem_get(MEM_TYPE *data)
Bethory 6:87a37f4163bd 67 { //Leer
Bethory 3:3665eb7346e2 68 if (mem_head == 0)
Bethory 6:87a37f4163bd 69 return 1;
Bethory 3:3665eb7346e2 70 if (mem_head == mem_tail)
Bethory 6:87a37f4163bd 71 return 1;
Bethory 3:3665eb7346e2 72 *data = buffer[mem_tail];
Bethory 3:3665eb7346e2 73 mem_tail += 1;
Bethory 3:3665eb7346e2 74 return 0;
Bethory 3:3665eb7346e2 75 }
Bethory 3:3665eb7346e2 76
Bethory 6:87a37f4163bd 77 void ejecutar()
Bethory 6:87a37f4163bd 78 {
Bethory 6:87a37f4163bd 79 command.printf("inicio de ejecutar...\n");
Bethory 6:87a37f4163bd 80 for (int j = 0; j <= mem_head - 1; j++)
Bethory 6:87a37f4163bd 81 {
Bethory 6:87a37f4163bd 82 command.printf("%x\n", buffer[j]);
Bethory 6:87a37f4163bd 83 if (buffer[j] == CM_NODRAW)
Bethory 6:87a37f4163bd 84 {
Bethory 6:87a37f4163bd 85 nodraw();
Bethory 6:87a37f4163bd 86 }
Bethory 6:87a37f4163bd 87 if (buffer[j] == CM_DRAW)
Bethory 6:87a37f4163bd 88 {
Bethory 6:87a37f4163bd 89 draw();
Bethory 6:87a37f4163bd 90 }
Bethory 6:87a37f4163bd 91 if (buffer[j] == CM_STOP)
Bethory 6:87a37f4163bd 92 {
Bethory 6:87a37f4163bd 93 mem_free();
Bethory 6:87a37f4163bd 94 return;
Bethory 6:87a37f4163bd 95 }
Bethory 6:87a37f4163bd 96 temp = buffer[j] >> 24 & 0xFF;
Bethory 6:87a37f4163bd 97 if (temp == CM_VERTEX2D)
Bethory 6:87a37f4163bd 98 {
Bethory 6:87a37f4163bd 99 uint8_t datoX = buffer[j] >> 16 & 0xFF;
Bethory 6:87a37f4163bd 100 uint8_t datoY = buffer[j] >> 8 & 0xFF;
Bethory 6:87a37f4163bd 101 vertex2d(datoX, datoY);
Bethory 6:87a37f4163bd 102 //wait(1);
Bethory 6:87a37f4163bd 103 }
Bethory 6:87a37f4163bd 104 if (temp == CM_TRASLADAR) //no mover si draw se encuentra activo
Bethory 6:87a37f4163bd 105 {
Bethory 6:87a37f4163bd 106 uint32_t speed = 1500;
Bethory 6:87a37f4163bd 107 smotor1.set_speed(speed);
Bethory 6:87a37f4163bd 108 smotor2.set_speed(speed);
Bethory 6:87a37f4163bd 109 uint32_t cuadrantes = buffer[j] >> 16 & 0xFF;
Bethory 6:87a37f4163bd 110 bool direccion = buffer[j] >> 8 & 0xFF;
Bethory 6:87a37f4163bd 111 smotor1.step(cuadrantes * PASOSxCUADRANTE, direccion);
Bethory 6:87a37f4163bd 112 smotor2.step(cuadrantes * PASOSxCUADRANTE, direccion);
Bethory 6:87a37f4163bd 113 wait(2);
Bethory 6:87a37f4163bd 114 }
Bethory 5:8e100835b017 115 }
Bethory 6:87a37f4163bd 116 command.printf("fin de ejecutar...\n");
Bethory 6:87a37f4163bd 117 mem_free();
Bethory 3:3665eb7346e2 118 }
Bethory 3:3665eb7346e2 119
Bethory 6:87a37f4163bd 120 void guardar()
Bethory 6:87a37f4163bd 121 {
Bethory 6:87a37f4163bd 122 command.printf("inicio de guardar...\n");
Bethory 5:8e100835b017 123 MEM_TYPE val; //significa que la variable "val" es del tipo uint32_t
Bethory 6:87a37f4163bd 124 char dato1, dato2;
Bethory 6:87a37f4163bd 125 do
Bethory 6:87a37f4163bd 126 {
Bethory 6:87a37f4163bd 127 dato1 = command.getc();
Bethory 6:87a37f4163bd 128 if (dato1 == CM_STOP)
Bethory 6:87a37f4163bd 129 {
Bethory 6:87a37f4163bd 130 dato2 = command.getc();
Bethory 6:87a37f4163bd 131 if (dato2 == CM_ENTER)
Bethory 6:87a37f4163bd 132 {
Bethory 6:87a37f4163bd 133 val = dato1;
Bethory 5:8e100835b017 134 mem_put(val);
Bethory 5:8e100835b017 135 return;
Bethory 5:8e100835b017 136 }
Bethory 4:8a884a5dd8c8 137 }
Bethory 6:87a37f4163bd 138 if (dato1 == CM_NODRAW | dato1 == CM_DRAW)
Bethory 6:87a37f4163bd 139 {
Bethory 6:87a37f4163bd 140 dato2 = command.getc();
Bethory 6:87a37f4163bd 141 if (dato2 == CM_ENTER)
Bethory 6:87a37f4163bd 142 {
Bethory 6:87a37f4163bd 143 val = dato1;
Bethory 5:8e100835b017 144 mem_put(val);
Bethory 5:8e100835b017 145 }
Bethory 4:8a884a5dd8c8 146 }
Bethory 6:87a37f4163bd 147 if (dato1 == CM_VERTEX2D)
Bethory 6:87a37f4163bd 148 {
Bethory 6:87a37f4163bd 149 dato2 = command.getc();
Bethory 6:87a37f4163bd 150 if (dato2 <= 0x32)
Bethory 6:87a37f4163bd 151 {
Bethory 6:87a37f4163bd 152 val = CM_VERTEX2D;
Bethory 6:87a37f4163bd 153 val = val << 8;
Bethory 6:87a37f4163bd 154 val = val | dato2;
Bethory 6:87a37f4163bd 155 dato2 = command.getc();
Bethory 6:87a37f4163bd 156 if (dato2 <= 0x32)
Bethory 6:87a37f4163bd 157 {
Bethory 6:87a37f4163bd 158 val = val << 8;
Bethory 6:87a37f4163bd 159 val = val | dato2;
Bethory 6:87a37f4163bd 160 dato2 = command.getc();
Bethory 6:87a37f4163bd 161 if (dato2 == CM_ENTER)
Bethory 6:87a37f4163bd 162 {
Bethory 6:87a37f4163bd 163 val = val << 8;
Bethory 6:87a37f4163bd 164 val = val | CM_ENTER;
Bethory 6:87a37f4163bd 165 mem_put(val);
Bethory 6:87a37f4163bd 166 }
Bethory 6:87a37f4163bd 167 }
Bethory 6:87a37f4163bd 168 }
Bethory 6:87a37f4163bd 169 }
Bethory 6:87a37f4163bd 170 if (dato1 == CM_TRASLADAR)
Bethory 6:87a37f4163bd 171 {
Bethory 6:87a37f4163bd 172 dato2 = command.getc();
Bethory 6:87a37f4163bd 173 if (dato2 <= 0xEF)
Bethory 6:87a37f4163bd 174 {
Bethory 6:87a37f4163bd 175 val = CM_TRASLADAR;
Bethory 6:87a37f4163bd 176 val = val << 8;
Bethory 6:87a37f4163bd 177 val = val | dato2;
Bethory 6:87a37f4163bd 178 dato2 = command.getc();
Bethory 6:87a37f4163bd 179 if (dato2 <= 1)
Bethory 6:87a37f4163bd 180 {
Bethory 6:87a37f4163bd 181 val = val << 8;
Bethory 6:87a37f4163bd 182 val = val | dato2;
Bethory 6:87a37f4163bd 183 dato2 = command.getc();
Bethory 6:87a37f4163bd 184 if (dato2 == CM_ENTER)
Bethory 6:87a37f4163bd 185 {
Bethory 6:87a37f4163bd 186 val = val << 8;
Bethory 6:87a37f4163bd 187 val = val | CM_ENTER;
Bethory 5:8e100835b017 188 mem_put(val);
Bethory 5:8e100835b017 189 }
Bethory 6:87a37f4163bd 190 }
Bethory 6:87a37f4163bd 191 }
Bethory 5:8e100835b017 192 }
Bethory 6:87a37f4163bd 193 } while (!full);
Bethory 6:87a37f4163bd 194 command.printf("fin de guardar...\n");
Bethory 4:8a884a5dd8c8 195 }
Bethory 4:8a884a5dd8c8 196
Bethory 6:87a37f4163bd 197 int main()
Bethory 6:87a37f4163bd 198 {
Bethory 4:8a884a5dd8c8 199 command.baud(9600);
Bethory 6:87a37f4163bd 200 init_servo();
Bethory 6:87a37f4163bd 201 //home(); //llama a no_draw y va a 0,0
Bethory 6:87a37f4163bd 202
Bethory 4:8a884a5dd8c8 203 char read_cc;
Bethory 6:87a37f4163bd 204 while (1)
Bethory 6:87a37f4163bd 205 {
Bethory 6:87a37f4163bd 206 read_cc = command.getc();
Bethory 6:87a37f4163bd 207 switch (read_cc)
Bethory 6:87a37f4163bd 208 {
Bethory 6:87a37f4163bd 209 case CM_GUARDAR:
Bethory 6:87a37f4163bd 210 if (read_cc = command.getc() == CM_ENTER)
Bethory 6:87a37f4163bd 211 {
Bethory 6:87a37f4163bd 212 guardar();
Bethory 6:87a37f4163bd 213 }
Bethory 6:87a37f4163bd 214 break; //FE
Bethory 6:87a37f4163bd 215 case CM_EJECUTAR:
Bethory 6:87a37f4163bd 216 if (read_cc = command.getc() == CM_ENTER)
Bethory 6:87a37f4163bd 217 {
Bethory 6:87a37f4163bd 218 ejecutar();
Bethory 6:87a37f4163bd 219 }
Bethory 6:87a37f4163bd 220 break; //FF
Bethory 6:87a37f4163bd 221 case CM_GIRO:
Bethory 6:87a37f4163bd 222 uint8_t sentido = command.getc();
Bethory 6:87a37f4163bd 223 if (sentido <= 1)
Bethory 6:87a37f4163bd 224 {
Bethory 6:87a37f4163bd 225 read_cc = command.getc();
Bethory 6:87a37f4163bd 226 if (read_cc = command.getc() == CM_ENTER)
Bethory 6:87a37f4163bd 227 {
Bethory 6:87a37f4163bd 228 girar(sentido);
Bethory 6:87a37f4163bd 229 }
Bethory 6:87a37f4163bd 230 }
Bethory 6:87a37f4163bd 231 break; //F8
Bethory 6:87a37f4163bd 232 default:
Bethory 6:87a37f4163bd 233 command.printf("Paila \n");
Bethory 6:87a37f4163bd 234 break;
Bethory 4:8a884a5dd8c8 235 }
Bethory 6:87a37f4163bd 236 }
Bethory 4:8a884a5dd8c8 237 }
Bethory 4:8a884a5dd8c8 238 /*
Bethory 6:87a37f4163bd 239 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
Bethory 6:87a37f4163bd 240 FE F0 F9 02 00 F0 F9 02 01 F0 F9 01 01 F0 F9 01 00 F0 FA F0 FF F0
Bethory 6:87a37f4163bd 241 https://os.mbed.com/users/fabeltranm/
Bethory 3:3665eb7346e2 242 */