Go Down

Topic: gérer un servo moteur (Read 921 times) previous topic - next topic

huiledecoupe

Bonjour à tous,
voilà ... je débute avec la carte Arduino et la programmation en générale .
Je me suis lancé dans un projet de jeu pour enfant pour lequel j'ai besoin de gérer un servo moteur (90°) grâce à un signal Tout ou rien d'une entrée digitale
voilà ce que je souhaite obtenir:
pour toute impulsion (HIGH) sur l'entrée digitale, je voudrais que le servo se déplace de 90/4° pour qu'en fait, après 4 impulsions sur l'entrée digitale, le servo arrive à son fin de course. On appuie ensuite sur reset et le servo reprend sa position de départ . Alors ...
j'ai fais le programme suivant en utilisant la bibliothèque Servo de l'Arduino :

#include <Servo.h>

Servo myservo;
int pos=0;
int inPin=2;
int val=0;

void setup()
{
 myservo.attach(9);
}

void loop()
{
 val=digitalRead(inPin);
 if (val == HIGH)
 {
   myservo.writeMicroseconds(50);
 }
}

voila... sauf qu'avec ce programme, le servo réagit bien avec l'entrée digital mais il va directement en fin de course et "force". le reset , lui fonctionne bien
voilà... help

Bonjour,
je me trompe peut-être, mais la fonction loop boucle.
Donc, tant que ton niveau est haut sur inPin, tu fais tourner ton servo, ce qui fait qu'il va rapidement se retrouver en butée si l'impulsion d'entrée est trop longue.
Une solution serait peut-être de passer par les interruptions, en déclenchant sur un front.

A la place de servo.writeMicroseconds, j'utiliserais plutot servo.write(valeur), qui permet de fixer un angle entre 0 et 180°. C'est plus facile pour choisir un angle.
Tous les jours, je roule en Electrique
Arretons de polluer !

Moi & mon Ardu

huiledecoupe

Merci Vincelge
je vais étudier les interruptions et tester avec la fonction servo.write.

en fait, dans mon programme, j'ai l'impression que l'état de l'entrée digitale est "mémorisé" mais si je fais une impulsion très courte sur l'entrée... le servo art plein pot en fin de course
d'où l'idée d'utiliser le front montant me parait judicieuse

Go Up