Hola, estoy trabajando en un proyecto en el cual controlo un servo motor con dos botones Push, uno para girarlo hacia la derecha y otro hacia la izquierda. Esta parte ya la tengo abajo anexo el código.
Pero cada vez que hay un corte de energía o alimentación el Arduino vuelve a iniciar y el servo motor se regresa a la posición inicial a toda velocidad lo cual no es bueno para la aplicación que necesito. Lo ideal seria que regrese a su posición inicial pero a una velocidad menor y mas lento de esta manera no seria perjudicial para mi proyecto o de otra forma que el Arduino guarde la ultima posición del servo y no se mueva en cada corte de energía, pero por lo que he investigado esto deteriora la EPROM y la vida del Arduino y seria un poco mas complicado.
Me conformo y seria muy bueno que el servo regrese a su estado inicial después de cada corte de energía pero a una velocidad lenta y no a su máxima velocidad.
Les agradecería mucho si me pudieran ayudar.
Gracias
#include <Servo.h> //Incluye libreria para el manejo del servo.
Servo servo1; //Crea objeto del servo.
int pinServo=3; //Pin PWM del Servo en el Arduino.
int angulo=90; //Inicializa en la posición 90°.
int pinPulsador1=7; //Boton para aumentar el algulo o grados del servo.
int pinPulsador2=2; //Boton para disminuir el algulo o grados del servo.
int estadoPulsador1=0;
int estadoPulsador2=0;
//FUNCION MILLIS
unsigned long tiempo1;
unsigned long tiempo2;
int tiempoX=0;
int tiempoY=0;
void setup(){
//SERVO
servo1.attach(pinServo);
pinMode(pinPulsador1,INPUT); //Define como entrada el pin del arduino donde se conecta el pulsador para aumentar el angulo o los grados.
pinMode(pinPulsador2,INPUT); //Define como entrada el pin del arduino donde se conecta el pulsador para disminuir el angulo o los grados.
servo1.write(angulo); // Mueve el motor hasta 90°
}
void loop(){
tiempo1=millis();
tiempo2=millis();
// PULSADORES DE SERVO
estadoPulsador1=digitalRead(pinPulsador1);
estadoPulsador2=digitalRead(pinPulsador2);
if(tiempo1-tiempoX>=60){
tiempoX=tiempo1;
if(estadoPulsador1 == HIGH){
angulo++; // Aumenta los grados o angulo del servo de uno en uno
if(angulo>=180) // Proteje el motor, para que no exceda los 180°, se puede dañar el motor
{
angulo=180;
}
}
if(estadoPulsador2 == HIGH){
angulo--;// Disminuye los grados o angulo del servo de uno en uno
if(angulo<=0)// Proteje el motor, para que no descienda de los 0°, se puede dañar el motor
{
angulo=0;
}
}
servo1.write(angulo);
}
}