Piccolo terminado

Dependencies:   mbed

Committer:
nicolas_guerrero
Date:
Wed May 30 15:55:00 2018 +0000
Revision:
0:881df5e1200a
Tercer Corte

Who changed what in which revision?

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