Soy nuevo en esto y me he quedado atascado en un proyecto con servomotores.
El proyecto en cuestión es un Follow focus para controla el enfoque, el zoom y el diafragma de un objetivo mediante servomotores.
Hasta el momento he conseguido controlar los 3 servos mediante potenciòmetros sin problema. (excepto que los servos emiten un leve zumbido cuando se quedan quietos en una posición, aunque no siempre lo hacen, pero esto lo achaco a que los potenciòmetros son de mala calidad).
Llegados a este punto, mi intención es guardar las posiciones de uno de estos servos (por el momento solo en uno) en 4 pulsadores que determinan 4 memorias. Todo esto mediante un pulsador de REC que permite asignar cada una de estas memorias. Es decir:
Pulsando el botón REC, se guarda la posición del servo, y pulsando a continuación uno de los 4 botones de memoria, se asigna la posición del servo a dicho botón, para poder llamar al servo a esa posición en cualquier momento, de forma permanente hasta que se repita el proceso pulsando el mismo botón de memoria.
También quiero que, estando activa la memoria 1, por ejemplo, si pulso la memoria 2, esta toma el control, y así sucesivamente. Y que pulsando la misma memoria activa una segunda vez, se devuelva el control a los potenciometros. Pero esto ya es un problema que intentaré solucionar a su debido tiempo.
He leído acerca de la EEPROM, pero no estoy seguro de como funciona.
Mas adelante colgaré el código, ya que ahora es un amasijo de cosas desordenadas.
Este es el código, simplificado con solo un servomotor.
El movimiento del servo funciona correctamente mediante el potenciòmetro, y he indicado los distintos campos necesarios para identificar los pulsadores de REC y 2 de las memorias, solo faltaría la parte del código donde se gravan las posiciones y se asignan a dichas memorias.
#include <Servo.h>
Servo servoFollow; //Asigno un nombre al servo
int pot1=0; //Pin analogo al que conecto el potenciometro
int val1; //Valor que lee el puerto analogo
int REC=9; //pines digitales a los que conecto los pulsadores
int memo1=10;
int memo2=11;
int valREC=0; //valores para identifical el valor de los pulsadores
int valmemo1;
int valmemo2;
void setup()
{
pinMode(REC,INPUT); //declaro el pin de los pulsadores como entrada
pinMode(memo1,INPUT);
pinMode(memo2,INPUT);
servoFollow.attach(2); //pin al que conecto el servo
}
void loop()
{
val1=analogRead(pot1);
val1=map(val1, 0, 1023, 0, 180); //traduce la lectura analoga (0, 1023) a grados (0º, 180º)
servoFollow.write(val1); //mueve el servo según la lectura análoga
delay(100); /*tiempo para que el servo se mueva (aunque la función delay hay que
substituirla, ya que afecta a todo el programa, pero eso mas adelante*/
valREC=digitalRead(REC); //indicamos que lea el valor del pulsador
valmemo1=digitalRead(memo1);
valmemo2=digitalRead(memo2);
/*>>>>>>>>>> Aquí irían las funciones de los pulsadores para guardar las
posiciones del servo en las memorias.*/
}
Gracias por tu respuesta.
Si que me leí los ejemplos que trae Arduino sobre la EEPROM, pero los desestimé demasiado deprisa dado mi limitado conocimiento sobre programación, pero dándoles ahora un nuevo vistazo, creo haber entendido su funcionamiento.