1
Composants / Re : PCA9685 et servos
« le: juin 18, 2022, 03:11:39 pm »
Bonjour,
Oui !
Oui !
Le forum LOCODUINO est consacré aux discussions ayant trait à l'utilisation de l'Arduino dans les automatismes et les animations pour le train miniature. Nous avons eu récemment quelques inscriptions de personnes ayant des projets plus généraux mais surtout inapplicables au train miniature. Si votre projet ou vos questions ne concernent pas le modélisme ferroviaire, ne vous inscrivez pas, vous perdriez votre temps et nous aussi.
Cette section vous permet de consulter les contributions (messages, sujets et fichiers joints) d'un utilisateur. Vous ne pourrez voir que les contributions des zones auxquelles vous avez accès.
attach / detach bien placésoui, pourquoi pas.
couper la tension d'alimentation du servo quand il a atteint sa positionon peut le faire en code Arduino ?
#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
}
}
}
: