Étape 6: Logiciel (Arduino croquis)
Le code de l’Arduino a deux fonctions :
- Enregistrer les entrées analogiques de potentiomètres servos (bouton Enregistrer)
- Exploiter les servos avec les valeurs enregistrées (bouton PLAY)
Notes:
- Les valeurs enregistrées sont stockées dans la mémoire EEPROM de l’Arduino - limite l’enregistrement (ajout carte SD permettra de la résoudre).
- L’esquisse invite les valeurs enregistrées et les valeurs jouées, en temps réel, au SERIAL MONITOR, mais cela n’est pas nécessaire pour le travail de l’esquisse.
- Bon tutoriel pour servo analogique commentaires se trouvent ici
Croquis de l’Arduino:
Télécharger Arduino croquis
(http://www.KeerBot.com)
Exemple de code d’enregistrement et de lecture de mouvements du servo avec un servo analogique commentaires
5 Dec2013, en utilisant manuellement piraté servos
#include < Servo.h >
#include < EEPROM.h >
#define CALIB_MAX 512
#define CALIB_MIN 100
#define SAMPLE_DELAY 25 / / ms, 50ms semble bon
uint8_t recordButtonPin = 12 ;
uint8_t playButtonPin = 7 ;
uint8_t un = 9, deux = 10, trois = 11 ;
uint8_t avoué = A0, TwoIn = A1, ThreeIn = A2 ;
uint8_t ledPin = 13 ;
Servo myServo1, myServo2, myServo3 ;
void setup() {}
Serial.Begin(9600) ;
pinMode (recordButtonPin, entrée) ;
digitalWrite (recordButtonPin, HIGH) ;
pinMode (playButtonPin, entrée) ;
digitalWrite (playButtonPin, HIGH) ;
pinMode (ledPin, sortie) ;
uint16_t addr = 0 ;
Serial.println ("Servo RecordPlay, 3 version de Servos") ;
Serial.println ("de http://www.KeerBot.com") ;
}
void loop() {}
Si (! digitalRead(recordButtonPin)) {}
Delay(10) ;
attendre pour libéré
tandis que (! digitalRead(recordButtonPin)) ;
Delay(20) ;
OK libéré !
Serial.println("Recording") ;
uint16_t addr = 0 ;
digitalWrite (ledPin, HIGH) ;
pinMode (entrée, avoué) ;
pinMode (entrée, TwoIn) ;
pinMode (entrée, ThreeIn) ;
tandis que (digitalRead(recordButtonPin)) {}
uint16_t a = analogRead(OneIn) ;
uint16_t b = analogRead(TwoIn) ;
uint16_t c = analogRead(ThreeIn) ;
Serial.Print ("analog lire:") ; Serial.Print(a) ; Serial.Print (",") ; Serial.Print(b) ; Serial.Print (",") ; Serial.Print(c) ; Serial.Print (",") ;
un
Si (une < CALIB_MIN) un = CALIB_MIN ;
Si (un > CALIB_MAX) un = CALIB_MAX ;
une carte = (a, CALIB_MIN, CALIB_MAX, 0, 255) ;
deux
Si (b < CALIB_MIN) b = CALIB_MIN ;
Si (b > CALIB_MAX) b = CALIB_MAX ;
b = carte (b, CALIB_MIN, CALIB_MAX, 0, 255) ;
trois
Si (c < CALIB_MIN) c = CALIB_MIN ;
Si (c > CALIB_MAX) c = CALIB_MAX ;
c = carte (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, basse) ;
Serial.println("Done") ;
Delay(250) ;
}
Si (! digitalRead(playButtonPin)) {}
Delay(10) ;
attendre pour libéré
tandis que (! digitalRead(playButtonPin)) ;
Delay(20) ;
OK libéré !
Serial.println("playing") ;
uint16_t addr = 0 ;
myServo1.attach(one) ;
myServo2.attach(two) ;
myServo3.attach(three) ;
tandis que (digitalRead(playButtonPin)) {}
Un
uint8_t x = EEPROM.read(addr) ;
Serial.Print (« lu EE: ") ; Serial.Print(x) ;
Si (x == 255) break ;
x = carte (x, 0, 0, 254, 180) ;
Serial.Print (",") ; Serial.Print(x) ; Serial.Print (",") ;
myServo1.write(x) ;
addr ++ ;
Deux
x = EEPROM.read(addr) ;
Serial.Print(x) ; Serial.Print (",") ;
Si (x == 255) break ;
x = carte (x, 0, 0, 254, 180) ;
Serial.Print ("->") ; Serial.Print(x) ; Serial.Print (",") ;
myServo2.write(x) ;
addr ++ ;
Trois
x = EEPROM.read(addr) ;
Serial.Print(x) ;
Si (x == 255) break ;
x = carte (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 ("fait lecture EE") ;
myServo1.detach() ;
myServo2.detach() ;
myServo3.detach() ;
Delay(250) ;
}
}