Camilo Ramirez
/
ENTREGA1
AVANCE PICCOLO CORTE 1
main.cpp
- Committer:
- Camilokingxd
- Date:
- 2018-03-17
- Revision:
- 3:c3d197a71ecd
- Parent:
- 2:274426ac7654
File content as of revision 3:c3d197a71ecd:
#include "mbed.h" #include "def.h" DigitalOut myled(LED1); Serial pc(USBTX,USBRX); PwmOut mypwmX(PB_4); PwmOut mypwmY(PB_5); PwmOut mypwmZ(PB_3); uint32_t mem_head = 0; uint32_t mem_tail = 0; uint32_t full=0; MEM_TYPE buffer[MEM_SIZE]; void mem_free() { mem_head=0; full=0; mem_tail=0; } uint32_t mem_put(MEM_TYPE data) // { if(full) { return 1; // } buffer [mem_head]=data; mem_head+=1; if(mem_head==MEM_SIZE) { full=1; } return 0; } uint32_t mem_get(MEM_TYPE* data) { if(mem_head == 0) return 1; if (mem_head == mem_tail) return 1; *data=buffer[mem_tail]; mem_tail +=1; return 0; } void Vertex2D(uint8_t,uint8_t); void SetZ(uint8_t); uint8_t x,y,z; int mm2pulse(float vmm); void program_serial(); void ejecutar(); int guardar(); int main() { mypwmX.period_ms(20); mypwmY.period_ms(20); mypwmZ.period_ms(20); program_serial(); uint8_t letra,subletra; Vertex2D(0,0); SetZ(NODRAW); myled = 1; wait(2); while(1) { pc.printf("ingrese comando \n"); letra=pc.getc(); subletra=pc.getc(); if(subletra==CM_STOP) { switch(letra) { case CM_EJECUTAR: if(mem_head!=mem_tail) { ejecutar(); } else{ pc.printf("La memoria se encuentra vacia \n"); } break; case CM_GUARDAR: if(guardar()==0) { pc.printf("el programa se guardo correctamente \n"); } else { pc.printf("el programa no se pudo guardar... vuelva a intentar \n"); } break; default: pc.printf("error de comando \n");break ; } } else { pc.printf("el comando End no fue definido... vuelva a intentar \n"); } } } int mm2pulse(float vmm) { if (vmm < MAXPOS) return int (vmm*(MAXPULSE-MINPULSE)/(MAXPOS)) +MINPULSE; return MAXPULSE; } void SetZ(uint8_t _z) { z=_z; int PULSEZ=mm2pulse(z); mypwmZ.pulsewidth_us(PULSEZ); } void Vertex2D(uint8_t _x,uint8_t _y) { x=_x; y=_y; int PULSEX=mm2pulse(x); int PULSEY=mm2pulse(y); mypwmX.pulsewidth_us(PULSEX); mypwmY.pulsewidth_us(PULSEY); } void program_serial() { pc.baud(9600); pc.format(8,SerialBase::None,1); } void ejecutar() { program_serial(); pc.printf("el programa se esta ejecutando \n"); uint8_t a=0,b=0,c=0,d=0; uint32_t l,l1,l2,l3; MEM_TYPE val; // mem_get(&val); l1=(val&0xff00)>>8; l2=(val&0xff0000)>>16; l3=(val&0xff000000)>>24; l=val&0xff; while(c!=CM_END) { a=l3; pc.putc(a); b=l2; pc.putc(b); c=l1; pc.putc(c); d=l; pc.putc(d); if(a==CM_SERVO) { Vertex2D(b,c); } else if(c==CM_SDRAW) { SetZ(DRAW); } else if(c==CM_SN0DRAW) { SetZ(NODRAW); } mem_get(&val); l1=(val&0xff00)>>8; l2=(val&0xff0000)>>16; l3=(val&0xff000000)>>24; l=val&0xff; wait(1); } pc.printf("el programa se termino de ejecutar \n"); mem_tail=0; } int guardar() { mem_free(); uint32_t l=0; uint8_t sl; program_serial(); pc.printf("ingrese sus comandos y coordenadas \n"); sl=pc.getc(); pc.putc(sl); while(sl!=CM_END) { switch(sl) { case CM_SERVO: l=l+sl<<8; sl=pc.getc(); l=l+sl; pc.putc(l); l=l<<8; sl=pc.getc(); l=l+sl; pc.putc(l); l=l<<8; sl=pc.getc(); if(sl!=CM_STOP) { pc.printf("comando End no definido \n"); return 1; } l=l+sl; pc.putc(l); mem_put(l); break; case CM_SDRAW: l=l+sl<<8; sl=pc.getc(); if(sl!=CM_STOP) { pc.printf("comando End no definido \n"); return 1; } l=l+sl; mem_put(l); break; case CM_SN0DRAW: l=l+sl<<8; sl=pc.getc(); if(sl!=CM_STOP) { pc.printf("comando End no definido \n"); return 1; } l=l+sl; mem_put(l); break; } l=0; sl=pc.getc(); } sl=pc.getc(); pc.printf("el programa termino de guardar \n"); mem_put(0xfaf0); return 0; }