Paso 6: Software (sketch de Arduino)
El código de Arduino tiene dos funciones:
- Registrar las entradas analógicas de los potenciómetros de servos (botón de registro)
- Funcionan los servos con los valores registrados (botón PLAY)
Notas:
- Los valores registrados se almacenan en la memoria EEPROM de la Arduino - limita la grabación (Añadir tarjeta SD lo solucionará).
- El bosquejo le pide los valores registrados y el jugado, en tiempo real, en el MONITOR SERIAL, pero esto no es necesario para el trabajo del bosquejo.
- Buen tutorial para servo de regeneración análoga puede encontrarse aquí
El Arduino sketch:
Sketch de Arduino descargar
(http://www.KeerBot.com)
Código de ejemplo para grabar y reproducir el movimiento del servo con un servo analógico comentarios
5 Dec2013, utilizando manualmente hackeado servos
#include < Servo.h >
#include < EEPROM.h >
#define CALIB_MAX 512
#define CALIB_MIN 100
#define SAMPLE_DELAY 25 / / en ms, 50ms parece buena
recordButtonPin de uint8_t = 12;
playButtonPin de uint8_t = 7;
uint8_t uno = 9, dos = 10, tres = 11;
Señor de uint8_t = A0, TwoIn = A1, ThreeIn = A2;
uint8_t ledPin = 13;
Servo myServo1, myServo2, myServo3;
void setup() {}
Serial.Begin(9600);
pinMode (recordButtonPin, entrada);
digitalWrite (recordButtonPin, HIGH);
pinMode (playButtonPin, entrada);
digitalWrite (playButtonPin, HIGH);
pinMode (ledPin, salida);
uint16_t addr = 0;
Serial.println ("Servo RecordPlay, 3 la versión Servos");
Serial.println ("por http://www.KeerBot.com");
}
void loop() {}
Si (! {digitalRead(recordButtonPin))}
Delay(10);
esperar por
mientras (! digitalRead(recordButtonPin));
Delay(20);
Publicado OK!
Serial.println("Recording");
uint16_t addr = 0;
digitalWrite (ledPin, HIGH);
pinMode (Señor, entrada);
pinMode (TwoIn, entrada);
pinMode (ThreeIn, entrada);
mientras (digitalRead(recordButtonPin)) {}
uint16_t a = analogRead(OneIn);
uint16_t b = analogRead(TwoIn);
c uint16_t = analogRead(ThreeIn);
Serial.Print ("analógico de lectura:"); Serial.Print(a); Serial.Print (","); Serial.Print(b); Serial.Print (","); Serial.Print(c); Serial.Print (",");
uno
Si (un < CALIB_MIN) a = CALIB_MIN;
Si (a > CALIB_MAX) a = CALIB_MAX;
mapa = (a, CALIB_MIN, CALIB_MAX, 0, 255);
dos
Si (b < CALIB_MIN) b = CALIB_MIN;
Si (b > CALIB_MAX) b = CALIB_MAX;
b = mapa (b, CALIB_MIN, CALIB_MAX, 0, 255);
tres
Si (c < CALIB_MIN) c = CALIB_MIN;
Si (c > CALIB_MAX) c = CALIB_MAX;
c = mapa (c, CALIB_MIN, CALIB_MAX, 0, 255);
Serial.Print ("->"); Serial.Print(a); Serial.Print (","); Serial.Print(b); Serial.Print (","); Serial.println(c);
EEPROM.write(addr, a);
addr ++;
EEPROM.write (addr, b);
addr ++;
EEPROM.write (addr, c);
addr ++;
Si (addr == 512) break;
Delay(SAMPLE_DELAY);
}
Si (addr! = 512) EEPROM.write (addr, 255);
digitalWrite (ledPin, LOW);
Serial.println("Done");
Delay(250);
}
Si (! {digitalRead(playButtonPin))}
Delay(10);
esperar por
mientras (! digitalRead(playButtonPin));
Delay(20);
Publicado OK!
Serial.println("Playing");
uint16_t addr = 0;
myServo1.attach(one);
myServo2.attach(two);
myServo3.attach(three);
mientras (digitalRead(playButtonPin)) {}
Uno
uint8_t x = EEPROM.read(addr);
Serial.Print ("leer EE:"); Serial.Print(x);
Si (x == 255) break;
x = mapa (x, 0, 0, 254, 180);
Serial.Print (","); Serial.Print(x); Serial.Print (",");
myServo1.write(x);
addr ++;
Dos
x = EEPROM.read(addr);
Serial.Print(x); Serial.Print (",");
Si (x == 255) break;
x = mapa (x, 0, 0, 254, 180);
Serial.Print ("->"); Serial.Print(x); Serial.Print (",");
myServo2.write(x);
addr ++;
Tres
x = EEPROM.read(addr);
Serial.Print(x);
Si (x == 255) break;
x = mapa (x, 0, 0, 254, 180);
Serial.Print (","); Serial.Print(x); Serial.println (",");
myServo3.write(x);
Delay(SAMPLE_DELAY);
addr ++;
Si (addr == 512) break;
}
Serial.println("-");
Serial.println ("hecho leyendo EE");
myServo1.detach();
myServo2.detach();
myServo3.detach();
Delay(250);
}
}