¿Se puede guardar la ultima posición del servo o que este regrese a su posición inicial de forma mas lenta?

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);
  }
} 

Si hubieras buscado, tendrías la solucion.
La mayor parte de las preguntas han sido respondidas.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.