Pages: [1]   Go Down
Author Topic: gérer un servo moteur  (Read 680 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Newbie
*
Karma: 0
Posts: 2
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Cergy
Offline Offline
Full Member
***
Karma: 0
Posts: 137
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

Tous les jours, je roule en Electrique
Arretons de polluer !

Moi & mon Ardu

0
Offline Offline
Newbie
*
Karma: 0
Posts: 2
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Pages: [1]   Go Up
Jump to: