//Constante declarada para tomar los pulsos del sensor (optoacoplador) const int buttonPin = 7; //Para mover el motor

de izquierda a derecha int entradaMotor1=2; int entradaMotor2=3; int pwm=9;//Para graduar la velocidad del motor //Variables para el control del programa int buttonPushCounter = 0;// Contador que lo captura el optoacoplador int buttonState = 0;// Estado de la salida del sensor int lastButtonState = 0;// El último estado anterior (variable de ayuda) void setup() { //Inicializa las variables correspondientes pinMode(buttonPin, INPUT); //Para mover el motor pinMode(entradaMotor1, OUTPUT); pinMode(entradaMotor2, OUTPUT); pinMode(pwm,OUTPUT); // Para visualizar el comportamiento de los datos enviados/recibidos Serial.begin(9600); } void loop() { // Lee los datos enviado por el optoacoplador buttonState =digitalRead(buttonPin); // Compara el estado actual con el último if (buttonState != lastButtonState) { // Si el estado es cambiado incrementa el contador if (buttonState ==HIGH) { //Incrementa el contador si y solo si se consigue un estado HIGH buttonPushCounter++; Serial.print("Contador: " ); Serial.println(buttonPushCounter, DEC);//Imprime el contador en pantalla } } //Salvamos el ultimo estado actual lastButtonState = buttonState; //Se mueve de a la derecha 6 revoluciones de motor if(buttonPushCounter>=1 && buttonPushCounter<6){ derecha(255,0); }else{ delay(60); //En otro caso se mueve a la izquierda inicio(); //detenerlo(0); } }

//Función movedora hacia la derecha void derecha(int x,int w){ digitalWrite(entradaMotor1, HIGH); digitalWrite(entradaMotor2, LOW); analogWrite(pwm,x); //delay(w); } //Función movedora hacia la izquierda void izquierda(int y,int z){ digitalWrite(entradaMotor1, LOW); digitalWrite(entradaMotor2, HIGH); analogWrite(pwm,y); //delay(z); } //Función que detiene todo movimiento del motor void detenerlo(int beta){ digitalWrite(entradaMotor1, LOW); digitalWrite(entradaMotor2, LOW); //analogWrite(pwm,y); delay(beta); } //Función que regresa al inicio a la charola, es decir se mueve a la izquierda void inicio(){ detenerlo(4000);//Para evitar el sobrecalentamiento del motor se hace una peq izquierda(255,0); while(buttonPushCounter!=1){ //Aquí código parecido al contador pero ahora decrementa al contador buttonState =digitalRead(buttonPin); if (buttonState != lastButtonState) { if (buttonState ==HIGH) { buttonPushCounter--; Serial.print("Contador: " ); Serial.println(buttonPushCounter, DEC); } } lastButtonState = buttonState; } delay(50); detenerlo(10000);//Para no forzar al amotor }

Sign up to vote on this title
UsefulNot useful