proyecto: motor con parada de estado

buenass soy jose y quisiera mostrarles mi proyecto para que mas que nada me ayuden a corregirlo, por que es solo un prototipo, no lo he provado y tal vez no funcione como espero, por eso quisiera pedirles una mano. bueno, en esta instancia ya estoy terminando el proyecto del "lavarropas" que lo he programado en arduino, he leido bastante en la pagina oficial de arduino y estudiado varias funciones, pero hay cosas que no estan del todo claras como por ej. las interrupciones que me quedaron muchas dudas como si al volver a apretarlo el estado de una variable vuelve a la normalidad o algo asi, en este caso me hubiera venido muy bien pero opte por suponer que no lo hacia, y adapte el proyecto. [u]les digo que deberia hacer:[/u]

girar a la derecha 3 seg
parar 4 seg
girar a la izq 1 seg
parar 2 seg

ademas tiene que tener un boton de parada de estado (si es presionado se queda en la ejecucion de la accion correspondiente ej: girando a la izq) y un boton de parada de emergencias(no importa lo voy a hacer por hardware.) en el sketch de programacion lo unico que necesito es q para girar a la izquierda o derecha envie un pulso por los pines 12 y 13 correspondientemente durante el tiempo sugerido. sin mas que decir les muestro el programa:

int pinder = 13; //nombro los pines int pinizq = 12; int estado; //variables int movimiento; void setup() {

attachInterrupt(0, paradaestado, RISING);//interrupcion para el boton de //parada de estado pinMode(pinder, OUTPUT); //declaro salidas de izq y der pinMode(pinizq, OUTPUT);

Serial.begin(9600);//comunicacion serial } void loop() {

movimiento = 0;//valor predeterminado //caso de parada de estado n2 * while(movimiento == 1){* * estado = 5; //esto es la bandera de retorno* * Serial.println("derecha");* digitalWrite(pinder, HIGH); * }* * //ejecucion normal 1* estado = 1;//defino etapa giro derecha Serial.println("derecha"); digitalWrite(pinder, HIGH);//derecha encendido por 3 segundos delay(3000); //caso de parada de estado n2 * while(movimiento == 2){* * estado = 6;* * digitalWrite(pinder, LOW);//derecha apagado, se detiene* Serial.println("stop"); * }* * //ejecucion normal 2* estado = 2;//defino etapa frenado 1 digitalWrite(pinder, LOW);//derecha apagado, se detiene por 4 seguindos Serial.println("stop"); delay(4000); * //caso de parada de estado n3* * while(movimiento == 3){* * estado = 7;* * digitalWrite(pinizq, HIGH);//izquierda encendido* Serial.println("izquierda"); * }* * //ejecucion normal 3* estado = 3;//defino etapa giro izquierda digitalWrite(pinizq, HIGH);//izquierda encendido por 1 segundo Serial.println("izquierda"); delay(1000); * //caso de parada de estado n4* * while(movimiento == 4){* * estado = 8;* * digitalWrite(pinizq, LOW);//izquierda encendido* Serial.println("stop"); * }* * //ejecucion normal 4* estado = 4;//defino etapa frenado 2 digitalWrite(pinizq, LOW);//parada por 2 segundos Serial.println("stop"); delay(2000); } //la interrupcion hace que el estado de movimiento sea igual al estado que se //este ejecutando en ese momento, asi se habilitara el while correspondiente void paradaestado() { movimiento = estado; // if (estado == 5) // movimiento = 0 //esto no hace falta ya que al establecer estado = 5 en los //while (banderas de retorno) hacen que al volver a presionar el boton osea //se vuelve a ejecutar la interrupcion, mov igual est entonces mov=5 y no se //cumplen los while y sigue su recorrido.

  • }*

ese seria todo, y no estoy seguro si funcionaria me gustaria su opinion (no lo he provado por q no tengo todo el equipo necesario pero mi tiempo es muy corto y no puedo dejar pasar mas dias) y sus criticas, y si pueden que me den una mano haciendo este programa. muchisimas gracias jose