//#include <Stepper.h>
#include <Servo.h>
// #include <Wire.h>
#include <LiquidCrystal.h>
// Configuración de la pantalla estándar (Pines: RS, EN, D4, D5, D6, D7)
const int rs = 12, en = 13, d4 = 2, d5 = 4, d6 = 6, d7 = 7;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
//int stepsPerRevolution = 0;
Servo miMicroservo1;
Servo servomotor2;
//Stepper myStepper(stepsPerRevolution, 10, 11, 7, 6);
int posicion1 = 0;
int posicion2 = 0;
// =================================================================
// --- VARIABLE TEMPORAL PARA CALIBRAR EL GIRO DE 180 GRADOS ---
// Cámbiala a prueba y error hasta que el motor haga el medio círculo exacto.
// Si el motor gira MÁS de 180 grados físicos, reduce este número.
// Si el motor gira MENOS de 180 grados físicos, aumenta este número.
int tiempoPorGrado = 35;
// =================================================================
void setup()
{
miMicroservo1.attach(3);
servomotor2.attach(5);
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
//myStepper.setSpeed(6);
//Serial.begin(115200);
//Serial.println("Inicio Stepper Sin Driver (Directo)");
lcd.begin(16, 2);
lcd.setCursor(0, 0);
lcd.print("Sistema Servo");
delay(1000);
lcd.clear();
}
void loop()
{
// --- SENTIDO HORARIO (Aumentando ángulo) ---
lcd.setCursor(0, 0);
lcd.print("sentido Horario ");
// Velocidad lenta hacia adelante
miMicroservo1.write(180);
servomotor2.write(180);
//delay(500);
for (posicion1 = 0, posicion2 = 0 /*, stepsPerRevolution= 0*/; posicion1 <= 180, posicion2 <= 180/*, stepsPerRevolution <= 180*/; posicion1 += 1, posicion2 += 1/*, stepsPerRevolution +=1*/ )
{
// miMicroservo1.write(posicion1);
// servomotor2.write(posicion2);
//myStepper.step(stepsPerRevolution);
//Serial.println("Sentido Horario");
digitalWrite(8, HIGH); // LED 1 Encendido
digitalWrite(9, LOW); // LED 2 Apagado
delay(tiempoPorGrado) ;
lcd.setCursor(0, 1);
lcd.print("grados: ");
lcd.print(posicion1);
lcd.print(" ");
miMicroservo1.write(posicion1);
servomotor2.write(posicion2);
// Aquí aplicamos la variable temporal
}
// --- SENTIDO ANTI-HORARIO (Disminuyendo ángulo) ---
lcd.setCursor(0, 0);
lcd.print("S. antihorario ");
// Velocidad lenta en reversa
//delay(50);
for ( posicion1 = 180, posicion2 = 180 /*, stepsPerRevolution= 180*/ ; posicion1 >= 0, posicion2 >= 0 /*,stepsPerRevolution >= 0*/; posicion1 -= 1, posicion2 -= 1 /*, stepsPerRevolution -=1*/)
{
// miMicroservo1.write(posicion1);
// servomotor2.write(posicion2);
//myStepper.step(stepsPerRevolution);
//Serial.println("Sentido Anti-horario");
digitalWrite(8, LOW); // LED 1 Apagado
digitalWrite(9, HIGH); // LED 2 Encendido
miMicroservo1.write(posicion1);
servomotor2.write(posicion2);
lcd.setCursor(0, 1);
lcd.print("grados: ");
lcd.print(posicion1);
lcd.print(" ");
delay(tiempoPorGrado);
// Aquí aplicamos la variable temporal de regreso
}
}