// Definir los pines del motor y los relevadores
int motorPin1 = 5;
int motorPin2 = 6;
int relayPin1 = 7;
int relayPin2 = 8;
// Definir el pin de entrada del sensor infrarrojo
int sensorPin = 2;
// Variables para controlar el movimiento del motor
int degreesToMove = 0;
volatile int teethCount = 0;
volatile int degreesRotated = 0;
void countTeeth() {
teethCount++;
degreesRotated = teethCount * (360 / 18); // Engranaje de 18 dientes
}
void setup() {
// Configurar los pines del motor y los relevadores como salidas
pinMode(motorPin1, OUTPUT);
pinMode(motorPin2, OUTPUT);
pinMode(relayPin1, OUTPUT);
pinMode(relayPin2, OUTPUT);
// Configurar el pin del sensor infrarrojo como entrada
pinMode(sensorPin, INPUT);
// Configurar la comunicación serie
Serial.begin(9600);
// Configurar la interrupción en el flanco de subida para contar los dientes
attachInterrupt(digitalPinToInterrupt(sensorPin), countTeeth, RISING);
}
void loop() {
// Solicitar al usuario la cantidad de grados a mover el motor
Serial.println("Ingrese la cantidad de grados a mover (0-360):");
while (Serial.available() == 0) {
// Esperar a que el usuario ingrese la cantidad de grados
}
degreesToMove = Serial.parseInt();
// Calcular la cantidad de dientes que deben moverse
teethCount = 0; // Reiniciar el contador de dientes
int teethToMove = (degreesToMove * 18) / 360; // Engranaje de 18 dientes
// Configurar el relevador para el avance del motor
digitalWrite(relayPin1, HIGH);
digitalWrite(relayPin2, LOW);
// Hacer girar el motor hasta que se haya movido la cantidad de dientes especificada
while (teethCount < teethToMove) {
digitalWrite(motorPin1, HIGH);
delay(10);
digitalWrite(motorPin1, LOW);
delay(10);
}
// Configurar el relevador para el retroceso del motor
digitalWrite(relayPin1, LOW);
digitalWrite(relayPin2, HIGH);
// Hacer girar el motor en sentido contrario hasta que vuelva a su posición inicial
while (teethCount > 0) {
digitalWrite(motorPin2, HIGH);
delay(10);
digitalWrite(motorPin2, LOW);
delay(10);
}
// Detener el motor y mostrar la cantidad de grados girados
digitalWrite(relayPin1, LOW);
digitalWrite(relayPin2, LOW);
Serial.print("Grados girados: ");
Serial.println(degreesRotated);
}