InputSerialServo.ino
Aller à la navigation
Aller à la recherche
// extrait de Arduino, a Quick Start Guide, Maik Schmidt
// chap. 10, pp. 211 et sequ.
// utilisation du moniteur seriel
// pour donner des angles au servo
// testé avec un "micro servo 9g"
// bug?: ne répond pas aux valeurs au-dessus de 99 degrés
// 15.4.2012
// @atelierpdf.com
// bibliothèque d'arduino
#include <Servo.h>
// definitions de constantes
const unsigned int MOTOR_PIN = 9;
const unsigned int MOTOR_DELAY = 15;
const unsigned int SERIAL_DELAY = 5;
const unsigned int BAUD_RATE = 9600;
//initialisation de l'objet Servo
Servo servo; // <label id="code.motors.servo"/>
void setup() {
// initialisation du moniteur
Serial.begin(BAUD_RATE);
// port du servo
servo.attach(MOTOR_PIN); // <label id="code.motors.servo_attach"/>
delay(MOTOR_DELAY);
// premier message au servo
servo.write(1);
delay(MOTOR_DELAY);
}
void loop() {
const int MAX_ANGLE = 4; // original value 3... seems to solve the angle bug
// la chaine "string" doit pouvoir contenir jsuqu'à 5 caractères
char degrees[MAX_ANGLE + 1]; // <label id="code.motors.degrees"/>
// si le moniteur sériel est ouvert
if (Serial.available()) {
int i = 0;
while (Serial.available() && i < MAX_ANGLE) {
// on saisit le chiffre
const char c = Serial.read();
if (c != -1 && c != '\n')
degrees[i++] = c;
delay(SERIAL_DELAY);
}
// on se place au début de la chaine
degrees[i] = 0;
// on affiche la valeur saisie
Serial.print(degrees);
Serial.println(" degrees.");
// et on l'envoie au servo en traduisant les asci en entiers
servo.write(atoi(degrees)); // <label id="code.motors.servo_write"/>
delay(MOTOR_DELAY);
}
}