Bonjour,
Je viens de programmer un Arduino Mega pour gérer le mouvement de deux servos utilisés comme moteurs d'aiguillages lents pour les aiguilles 1a et 1b (les moteurs sont des DLY2de DLYmoteur).
Pour le moment, je les commande avec des caractères saisis sur le moniteurs série de l'ordi, à titre d'essai.
Quand le sketch démarre, tt est ok, mais après un premier mouvement, le servo est en position, mais continue le même petit bruit léger que quand il bouge.
Du coup, après avoir utilisé les 2 aiguillages, même sans mouvement, j'entends les servos qui continuent à "chanter" à l'arrêt.
Comment éviter cela ?
Mon code :
#include <Servo.h>
const byte dir_1a = 60; // Position ("angle") pour aig1a en voie directe
const byte dev_1a = 130; // Position ("angle") pour aig1a en voie déviée
const byte dir_1b = 60; // Position ("angle") pour aig1b en voie directe
const byte dev_1b = 130; // Position ("angle") pour aig1b en voie déviée
Servo moteur_aig_1a; // crée l’objet pour contrôler le servomoteur "moteur_aig_1a"
Servo moteur_aig_1b; // crée l’objet pour contrôler le servomoteur "moteur_aig_1b"
void setup()
{
Serial.begin(9600);
Serial.println("_________");
Serial.println("");
Serial.println("Démarrage (A pour Aig1a en voie déviée | Z pour Aig1a en voie directe | Q pour Aig1b en voie déviée | S pour Aig1a en voie directe)");
Serial.println("_________");
moteur_aig_1a.attach(9);
moteur_aig_1b.attach(10);
}
void loop()
{
if( Serial.available())
{
byte incomingByte = Serial.read();
if (incomingByte == 65) // Si on reçois un A du moniteur série
{
bouge_moteur(moteur_aig_1a, dev_1a); // On met Aig1a en voie déviée
}
else if (incomingByte == 90) // Si on reçois un Z du moniteur série
{
bouge_moteur(moteur_aig_1a, dir_1a); // On met Aig1a en voie directe
}
else if (incomingByte == 81) // Si on reçois un Q du moniteur série
{
bouge_moteur(moteur_aig_1b, dev_1b); // On met Aig1b en voie déviée
}
else if (incomingByte == 83) // Si on reçois un S du moniteur série
{
bouge_moteur(moteur_aig_1b, dir_1b); // On met Aig1b en voie directe
}
}
}
void bouge_moteur(Servo moteur, byte position)
{
if (position>moteur.read()) // Si l'angle final est supérieur à l'initial
{
for (int i = moteur.read() ; i < position ; i++) // On boucle de la position actuelle à la position demandée en incrémentant de 1
{
moteur.write(i); // On met le servo dans la position incrémentée
delay(20); // On attend 20 ms
}
}
else if (position<moteur.read()) // Si l'angle final est inférieur à l'initial
{
for (int i = moteur.read() ; i > position ; i--) // On boucle de la position actuelle à la position demandée en décrémentant de 1
{
moteur.write(i); // On met le servo dans la position décrémentée
delay(20); // On attend 20 ms
}
}
}
: