Frank Girald
/
Stepper_serialTX
Paso a paso
Diff: main.cpp
- Revision:
- 2:79a9ae9ae772
- Parent:
- 1:d1b359ae4723
--- a/main.cpp Wed Nov 08 22:24:52 2017 +0000 +++ b/main.cpp Fri Nov 10 14:16:32 2017 +0000 @@ -3,13 +3,50 @@ Serial rs232(USBTX, USBRX); //enable serial port which links to USB Timer Timer1; DigitalOut led1(LED1); +InterruptIn s0(PTA13); +DigitalIn s1(PTC8); +DigitalIn s2(PTC9); +DigitalIn s3(PTD5); +DigitalIn s4(PTD0); +InterruptIn s5(PTD2); InterruptIn int1(PTD0); unsigned int contador = 0, frec = 0, cont_color1, cont_color2, cont_color3; -bool flag_color1, flag_color2, flag_color3; +bool flag_color1, flag_color2, flag_color3, conveyor_on; int num_pasos,grados,i,g,k,step,desplazam,origen, destino; -BusOut step_secuence(PTD4,PTA12,PTA4,PTA5); +BusOut step_secuence1(PTD4,PTA12,PTA4,PTA5); +BusOut step_secuence2(PTD7,PTA6,PTE31,PTA17); + + +void conveyor_step() // Avance motor +{ + k=0; + for (i = 0; i<=8; ++i) { + switch (k) { + case 0: + step_secuence2=0x0A; + break; + case 1: + step_secuence2=0x09; + break; + case 2: + step_secuence2=0x05; + break; + case 3: + step_secuence2=0x06; + break; + default: + break; + } + ++k; + if (k>=4) { + k=0; + } + wait(0.1); + } + rs232.printf("Banda On\r\n"); //Enciende Banda +} void forward(int cont_pasos) // Avance motor { @@ -17,16 +54,16 @@ for (i = 0; i<=cont_pasos; ++i) { switch (k) { case 0: - step_secuence=0x0A; + step_secuence1=0x0A; break; case 1: - step_secuence=0x09; + step_secuence1=0x09; break; case 2: - step_secuence=0x05; + step_secuence1=0x05; break; case 3: - step_secuence=0x06; + step_secuence1=0x06; break; default: break; @@ -46,11 +83,57 @@ rs232.printf("%d\r\n",grados); //Visualiza avance cada 15° } + +void backward(int cont_pasos) // Retroceso motor +{ + k=3; + for (i = 0; i<=cont_pasos-1; i++) { + if (k<=0) { + k=3; + } + switch (k) { + case 0: + step_secuence1=0x06; + break; + case 1: + step_secuence1=0x05; + break; + case 2: + step_secuence1=0x09; + break; + case 3: + step_secuence1=0x0A; + break; + } + wait(0.1); + --k; + } + g=g-8; + if(grados<0) { + g=192; + } + grados=(g/num_pasos)*15; + if(grados<0) { + grados=360; + } + rs232.printf("%d\r\n",grados); //Visualiza retroceso cada 15° +} + void ISR_PTD0() { ++contador; } +void ISR_S0() +{ + conveyor_on=1; +} + +void ISR_S5() +{ + conveyor_on=0; +} + void frecuencia() { contador=0; @@ -68,9 +151,17 @@ num_pasos=8; // 1.8° por paso son 8.3333 pasos para avanzar 15°, se aproxima a 8 grados=0; origen=1; + conveyor_on=0; int1.mode(PullUp); int1.rise(&ISR_PTD0); + s0.mode(PullUp); + s0.rise(&ISR_S0); + s5.mode(PullUp); + s5.rise(&ISR_S5); while(true) { + if(conveyor_on==1) { + conveyor_step(); + } frecuencia(); rs232.printf("f=%d Hz\r\n",frec); if(frec>=10000 && frec<=15000) { @@ -106,7 +197,21 @@ break; } } - origen=destino; + //origen=destino; + if(s1==0) { + desplazam=origen-destino; + switch(desplazam) { + case 1: + forward(144); + break; + case 2: + forward(96); + break; + case 3: + forward(48); + break; + } + } } flag_color1=1; } else {