Bonjour Guillaumevlv62,
La bonne méthode est de gérer la direction de l'aiguille (directe ou déviée) : comme il n'y a que deux possibilités, un booléen est parfait, par exemple true si dévié et false sinon. Il faut aussi garder l'état antérieur de l'aiguille et on effectue le mouvement que si la commande donne un état différent de l'état antérieur.
Exemple : au départ (initialisation), l'aiguille A est directe : etat_A = false et old_etat_A = false
On veut manoeuvrer l'aiguille A en appuyant sur un BP ou automatiquement. A l'appui du BP, etat_A devient true (on veut que l'aiguille dévie). Donc etat_A est différent de old_etat_A : dans ce cas, on envoie l'impulsion sur le bon solénoïde.
Une fois que c'est fait, il ne faut pas oublier de faire old_etat_A = etat_A pour mémoriser le nouvel état de l'aiguille. A la boucle suivante de la fonction loop, il n'y aura pas de mouvement, jusqu'à ce qu'on change à nouveau etat_A.
Etc.
Ceci va vous faire réviser les variables booléennes, et les tests de comparaison. Pour le reste, vous y êtes presque.
Vous pouvez aussi mettre la commande des solénoïdes à l'intérieur d'une routine qui traite de l'appui sur le BP (dans ce cas, l'impulsion n'a lieu que si BP appuyé) :.
if(pinBP == LOW) {
etat_A = !etat_A; // l'etat devient son opposé parce que BP appuyé
if(etat_A) {
// envoyer impulsion sur solénoïde 1
}
if(!etat_A) {
// envoyer impulsion sur solénoïde 2
}
}
L'appui sur le BP doit être traité contre les rebonds (une petite temporisation devrait suffire).