AVANCE PICCOLO CORTE 1

Dependencies:   mbed

Committer:
Camilokingxd
Date:
Sat Mar 17 05:44:19 2018 +0000
Revision:
3:c3d197a71ecd
Parent:
2:274426ac7654
PROGRAMA FINAL

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Camilokingxd 0:2032b926fd86 1 #include "mbed.h"
Camilokingxd 2:274426ac7654 2 #include "def.h"
Camilokingxd 2:274426ac7654 3
Camilokingxd 2:274426ac7654 4 DigitalOut myled(LED1);
Camilokingxd 2:274426ac7654 5
Camilokingxd 2:274426ac7654 6 Serial pc(USBTX,USBRX);
Camilokingxd 2:274426ac7654 7
Camilokingxd 2:274426ac7654 8 PwmOut mypwmX(PB_4);
Camilokingxd 2:274426ac7654 9 PwmOut mypwmY(PB_5);
Camilokingxd 2:274426ac7654 10 PwmOut mypwmZ(PB_3);
Camilokingxd 2:274426ac7654 11
Camilokingxd 3:c3d197a71ecd 12 uint32_t mem_head = 0;
Camilokingxd 3:c3d197a71ecd 13 uint32_t mem_tail = 0;
Camilokingxd 2:274426ac7654 14 uint32_t full=0;
Camilokingxd 2:274426ac7654 15
Camilokingxd 3:c3d197a71ecd 16 MEM_TYPE buffer[MEM_SIZE];
Camilokingxd 2:274426ac7654 17
Camilokingxd 3:c3d197a71ecd 18 void mem_free()
Camilokingxd 2:274426ac7654 19 {
Camilokingxd 2:274426ac7654 20 mem_head=0;
Camilokingxd 2:274426ac7654 21 full=0;
Camilokingxd 2:274426ac7654 22 mem_tail=0;
Camilokingxd 2:274426ac7654 23 }
Camilokingxd 0:2032b926fd86 24
Camilokingxd 3:c3d197a71ecd 25 uint32_t mem_put(MEM_TYPE data) //
Camilokingxd 2:274426ac7654 26 {
Camilokingxd 3:c3d197a71ecd 27 if(full)
Camilokingxd 3:c3d197a71ecd 28 {
Camilokingxd 3:c3d197a71ecd 29 return 1; //
Camilokingxd 3:c3d197a71ecd 30 }
Camilokingxd 3:c3d197a71ecd 31 buffer [mem_head]=data;
Camilokingxd 3:c3d197a71ecd 32 mem_head+=1;
Camilokingxd 3:c3d197a71ecd 33 if(mem_head==MEM_SIZE)
Camilokingxd 3:c3d197a71ecd 34 {
Camilokingxd 3:c3d197a71ecd 35 full=1;
Camilokingxd 2:274426ac7654 36 }
Camilokingxd 3:c3d197a71ecd 37 return 0;
Camilokingxd 3:c3d197a71ecd 38 }
Camilokingxd 3:c3d197a71ecd 39
Camilokingxd 3:c3d197a71ecd 40 uint32_t mem_get(MEM_TYPE* data)
Camilokingxd 3:c3d197a71ecd 41 {
Camilokingxd 3:c3d197a71ecd 42 if(mem_head == 0)
Camilokingxd 3:c3d197a71ecd 43 return 1;
Camilokingxd 3:c3d197a71ecd 44 if (mem_head == mem_tail)
Camilokingxd 3:c3d197a71ecd 45 return 1;
Camilokingxd 3:c3d197a71ecd 46
Camilokingxd 3:c3d197a71ecd 47 *data=buffer[mem_tail];
Camilokingxd 3:c3d197a71ecd 48 mem_tail +=1;
Camilokingxd 3:c3d197a71ecd 49
Camilokingxd 2:274426ac7654 50 return 0;
Camilokingxd 2:274426ac7654 51 }
Camilokingxd 0:2032b926fd86 52
Camilokingxd 2:274426ac7654 53 void Vertex2D(uint8_t,uint8_t);
Camilokingxd 2:274426ac7654 54 void SetZ(uint8_t);
Camilokingxd 2:274426ac7654 55 uint8_t x,y,z;
Camilokingxd 3:c3d197a71ecd 56 int mm2pulse(float vmm);
Camilokingxd 0:2032b926fd86 57 void program_serial();
Camilokingxd 0:2032b926fd86 58 void ejecutar();
Camilokingxd 2:274426ac7654 59 int guardar();
Camilokingxd 0:2032b926fd86 60
Camilokingxd 2:274426ac7654 61 int main()
Camilokingxd 0:2032b926fd86 62 {
Camilokingxd 2:274426ac7654 63 mypwmX.period_ms(20);
Camilokingxd 2:274426ac7654 64 mypwmY.period_ms(20);
Camilokingxd 2:274426ac7654 65 mypwmZ.period_ms(20);
Camilokingxd 0:2032b926fd86 66 program_serial();
Camilokingxd 2:274426ac7654 67 uint8_t letra,subletra;
Camilokingxd 2:274426ac7654 68 Vertex2D(0,0);
Camilokingxd 2:274426ac7654 69 SetZ(NODRAW);
Camilokingxd 2:274426ac7654 70 myled = 1;
Camilokingxd 0:2032b926fd86 71 wait(2);
Camilokingxd 3:c3d197a71ecd 72 while(1)
Camilokingxd 3:c3d197a71ecd 73 {
Camilokingxd 2:274426ac7654 74 pc.printf("ingrese comando \n");
Camilokingxd 3:c3d197a71ecd 75 letra=pc.getc();
Camilokingxd 2:274426ac7654 76 subletra=pc.getc();
Camilokingxd 2:274426ac7654 77 if(subletra==CM_STOP)
Camilokingxd 2:274426ac7654 78 {
Camilokingxd 3:c3d197a71ecd 79 switch(letra)
Camilokingxd 3:c3d197a71ecd 80 {
Camilokingxd 2:274426ac7654 81 case CM_EJECUTAR:
Camilokingxd 2:274426ac7654 82 if(mem_head!=mem_tail)
Camilokingxd 2:274426ac7654 83 {
Camilokingxd 2:274426ac7654 84 ejecutar();
Camilokingxd 2:274426ac7654 85 }
Camilokingxd 2:274426ac7654 86 else{
Camilokingxd 2:274426ac7654 87 pc.printf("La memoria se encuentra vacia \n");
Camilokingxd 2:274426ac7654 88 }
Camilokingxd 2:274426ac7654 89 break;
Camilokingxd 2:274426ac7654 90 case CM_GUARDAR:
Camilokingxd 2:274426ac7654 91 if(guardar()==0)
Camilokingxd 2:274426ac7654 92 {
Camilokingxd 2:274426ac7654 93 pc.printf("el programa se guardo correctamente \n");
Camilokingxd 2:274426ac7654 94 }
Camilokingxd 2:274426ac7654 95 else
Camilokingxd 2:274426ac7654 96 {
Camilokingxd 2:274426ac7654 97 pc.printf("el programa no se pudo guardar... vuelva a intentar \n");
Camilokingxd 2:274426ac7654 98 }
Camilokingxd 2:274426ac7654 99 break;
Camilokingxd 2:274426ac7654 100 default: pc.printf("error de comando \n");break ;
Camilokingxd 3:c3d197a71ecd 101 }
Camilokingxd 2:274426ac7654 102 }
Camilokingxd 2:274426ac7654 103 else
Camilokingxd 2:274426ac7654 104 {
Camilokingxd 2:274426ac7654 105 pc.printf("el comando End no fue definido... vuelva a intentar \n");
Camilokingxd 0:2032b926fd86 106 }
Camilokingxd 0:2032b926fd86 107 }
Camilokingxd 0:2032b926fd86 108 }
Camilokingxd 2:274426ac7654 109 int mm2pulse(float vmm)
Camilokingxd 2:274426ac7654 110 {
Camilokingxd 2:274426ac7654 111 if (vmm < MAXPOS)
Camilokingxd 2:274426ac7654 112 return int (vmm*(MAXPULSE-MINPULSE)/(MAXPOS)) +MINPULSE;
Camilokingxd 2:274426ac7654 113 return MAXPULSE;
Camilokingxd 2:274426ac7654 114 }
Camilokingxd 2:274426ac7654 115 void SetZ(uint8_t _z)
Camilokingxd 2:274426ac7654 116 {
Camilokingxd 2:274426ac7654 117 z=_z;
Camilokingxd 2:274426ac7654 118 int PULSEZ=mm2pulse(z);
Camilokingxd 2:274426ac7654 119 mypwmZ.pulsewidth_us(PULSEZ);
Camilokingxd 2:274426ac7654 120 }
Camilokingxd 2:274426ac7654 121 void Vertex2D(uint8_t _x,uint8_t _y)
Camilokingxd 2:274426ac7654 122 {
Camilokingxd 2:274426ac7654 123 x=_x;
Camilokingxd 2:274426ac7654 124 y=_y;
Camilokingxd 2:274426ac7654 125 int PULSEX=mm2pulse(x);
Camilokingxd 2:274426ac7654 126 int PULSEY=mm2pulse(y);
Camilokingxd 2:274426ac7654 127 mypwmX.pulsewidth_us(PULSEX);
Camilokingxd 2:274426ac7654 128 mypwmY.pulsewidth_us(PULSEY);
Camilokingxd 2:274426ac7654 129 }
Camilokingxd 0:2032b926fd86 130 void program_serial()
Camilokingxd 0:2032b926fd86 131 {
Camilokingxd 2:274426ac7654 132 pc.baud(9600);
Camilokingxd 2:274426ac7654 133 pc.format(8,SerialBase::None,1);
Camilokingxd 0:2032b926fd86 134 }
Camilokingxd 0:2032b926fd86 135 void ejecutar()
Camilokingxd 0:2032b926fd86 136 {
Camilokingxd 2:274426ac7654 137 program_serial();
Camilokingxd 2:274426ac7654 138 pc.printf("el programa se esta ejecutando \n");
Camilokingxd 3:c3d197a71ecd 139 uint8_t a=0,b=0,c=0,d=0;
Camilokingxd 3:c3d197a71ecd 140 uint32_t l,l1,l2,l3;
Camilokingxd 3:c3d197a71ecd 141 MEM_TYPE val; //
Camilokingxd 2:274426ac7654 142
Camilokingxd 3:c3d197a71ecd 143 mem_get(&val);
Camilokingxd 3:c3d197a71ecd 144 l1=(val&0xff00)>>8;
Camilokingxd 3:c3d197a71ecd 145 l2=(val&0xff0000)>>16;
Camilokingxd 3:c3d197a71ecd 146 l3=(val&0xff000000)>>24;
Camilokingxd 3:c3d197a71ecd 147 l=val&0xff;
Camilokingxd 2:274426ac7654 148 while(c!=CM_END)
Camilokingxd 2:274426ac7654 149 {
Camilokingxd 2:274426ac7654 150 a=l3;
Camilokingxd 2:274426ac7654 151 pc.putc(a);
Camilokingxd 2:274426ac7654 152 b=l2;
Camilokingxd 2:274426ac7654 153 pc.putc(b);
Camilokingxd 2:274426ac7654 154 c=l1;
Camilokingxd 2:274426ac7654 155 pc.putc(c);
Camilokingxd 2:274426ac7654 156 d=l;
Camilokingxd 2:274426ac7654 157 pc.putc(d);
Camilokingxd 2:274426ac7654 158 if(a==CM_SERVO)
Camilokingxd 2:274426ac7654 159 {
Camilokingxd 2:274426ac7654 160 Vertex2D(b,c);
Camilokingxd 2:274426ac7654 161 }
Camilokingxd 2:274426ac7654 162 else if(c==CM_SDRAW)
Camilokingxd 2:274426ac7654 163 {
Camilokingxd 2:274426ac7654 164 SetZ(DRAW);
Camilokingxd 2:274426ac7654 165 }
Camilokingxd 2:274426ac7654 166 else if(c==CM_SN0DRAW)
Camilokingxd 2:274426ac7654 167 {
Camilokingxd 2:274426ac7654 168 SetZ(NODRAW);
Camilokingxd 2:274426ac7654 169 }
Camilokingxd 2:274426ac7654 170 mem_get(&val);
Camilokingxd 3:c3d197a71ecd 171 l1=(val&0xff00)>>8;
Camilokingxd 2:274426ac7654 172 l2=(val&0xff0000)>>16;
Camilokingxd 2:274426ac7654 173 l3=(val&0xff000000)>>24;
Camilokingxd 2:274426ac7654 174 l=val&0xff;
Camilokingxd 2:274426ac7654 175 wait(1);
Camilokingxd 2:274426ac7654 176 }
Camilokingxd 2:274426ac7654 177 pc.printf("el programa se termino de ejecutar \n");
Camilokingxd 3:c3d197a71ecd 178 mem_tail=0;
Camilokingxd 0:2032b926fd86 179 }
Camilokingxd 2:274426ac7654 180 int guardar()
Camilokingxd 0:2032b926fd86 181 {
Camilokingxd 2:274426ac7654 182 mem_free();
Camilokingxd 3:c3d197a71ecd 183 uint32_t l=0;
Camilokingxd 3:c3d197a71ecd 184 uint8_t sl;
Camilokingxd 0:2032b926fd86 185 program_serial();
Camilokingxd 2:274426ac7654 186 pc.printf("ingrese sus comandos y coordenadas \n");
Camilokingxd 2:274426ac7654 187 sl=pc.getc();
Camilokingxd 2:274426ac7654 188 pc.putc(sl);
Camilokingxd 2:274426ac7654 189 while(sl!=CM_END)
Camilokingxd 0:2032b926fd86 190 {
Camilokingxd 2:274426ac7654 191 switch(sl)
Camilokingxd 0:2032b926fd86 192 {
Camilokingxd 2:274426ac7654 193 case CM_SERVO:
Camilokingxd 3:c3d197a71ecd 194 l=l+sl<<8;
Camilokingxd 2:274426ac7654 195 sl=pc.getc();
Camilokingxd 2:274426ac7654 196 l=l+sl;
Camilokingxd 2:274426ac7654 197 pc.putc(l);
Camilokingxd 2:274426ac7654 198 l=l<<8;
Camilokingxd 2:274426ac7654 199 sl=pc.getc();
Camilokingxd 2:274426ac7654 200 l=l+sl;
Camilokingxd 2:274426ac7654 201 pc.putc(l);
Camilokingxd 2:274426ac7654 202 l=l<<8;
Camilokingxd 2:274426ac7654 203 sl=pc.getc();
Camilokingxd 3:c3d197a71ecd 204 if(sl!=CM_STOP)
Camilokingxd 2:274426ac7654 205 {
Camilokingxd 2:274426ac7654 206 pc.printf("comando End no definido \n");
Camilokingxd 2:274426ac7654 207 return 1;
Camilokingxd 2:274426ac7654 208 }
Camilokingxd 2:274426ac7654 209 l=l+sl;
Camilokingxd 2:274426ac7654 210 pc.putc(l);
Camilokingxd 3:c3d197a71ecd 211 mem_put(l);
Camilokingxd 0:2032b926fd86 212 break;
Camilokingxd 2:274426ac7654 213 case CM_SDRAW:
Camilokingxd 2:274426ac7654 214 l=l+sl<<8;
Camilokingxd 2:274426ac7654 215 sl=pc.getc();
Camilokingxd 2:274426ac7654 216 if(sl!=CM_STOP)
Camilokingxd 2:274426ac7654 217 {
Camilokingxd 2:274426ac7654 218 pc.printf("comando End no definido \n");
Camilokingxd 2:274426ac7654 219 return 1;
Camilokingxd 2:274426ac7654 220 }
Camilokingxd 2:274426ac7654 221 l=l+sl;
Camilokingxd 2:274426ac7654 222 mem_put(l);
Camilokingxd 0:2032b926fd86 223 break;
Camilokingxd 2:274426ac7654 224 case CM_SN0DRAW:
Camilokingxd 2:274426ac7654 225 l=l+sl<<8;
Camilokingxd 2:274426ac7654 226 sl=pc.getc();
Camilokingxd 2:274426ac7654 227 if(sl!=CM_STOP)
Camilokingxd 2:274426ac7654 228 {
Camilokingxd 2:274426ac7654 229 pc.printf("comando End no definido \n");
Camilokingxd 2:274426ac7654 230 return 1;
Camilokingxd 2:274426ac7654 231 }
Camilokingxd 2:274426ac7654 232 l=l+sl;
Camilokingxd 2:274426ac7654 233 mem_put(l);
Camilokingxd 0:2032b926fd86 234 break;
Camilokingxd 0:2032b926fd86 235 }
Camilokingxd 2:274426ac7654 236 l=0;
Camilokingxd 2:274426ac7654 237 sl=pc.getc();
Camilokingxd 0:2032b926fd86 238 }
Camilokingxd 2:274426ac7654 239 sl=pc.getc();
Camilokingxd 2:274426ac7654 240 pc.printf("el programa termino de guardar \n");
Camilokingxd 2:274426ac7654 241 mem_put(0xfaf0);
Camilokingxd 2:274426ac7654 242 return 0;
Camilokingxd 0:2032b926fd86 243 }