Go Down

Topic: Brazo repite movimientos guardado en la memoria Eeprom (Read 1 time) previous topic - next topic

wilhelmk9

hola amigos tengo un problema tengo que hacer un brazo que repita los movimientos, con un potenciometro le digo a que posiciones ir y con un swich gravo el movimiento, con otro reproduzco el movimiento y con otro borro la memoria eeprom encontre un codigo funte que si funciona :) y me deja guardar los movimientos el problema esque es solo para 1 servo motor y yo nesecito 4 mas y no se como programarlo ya lo intente de varias maneras y no me funciona siempre me sale error o si no en mi arduino no funciona porfavor ayudenme aqui le dejo el codigo

#include <Servo.h>
#include <EEPROM.h>
#define Max 487     
#define Min 135     
int grabaBotPin = 2;
int ejecBotPin = 5;
int servoPin = 9;
int resetPin = 6;
int feedbackPin = A0;
int ledPin = 13;
int addr;
Servo myServo;

void setup() {
  Serial.begin(9600);
  pinMode(grabaBotPin, INPUT); digitalWrite(grabaBotPin, HIGH);
  pinMode(ejecBotPin, INPUT); digitalWrite(ejecBotPin, HIGH);
  pinMode(resetPin, INPUT); digitalWrite(resetPin, HIGH);
  pinMode(ledPin, OUTPUT);
  pinMode(feedbackPin, INPUT);
}

void loop() {
if(digitalRead(resetPin) == LOW){          //pone a 255 toda la memoria EEPROM
   
  for(addr=0; addr<=512; addr++){ EEPROM.write(addr, 255); }   
  addr = 0;
 
}   
if (digitalRead(grabaBotPin)==LOW) {       //Graba posiciones del servo
   delay(100);
   grabaServo(servoPin, feedbackPin);
}
  if (digitalRead(ejecBotPin)==LOW) {       //Ejecuta en el servo lo grabado en la EEPROM
   delay(400);
   ejecutaServo(servoPin, ejecBotPin);
}
}

void ejecutaServo(int servoPin, int botonPin) {
  addr = 0;
  myServo.attach(servoPin);
  while (digitalRead(botonPin)) {   
    int dato = EEPROM.read(addr);
    if (dato == 255) break;                       //Detecta final de datos y termina
    dato = map(dato, 0, 254, 0, 180);             //Ajusta a valores posibles en servo
    myServo.write(dato);
    delay(1500);
    addr++;
    if (addr == 512) break;
  }
  myServo.detach();
  delay(300);
}

void grabaServo(int servoPin, int analogPin) {
  digitalWrite(ledPin, HIGH);
  int dato = analogRead(feedbackPin);
  if (dato < Min) dato = Min; if (dato > Max) dato = Max;  //Limita valores
  dato = map(dato, Min, Max, 0, 254);                      //Ajusta a valores posibles en EEPROM
  EEPROM.write(addr, dato);
  addr++;
  digitalWrite(ledPin, LOW);
  delay(300);




este codigo funciona para 1 solo motor y yo nesecito que funcione para 4 motores mas y cada uno con su potenciometro para diferentes movimientos y pueda grabarlos


Jopapa

Si, el código (con origen y autor borrado) y la foto están copiados de mi página.

http://www.jopapa.me/servofeedback.html

La solución muy simple, divide la EEPROM en cinco segmentos, uno para cada servo.

Jopapa
www.jopapa.me

wilhelmk9

gracias un amigo me paso esa imagen me disculpo no sabia que era tu trabajo gracias

Jopapa

Jopapa
www.jopapa.me

manel54

Hola Jopapa, podrias enviarme a mi tambien la informacion que le has enviado a wilhelmk9?

Gracias anticipadas, un saludo

Jopapa

La respuesta es simplemente usar el código que tengo publicado y si quieres más servos, pues usas segmentos de la memoria del Arduino para cada uno.  Del 1 al 100 parauno, de 101 al 200 para otro y así.
Jopapa
www.jopapa.me


Go Up