Alonso Angulo
/
controlador_stepper
Controlador de motos stepper con giro, modo y velocidad
Diff: main.cpp
- Revision:
- 0:125d31ad5798
diff -r 000000000000 -r 125d31ad5798 main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Fri Oct 10 19:18:36 2014 +0000 @@ -0,0 +1,124 @@ +#include "mbed.h" + +DigitalOut myled(LED1); +DigitalIn giro(D2); +DigitalIn modo(D3); +AnalogIn pot(A0); +BusOut stepper(D5, D6, D7, D8); +Timer t1; +Timer t2; +int valbot1; +int valbot2; +int caso; +float pwm; +Serial pc (USBTX,USBRX); + +int main() { + valbot1 = 0; + valbot2 = 0; + myled = 0; + wait(0.4); + myled = 1; + wait(0.4); + float x; + + + stepper = 8; + wait(0.5); + t1.start(); + t2.start(); + while(1) { + + x= pot; + pwm = ((x/0.004348)+20); + + if (t1.read() == 0) { + t1.start(); + } + if (t2.read() == 0) { + t2.start(); + } + + switch (caso){ + + case 1: + if (stepper == 0) { //como el corrimiento de bits se fue a 0, ya no me sirve y los reinicio a 8 (osea 1000) + stepper = 8; + } + break; + + case 2: + if (stepper == 0) { // al igual que en el caso 1 pero ahora se inicializa en 1 (0001) + stepper = 1; + } + break; + + case 3: + if (stepper == 1) { //en este caso ya no llega a desaparecer el bit con (0000) pero cuando en vez de 2 bits se visualiza 1 solo (0001) ya es error y se coniverte en el requerido (1001) + stepper = 9; + } + if (stepper == 4) { //aquí cuando hay un (0100 porque el corrimiento asi se llevo 1 bit este se convierte en (0110)) + stepper = 12; + } + break; + + case 4: + if (stepper == 8) { + stepper = 9; + } + if (stepper == 2) { + stepper = 3; + } + break; + } + + pc.printf("%d \n",t1.read_ms()); // para checar la lectura si esta llegando al valor deseado y reiniciandose antes de entrar al if + if (t1.read_ms() >= pwm ){ + switch (caso){ //abro un switch case dependiendo de las 4 combinaciones posibles de los 2 botones + + case 1: + stepper = stepper >> 1; //hago un corrimiento hacia la derecha + t1.reset(); + break; + + case 2: + stepper = stepper << 1; //se hace un corrimiento hacia la izquierda + t1.reset(); + break; + + case 3: + stepper = stepper >> 1; //corrimiento hacia la derecha + t1.reset(); + break; + + case 4: + stepper = stepper << 1; //corrimiento hacia la izquierda + t1.reset(); // se pone el reset dentro de los case ya que sino se vera interrumpido por el break; + break; + } + + + } + + if (giro == 0){ // es cero porque es pullup + valbot1 = !valbot1; //cambio de estado entre valbot1 y 2 + } + if (modo == 0){ + valbot2 = !valbot2; + } + + if (valbot1 ==0 && valbot2 == 0){ + + caso = 1; + } else if (valbot1 == 1 && valbot2 == 0){ + caso = 2; + } else if (valbot1 == 0 && valbot2 == 1){ + caso = 3; + } else if (valbot1 == 1 && valbot2 == 1){ + caso = 4; + } + + + } + } +