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); } }