Como guardar posición de servomotor en memoria eeprom


cordial saludo. les consulto como puedo guardar la posición de un servomotor en la memoria eeprom. la idea es hacer un programa para un servomotor que gire en un angulo de 100 140 grados, almacene la posición del angulo en memoria eeprom, de forma que cuando se vaya la energia el programa empiece donde quedo el angulo de giro antes de apagarse. luego, debe devolverse el angulo, es decir debe ir de 141 100 grados y almacenar en memoria eeprom.

aquí les comparto el programa que tengo hecho. no entiendo porque no me funciona.

saludos.

programa:

#include <eeprom.h>
#include <servo.h>

int direccion = 1; // posicion de la memoria eeprom
byte valorinicial = 140; //varialble tipo byte
byte valorinicial1 = 101;

servo servomano;

void setup()
{
serial.begin(9600);

 
servomano.attach(8); // mano

 eeprom.write(direccion, valorinicial);
 eeprom.write(direccion, valorinicial1);
 

}

void loop()
{
 
 for (int pos = 140; pos > 100; pos--)
  {
      servomano.write(pos);
      delay(50);
      int valor = analogread(8) / 4;
 
      eeprom.write(direccion, pos);
      eeprom.read(pos);
   
    }
 
 for (int pos = 101; pos < 141; pos ++)
 
  {
    servomano.write(pos);
    delay(18);
    eeprom.write(direccion, pos);
    eeprom.write(direccion, pos);
    eeprom.read(pos);
 
     serial.println(pos); 

   
   
   
     }
}
 

¡para el carrooooo!
lo primero que debes tener en cuenta con la eeprom es que tiene vida limitada. soporta un número de escrituras limitado (aproximadamente 100.000). así que haz cálculos de cuánto te puede durar la eeprom teniendo en cuenta el número de escrituras (leer, todo lo que quieras). por ejemplo, si haces una escritura por hora, unos 11 años.
en tu caso has metido más de cien escrituras por cada ciclo de loop, lo que significa que en aproximadamente mil ciclos de loop te habrás cargado la eeprom. no la puedes tratar como si fuera una memoria ram normal. en tu caso, si lo que quieres es recordar dónde estaba el servo al cortarse la corriente, lo que deberías hacer es un circuito que detecte que se ha cortado la corriente, y tenga una reserva de energía suficiente para guardar en eeprom al detectar la falta de corriente.
lo primero que debes hacer es cambiar el enfoque que tienes de uso de eeprom para reducir tus escrituras. lo más probable es que hayas llegado "fundir" la posición de memoria 1, pero si guardas en otra posición distinta tal vez sí quede el dato grabado.
saludos.


Arduino Forum > International > Español (Moderators: surbyte, Hector_A) > Como guardar posición de servomotor en memoria eeprom


arduino

Comments