Hola buenas noches soy nuevo en esto, mi siguiente duda es la siguiente lo que quiero hacer es grabar 5 posiciones del servomotor y después de que haya terminado te grabarlas reproducirlas en secuencia y que por medio de leds me avise que posición se esta ejecutando
saludos
#include <Servo.h>
#include <EEPROM.h>
#define Max 1023 //Valor máximo del potenciómetro
#define Min 0 //Valor mínimo del potenciómetro
int Grabar = 2; //Pulsador conectado al pin digital 2
int Reproducir = 5; //Pulsador conectado al pin digital 5
int Resetear = 6; //Pulsador conectado al pin digital 6
int servoPin = 9; //Servomotor conectado al pin digital 9
int POT = A5; //Potenciómetro conectado al pin análogo 7
int ledPin = 13; //LED conectado al pin digital 13
int addr;
Servo myServo;
void setup() {
Serial.begin(9600);
pinMode(Grabar, INPUT); digitalWrite(Grabar, HIGH);
pinMode(Reproducir, INPUT); digitalWrite(Reproducir, HIGH);
pinMode(Resetear, INPUT); digitalWrite(Resetear, HIGH);
pinMode(ledPin, OUTPUT);
pinMode(POT, INPUT);
myServo.attach(servoPin);
}
void loop()
{
if(digitalRead(Reproducir) == HIGH)
{
int valorPOT = analogRead(POT);
int angulo = map(valorPOT,0,1023,0,180);
myServo.write(angulo);
}
if(digitalRead(Resetear) == LOW)
{
Serial.println("Borrando EEPROM, espere...");
for(addr=0; addr<=512; addr++){ EEPROM.write(addr, 255); }
addr = 0;
Serial.println("EEPROM borrada");
}
if (digitalRead(Grabar)==LOW)
{
delay(100);
grabaServo(servoPin, POT);
}
if (digitalRead(Reproducir)==LOW)
{
delay(400);
ejecutaServo(servoPin, Reproducir);
}
}
//--------Ejecuta posiciones almacenadas en la memoria-------------
void ejecutaServo(int servoPin, int botonPin) {
addr = 0;
Serial.println("Activando Servo");
myServo.attach(servoPin);
while (digitalRead(botonPin))
{
int dato = EEPROM.read(addr);
Serial.print("Lee EE: "); Serial.print(dato);
if (dato == 255) break;
dato = map(dato, 0, 254, 0, 180);
Serial.print(" -> "); Serial.println(dato);
myServo.write(dato);
delay(1500);
addr++;
if (addr == 512) break;
}
Serial.println(" y termina");
delay(300);
}
//--------------Almacena posiciones en la memoria----------------
void grabaServo(int servoPin, int analogPin) {
Serial.println("Grabando posicion");
digitalWrite(ledPin, HIGH);
int dato = analogRead(POT);
Serial.print("Valor analogico: "); Serial.print(dato);
if (dato < Min) dato = Min; if (dato > Max) dato = Max;
dato = map(dato, Min, Max, 0, 254);
Serial.print(" -> "); Serial.println(dato);
EEPROM.write(addr, dato);
addr++;
digitalWrite(ledPin, LOW);
Serial.println("Grabada posicion");
delay(300);
}