Nicolás Camilo Guerrero Otálora
/
picolo_3_dibuja_cuadrantes
Piccolo terminado
main.cpp@0:881df5e1200a, 2018-05-30 (annotated)
- Committer:
- nicolas_guerrero
- Date:
- Wed May 30 15:55:00 2018 +0000
- Revision:
- 0:881df5e1200a
Tercer Corte
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
nicolas_guerrero | 0:881df5e1200a | 1 | #include "mbed.h" |
nicolas_guerrero | 0:881df5e1200a | 2 | #include "stepmotor.h" |
nicolas_guerrero | 0:881df5e1200a | 3 | |
nicolas_guerrero | 0:881df5e1200a | 4 | #define MEM_SIZE 5000 |
nicolas_guerrero | 0:881df5e1200a | 5 | #define MEM_TYPE uint32_t |
nicolas_guerrero | 0:881df5e1200a | 6 | #define MAXPOS 50 // en milimetros |
nicolas_guerrero | 0:881df5e1200a | 7 | #define SS_TIME 100 // en microsegundos |
nicolas_guerrero | 0:881df5e1200a | 8 | #define POSDRAW 0 |
nicolas_guerrero | 0:881df5e1200a | 9 | #define periodo 20 |
nicolas_guerrero | 0:881df5e1200a | 10 | #define CM_EJECUTAR 0xff |
nicolas_guerrero | 0:881df5e1200a | 11 | #define CM_GUARDAR 0xfe |
nicolas_guerrero | 0:881df5e1200a | 12 | #define CM_VERTEX2D 0xfd |
nicolas_guerrero | 0:881df5e1200a | 13 | #define CM_DRAW 0xfc |
nicolas_guerrero | 0:881df5e1200a | 14 | #define CM_NODRAW 0xfb |
nicolas_guerrero | 0:881df5e1200a | 15 | #define CM_STOP 0xfa |
nicolas_guerrero | 0:881df5e1200a | 16 | #define CM_END 0xf0 |
nicolas_guerrero | 0:881df5e1200a | 17 | #define CM_SMOTOR 0xf9 |
nicolas_guerrero | 0:881df5e1200a | 18 | #define CM_DRAWMATRIX 0xf8 |
nicolas_guerrero | 0:881df5e1200a | 19 | |
nicolas_guerrero | 0:881df5e1200a | 20 | |
nicolas_guerrero | 0:881df5e1200a | 21 | MEM_TYPE arreglo2[MEM_SIZE]; |
nicolas_guerrero | 0:881df5e1200a | 22 | Serial BT(D1,D0);//(USBTX, USBRX); |
nicolas_guerrero | 0:881df5e1200a | 23 | PwmOut motor_x(PB_4), motor_y(PB_5), motor_z(PB_3); |
nicolas_guerrero | 0:881df5e1200a | 24 | stepmotor smotor1(D9,D10,D11,D12); |
nicolas_guerrero | 0:881df5e1200a | 25 | stepmotor smotor2 (A0,A1,A2,A3); |
nicolas_guerrero | 0:881df5e1200a | 26 | int mem_head = 0,i=0,z=0; |
nicolas_guerrero | 0:881df5e1200a | 27 | int mem_tail = 0; |
nicolas_guerrero | 0:881df5e1200a | 28 | uint8_t full = 0; |
nicolas_guerrero | 0:881df5e1200a | 29 | char b,verificar=0; |
nicolas_guerrero | 0:881df5e1200a | 30 | uint32_t speed=600,h; |
nicolas_guerrero | 0:881df5e1200a | 31 | MEM_TYPE comando,px,py,condicionf; |
nicolas_guerrero | 0:881df5e1200a | 32 | |
nicolas_guerrero | 0:881df5e1200a | 33 | |
nicolas_guerrero | 0:881df5e1200a | 34 | int coord2us(float coord) |
nicolas_guerrero | 0:881df5e1200a | 35 | { |
nicolas_guerrero | 0:881df5e1200a | 36 | if(0 <= coord <= MAXPOS) |
nicolas_guerrero | 0:881df5e1200a | 37 | return int(800+coord*1500/50);// u6 |
nicolas_guerrero | 0:881df5e1200a | 38 | return 800; |
nicolas_guerrero | 0:881df5e1200a | 39 | |
nicolas_guerrero | 0:881df5e1200a | 40 | } |
nicolas_guerrero | 0:881df5e1200a | 41 | |
nicolas_guerrero | 0:881df5e1200a | 42 | void draw() |
nicolas_guerrero | 0:881df5e1200a | 43 | { |
nicolas_guerrero | 0:881df5e1200a | 44 | z=coord2us(MAXPOS); |
nicolas_guerrero | 0:881df5e1200a | 45 | motor_z.pulsewidth_us(z); |
nicolas_guerrero | 0:881df5e1200a | 46 | wait(1); |
nicolas_guerrero | 0:881df5e1200a | 47 | } |
nicolas_guerrero | 0:881df5e1200a | 48 | |
nicolas_guerrero | 0:881df5e1200a | 49 | void nodraw() |
nicolas_guerrero | 0:881df5e1200a | 50 | { |
nicolas_guerrero | 0:881df5e1200a | 51 | z=coord2us(POSDRAW); |
nicolas_guerrero | 0:881df5e1200a | 52 | motor_z.pulsewidth_us(z); |
nicolas_guerrero | 0:881df5e1200a | 53 | wait(1); |
nicolas_guerrero | 0:881df5e1200a | 54 | } |
nicolas_guerrero | 0:881df5e1200a | 55 | |
nicolas_guerrero | 0:881df5e1200a | 56 | void vertex2d(float x, float y){ |
nicolas_guerrero | 0:881df5e1200a | 57 | |
nicolas_guerrero | 0:881df5e1200a | 58 | int pulseX = coord2us(x); |
nicolas_guerrero | 0:881df5e1200a | 59 | int pulseY = coord2us(y); |
nicolas_guerrero | 0:881df5e1200a | 60 | |
nicolas_guerrero | 0:881df5e1200a | 61 | motor_x.pulsewidth_us(pulseX); |
nicolas_guerrero | 0:881df5e1200a | 62 | motor_y.pulsewidth_us(pulseY); |
nicolas_guerrero | 0:881df5e1200a | 63 | wait_ms(SS_TIME); |
nicolas_guerrero | 0:881df5e1200a | 64 | wait(1); |
nicolas_guerrero | 0:881df5e1200a | 65 | |
nicolas_guerrero | 0:881df5e1200a | 66 | } |
nicolas_guerrero | 0:881df5e1200a | 67 | void intercambiar_motores (uint32_t cuad1,bool cw1) |
nicolas_guerrero | 0:881df5e1200a | 68 | { |
nicolas_guerrero | 0:881df5e1200a | 69 | uint32_t count=0; |
nicolas_guerrero | 0:881df5e1200a | 70 | smotor1.set_speed(speed); |
nicolas_guerrero | 0:881df5e1200a | 71 | smotor2.set_speed(speed); |
nicolas_guerrero | 0:881df5e1200a | 72 | for(count=0;count<=cuad1*4096;count++) |
nicolas_guerrero | 0:881df5e1200a | 73 | { |
nicolas_guerrero | 0:881df5e1200a | 74 | smotor1.matriz(cw1); |
nicolas_guerrero | 0:881df5e1200a | 75 | smotor2.matriz(cw1); |
nicolas_guerrero | 0:881df5e1200a | 76 | |
nicolas_guerrero | 0:881df5e1200a | 77 | } |
nicolas_guerrero | 0:881df5e1200a | 78 | } |
nicolas_guerrero | 0:881df5e1200a | 79 | /////////////////////////////////////////////////////// |
nicolas_guerrero | 0:881df5e1200a | 80 | void pause_play(); |
nicolas_guerrero | 0:881df5e1200a | 81 | void ejecutar() |
nicolas_guerrero | 0:881df5e1200a | 82 | { |
nicolas_guerrero | 0:881df5e1200a | 83 | BT.attach(&pause_play, Serial::RxIrq); |
nicolas_guerrero | 0:881df5e1200a | 84 | MEM_TYPE bandera=0; |
nicolas_guerrero | 0:881df5e1200a | 85 | if (mem_head==0) {BT.printf("no hay datos para ejecutar\r\n");} |
nicolas_guerrero | 0:881df5e1200a | 86 | else |
nicolas_guerrero | 0:881df5e1200a | 87 | { |
nicolas_guerrero | 0:881df5e1200a | 88 | BT.printf("se esta ejecutando el dibujo...\r\n"); |
nicolas_guerrero | 0:881df5e1200a | 89 | for(i=0;i<mem_head-1;i++) |
nicolas_guerrero | 0:881df5e1200a | 90 | { |
nicolas_guerrero | 0:881df5e1200a | 91 | bandera=arreglo2[i]; |
nicolas_guerrero | 0:881df5e1200a | 92 | switch (bandera) |
nicolas_guerrero | 0:881df5e1200a | 93 | { |
nicolas_guerrero | 0:881df5e1200a | 94 | case CM_DRAW: draw();break; |
nicolas_guerrero | 0:881df5e1200a | 95 | case CM_NODRAW: nodraw(); break; |
nicolas_guerrero | 0:881df5e1200a | 96 | default: |
nicolas_guerrero | 0:881df5e1200a | 97 | verificar = (uint8_t)(bandera>>16); |
nicolas_guerrero | 0:881df5e1200a | 98 | int x = (uint8_t)(bandera>>8); |
nicolas_guerrero | 0:881df5e1200a | 99 | int y = (uint8_t)(bandera); |
nicolas_guerrero | 0:881df5e1200a | 100 | if (verificar==CM_SMOTOR){intercambiar_motores((uint32_t)x,(bool)y);} |
nicolas_guerrero | 0:881df5e1200a | 101 | if (verificar==CM_VERTEX2D){vertex2d(x,y);} |
nicolas_guerrero | 0:881df5e1200a | 102 | break; |
nicolas_guerrero | 0:881df5e1200a | 103 | } |
nicolas_guerrero | 0:881df5e1200a | 104 | } |
nicolas_guerrero | 0:881df5e1200a | 105 | BT.printf("termino el dibujo\r\n"); |
nicolas_guerrero | 0:881df5e1200a | 106 | } |
nicolas_guerrero | 0:881df5e1200a | 107 | } |
nicolas_guerrero | 0:881df5e1200a | 108 | void pause_play() |
nicolas_guerrero | 0:881df5e1200a | 109 | { |
nicolas_guerrero | 0:881df5e1200a | 110 | h=BT.getc(); |
nicolas_guerrero | 0:881df5e1200a | 111 | if (h == 0xf1) |
nicolas_guerrero | 0:881df5e1200a | 112 | { |
nicolas_guerrero | 0:881df5e1200a | 113 | while (h == 0xf1 or h!=0xf2) |
nicolas_guerrero | 0:881df5e1200a | 114 | { |
nicolas_guerrero | 0:881df5e1200a | 115 | h=BT.getc(); |
nicolas_guerrero | 0:881df5e1200a | 116 | wait_us(100); |
nicolas_guerrero | 0:881df5e1200a | 117 | } |
nicolas_guerrero | 0:881df5e1200a | 118 | |
nicolas_guerrero | 0:881df5e1200a | 119 | } |
nicolas_guerrero | 0:881df5e1200a | 120 | } |
nicolas_guerrero | 0:881df5e1200a | 121 | |
nicolas_guerrero | 0:881df5e1200a | 122 | uint32_t read_command() |
nicolas_guerrero | 0:881df5e1200a | 123 | { |
nicolas_guerrero | 0:881df5e1200a | 124 | |
nicolas_guerrero | 0:881df5e1200a | 125 | uint32_t val=0; |
nicolas_guerrero | 0:881df5e1200a | 126 | uint8_t cnt=0; |
nicolas_guerrero | 0:881df5e1200a | 127 | |
nicolas_guerrero | 0:881df5e1200a | 128 | char endc=BT.getc(); |
nicolas_guerrero | 0:881df5e1200a | 129 | |
nicolas_guerrero | 0:881df5e1200a | 130 | while(endc != CM_END && cnt <4) { |
nicolas_guerrero | 0:881df5e1200a | 131 | if(endc!=CM_END) |
nicolas_guerrero | 0:881df5e1200a | 132 | val=((val<<8) +endc); |
nicolas_guerrero | 0:881df5e1200a | 133 | endc=BT.getc(); |
nicolas_guerrero | 0:881df5e1200a | 134 | cnt++; |
nicolas_guerrero | 0:881df5e1200a | 135 | } |
nicolas_guerrero | 0:881df5e1200a | 136 | if(endc==CM_END) |
nicolas_guerrero | 0:881df5e1200a | 137 | return val; |
nicolas_guerrero | 0:881df5e1200a | 138 | return 0; //al retornar 0 indica que no se recibe el comando |
nicolas_guerrero | 0:881df5e1200a | 139 | } |
nicolas_guerrero | 0:881df5e1200a | 140 | ///////////////////////////////////////////////////////////// |
nicolas_guerrero | 0:881df5e1200a | 141 | void guardar() |
nicolas_guerrero | 0:881df5e1200a | 142 | { |
nicolas_guerrero | 0:881df5e1200a | 143 | BT.printf("se inicia el comado de guardar..\r\n"); |
nicolas_guerrero | 0:881df5e1200a | 144 | mem_head=0; |
nicolas_guerrero | 0:881df5e1200a | 145 | do |
nicolas_guerrero | 0:881df5e1200a | 146 | { |
nicolas_guerrero | 0:881df5e1200a | 147 | BT.printf("entro while llenar\n\r"); |
nicolas_guerrero | 0:881df5e1200a | 148 | arreglo2[mem_head]= read_command(); |
nicolas_guerrero | 0:881df5e1200a | 149 | b=arreglo2[mem_head]; |
nicolas_guerrero | 0:881df5e1200a | 150 | BT.printf("posicion %i se lleno con %x\r\n",mem_head,arreglo2[mem_head]); |
nicolas_guerrero | 0:881df5e1200a | 151 | mem_head++; |
nicolas_guerrero | 0:881df5e1200a | 152 | } |
nicolas_guerrero | 0:881df5e1200a | 153 | while(b!=CM_STOP); |
nicolas_guerrero | 0:881df5e1200a | 154 | |
nicolas_guerrero | 0:881df5e1200a | 155 | } |
nicolas_guerrero | 0:881df5e1200a | 156 | /////////////////////////////////////////////////////// |
nicolas_guerrero | 0:881df5e1200a | 157 | void dibujar_matriz(uint32_t col, uint32_t fil) |
nicolas_guerrero | 0:881df5e1200a | 158 | { |
nicolas_guerrero | 0:881df5e1200a | 159 | bool cw=1; |
nicolas_guerrero | 0:881df5e1200a | 160 | smotor1.set_speed(speed); |
nicolas_guerrero | 0:881df5e1200a | 161 | int count=0; |
nicolas_guerrero | 0:881df5e1200a | 162 | int count2=0; |
nicolas_guerrero | 0:881df5e1200a | 163 | draw(); |
nicolas_guerrero | 0:881df5e1200a | 164 | for (count2=0;count2<=1;count2++) |
nicolas_guerrero | 0:881df5e1200a | 165 | { |
nicolas_guerrero | 0:881df5e1200a | 166 | smotor1.set_speed(speed); |
nicolas_guerrero | 0:881df5e1200a | 167 | smotor2.set_speed(speed); |
nicolas_guerrero | 0:881df5e1200a | 168 | for (count=0;count<=col*4096;count++) |
nicolas_guerrero | 0:881df5e1200a | 169 | { |
nicolas_guerrero | 0:881df5e1200a | 170 | smotor1.matriz(cw); |
nicolas_guerrero | 0:881df5e1200a | 171 | smotor2.matriz(cw); |
nicolas_guerrero | 0:881df5e1200a | 172 | } |
nicolas_guerrero | 0:881df5e1200a | 173 | |
nicolas_guerrero | 0:881df5e1200a | 174 | for (count=0;count<=2304;count++) |
nicolas_guerrero | 0:881df5e1200a | 175 | { |
nicolas_guerrero | 0:881df5e1200a | 176 | smotor1.set_speed(1200); |
nicolas_guerrero | 0:881df5e1200a | 177 | smotor1.matriz(cw); |
nicolas_guerrero | 0:881df5e1200a | 178 | } |
nicolas_guerrero | 0:881df5e1200a | 179 | |
nicolas_guerrero | 0:881df5e1200a | 180 | smotor1.set_speed(speed); |
nicolas_guerrero | 0:881df5e1200a | 181 | smotor2.set_speed(speed); |
nicolas_guerrero | 0:881df5e1200a | 182 | for (count=0;count<=fil*4096;count++) |
nicolas_guerrero | 0:881df5e1200a | 183 | { |
nicolas_guerrero | 0:881df5e1200a | 184 | smotor1.matriz(cw); |
nicolas_guerrero | 0:881df5e1200a | 185 | smotor2.matriz(cw); |
nicolas_guerrero | 0:881df5e1200a | 186 | } |
nicolas_guerrero | 0:881df5e1200a | 187 | for (count=0;count<=2304;count++) |
nicolas_guerrero | 0:881df5e1200a | 188 | { |
nicolas_guerrero | 0:881df5e1200a | 189 | smotor1.set_speed(1200); |
nicolas_guerrero | 0:881df5e1200a | 190 | smotor1.matriz(cw); |
nicolas_guerrero | 0:881df5e1200a | 191 | } |
nicolas_guerrero | 0:881df5e1200a | 192 | } |
nicolas_guerrero | 0:881df5e1200a | 193 | nodraw(); |
nicolas_guerrero | 0:881df5e1200a | 194 | } |
nicolas_guerrero | 0:881df5e1200a | 195 | void home() |
nicolas_guerrero | 0:881df5e1200a | 196 | { |
nicolas_guerrero | 0:881df5e1200a | 197 | motor_x.pulsewidth_us(800); |
nicolas_guerrero | 0:881df5e1200a | 198 | motor_y.pulsewidth_us(800); |
nicolas_guerrero | 0:881df5e1200a | 199 | motor_z.pulsewidth_us(800); |
nicolas_guerrero | 0:881df5e1200a | 200 | } |
nicolas_guerrero | 0:881df5e1200a | 201 | |
nicolas_guerrero | 0:881df5e1200a | 202 | int main() |
nicolas_guerrero | 0:881df5e1200a | 203 | { |
nicolas_guerrero | 0:881df5e1200a | 204 | // configuracion de periodo |
nicolas_guerrero | 0:881df5e1200a | 205 | motor_x.period_ms(periodo); |
nicolas_guerrero | 0:881df5e1200a | 206 | motor_y.period_ms(periodo); |
nicolas_guerrero | 0:881df5e1200a | 207 | motor_z.period_ms(periodo); |
nicolas_guerrero | 0:881df5e1200a | 208 | BT.baud(9600); |
nicolas_guerrero | 0:881df5e1200a | 209 | |
nicolas_guerrero | 0:881df5e1200a | 210 | home(); |
nicolas_guerrero | 0:881df5e1200a | 211 | uint32_t caracter; |
nicolas_guerrero | 0:881df5e1200a | 212 | while(1) |
nicolas_guerrero | 0:881df5e1200a | 213 | { |
nicolas_guerrero | 0:881df5e1200a | 214 | |
nicolas_guerrero | 0:881df5e1200a | 215 | caracter=read_command(); |
nicolas_guerrero | 0:881df5e1200a | 216 | //BT.putc('a'); |
nicolas_guerrero | 0:881df5e1200a | 217 | switch (caracter) |
nicolas_guerrero | 0:881df5e1200a | 218 | { |
nicolas_guerrero | 0:881df5e1200a | 219 | case CM_EJECUTAR: ejecutar(); break; |
nicolas_guerrero | 0:881df5e1200a | 220 | case CM_GUARDAR: guardar(); break; |
nicolas_guerrero | 0:881df5e1200a | 221 | default: |
nicolas_guerrero | 0:881df5e1200a | 222 | |
nicolas_guerrero | 0:881df5e1200a | 223 | uint32_t matriz=(uint8_t)(caracter>>16); |
nicolas_guerrero | 0:881df5e1200a | 224 | uint32_t ncolum=(uint8_t)(caracter>>8); |
nicolas_guerrero | 0:881df5e1200a | 225 | uint32_t nfilas=(uint8_t)(caracter); |
nicolas_guerrero | 0:881df5e1200a | 226 | |
nicolas_guerrero | 0:881df5e1200a | 227 | if(matriz==CM_DRAWMATRIX){dibujar_matriz(ncolum, nfilas);}//columnas y filas |
nicolas_guerrero | 0:881df5e1200a | 228 | |
nicolas_guerrero | 0:881df5e1200a | 229 | else |
nicolas_guerrero | 0:881df5e1200a | 230 | //BT.putc(caracter); |
nicolas_guerrero | 0:881df5e1200a | 231 | BT.printf("%x error de comando\r\n",caracter); |
nicolas_guerrero | 0:881df5e1200a | 232 | |
nicolas_guerrero | 0:881df5e1200a | 233 | break; |
nicolas_guerrero | 0:881df5e1200a | 234 | } |
nicolas_guerrero | 0:881df5e1200a | 235 | } |
nicolas_guerrero | 0:881df5e1200a | 236 | } |