// Definición de pines
const int motorAvance = 2;
const int motorRegreso = 15;
const int sensor = 14;
// Variables globales
int grados;
int gradosEngrane;
int contador = 0;
int antirebote = 300;
void setup() {
//Configuracion de salida para relevadores
pinMode(motorAvance, OUTPUT);
pinMode(motorRegreso, OUTPUT);
//Configuracion de entrada de sensor en flanco de subida
pinMode(sensor, INPUT_PULLUP);
//Inicializar puerto serial
Serial.begin(9600);
}
void loop() {
// Solicitar al usuario los grados que desea mover el motor
Serial.println("¿Cuántos grados desea mover el motor?");
//Esperar respuesta del usuario, no avanzar si no hay datos ingresados
while (Serial.available() == 0) {}
//Guardar el numero de grados ingresado
grados = Serial.parseInt();
//Convertir el numero en movimientos del engrane de 18 dientes
gradosEngrane = grados/20;
// Iniciar el movimiento del motor en avance
digitalWrite(motorAvance, HIGH);
// Esperar a que el sensor detecte una interrupcion de los engranes
while (contador < gradosEngrane) {
if (digitalRead(sensor) == LOW) {
contador++;
Serial.println(contador);
delay(antirebote);
}
}
// Parar el motor, esperar en estado final 3s y activar el motor en retroceso
digitalWrite(motorAvance, LOW);
delay(3000);
digitalWrite(motorRegreso, HIGH);
// Esperar a que el sensor detecte todas las interrupciones que realizo en avance
while (contador > 0) {
if (digitalRead(sensor) == LOW) {
contador--;
Serial.println(contador);
delay(antirebote);
}
}
// Detener el motor en estado incial y reiniciar el contador
digitalWrite(motorRegreso, LOW);
contador = 0;
}