Sunteți pe pagina 1din 2

//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
}

S-ar putea să vă placă și