AVANCE PICCOLO CORTE 1

Dependencies:   mbed

Committer:
Camilokingxd
Date:
Fri Mar 16 04:54:34 2018 +0000
Revision:
2:274426ac7654
Parent:
1:8574f732dba3
Child:
3:c3d197a71ecd
MEJORA 2 - FUNCIONA

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