Go Down

Topic: Problème sur le code pour contrôler un servomoteur depuis un clavier (Read 2169 times) previous topic - next topic

XpBot

Bonjour,

je me remets doucement à l'arduino et actuellement je souhaite faire bouger un servomoteur depuis le clavier.

Je m'explique: Par défaut, le servo est à la position 0 et quand j'appuie sur la touche "d", il tourne d'un degré mais en fait il tourne entièrement donc qu'est ce que je dois changer?

Code: [Select]
#include <Servo.h>

Servo myservo; // create servo object to control a servo
int cc=0;
int angle=0;

void setup() {
 
  Serial.begin(9600);
  myservo.attach(9); // attaches the servo on pin 9 to the servo object
 
}

void loop() {
 
  if (Serial.available()>0){

      angle = Serial.read();
     
      if (angle=='d'){
       
        cc=cc+1;       
        myservo.write(cc);
        Serial.flush(); 
    }
     
                            }
}



merci


skywodd

essaye ça pour voir mais je garanti rien:
Code: [Select]
#include <Servo.h>

Servo myservo;
int cc = 0;

void setup() {
  Serial.begin(9600);
  myservo.attach(9);
}

void loop() {
  if (Serial.available() > 0){
      if(Serial.read() == 'd'){
        (cc > 180) ? cc = 0 : cc++;
        myservo.write(cc);
    }   
  }
}
Des news, des tutos et plein de bonnes choses sur http://skyduino.wordpress.com !

XpBot

merci pour la réponse,

non ca ne marche toujours pas comme je veux. il ne passe pas de 0 à 1° il fait 0 à 180° d'un coup

skywodd


merci pour la réponse,

non ca ne marche toujours pas comme je veux. il ne passe pas de 0 à 1° il fait 0 à 180° d'un coup

humm bizarre, c'est un quoi comme servo ?
Des news, des tutos et plein de bonnes choses sur http://skyduino.wordpress.com !

XpBot

Hitec HS-50

j'ai remodifié un peu le code pour avoir une rotation de 180° quand j'appuie sur une touche et je reviens à 0° quand j'appuie sur une autre mais le if pour la touche "e" ne fonctionne pas ....

Code: [Select]
#include <Servo.h>

Servo myservo;
int cc = 0;

void setup() {
  Serial.begin(9600);
  myservo.attach(9);
  myservo.writeMicroseconds(0);
}

void loop() {
  if (Serial.available() > 0){
      if(Serial.read() == 'd'){
          myservo.write(4000);}   
      if(Serial.read() == 'e'){
          myservo.write(0);}
  }
}

skywodd

Essaye l'exemple sweep voir si ton servo répond correctement :
http://www.arduino.cc/en/Tutorial/Sweep
Des news, des tutos et plein de bonnes choses sur http://skyduino.wordpress.com !

XpBot

oui mon servo fonctionne avec ce code, je vais me baser sur celui la pour la suite.

skywodd

Je viens de tester mon code avec un futuba S3003 il marche niquel ! je sais d'ou peut venir ton probléme (alimentation ? Durée d'impulsion ?).
Des news, des tutos et plein de bonnes choses sur http://skyduino.wordpress.com !

chicotore

le HS-50 c'est pas un servo numérique ? Le S3003 c'est de l'analogique c'est sur mais le HS-50 ?

C'est juste un souvenir de mon passé de modeliste, je me rappel qu'il y avait des servos numériques et des servos analogiques  :smiley-mr-green:

skywodd


le HS-50 c'est pas un servo numérique ? Le S3003 c'est de l'analogique c'est sur mais le HS-50 ?

C'est juste un souvenir de mon passé de modeliste, je me rappel qu'il y avait des servos numériques et des servos analogiques  :smiley-mr-green:

hu! j'y avais pas pensé ! Mais je crois bien que le hitec HS-50 est un analogique.
http://www.servodatabase.com/servo/hitec/hs-50
Des news, des tutos et plein de bonnes choses sur http://skyduino.wordpress.com !

Go Up