fonctionnement ServoMoteur avec Bouton

Bonjour tout le monde, étant novice dans le domaine j’aurais aimer avoir de l’aide concernant le servomoteur alors enfaîte j’aimerai que quand j’appuie une seule fois sur un bouton le moteur irait de 0° à 90° puis reviendrait a 0° mais la je suis obliger de rester appuyer sur le bouton pour que le moteur aille dans la position demander, donc aurez vous une astuce ? Merci

Sinon voila ce que j’ai déjà

#include <Servo.h>

Servo myservo; 

const int bp = 3;

void setup()
{
myservo.attach(9);
pinMode(bp, INPUT);

}

void loop() 
{
          digitalRead(bp);  //lecture de l'entrée 
            if (bp==HIGH);           // si bouton activé 
  
myservo.write(90);
delay(500);
myservo.write(0);
delay(500);

 
}

Merci a vous

Bonjour , Laida85 ,

Avec le programme que tu as fait c'est normal , je vais te laisser explorer une solution , il faut que tu écrive un truc du genre :

if (bp==HIGH); // si bouton activé

myservo.write(90);

et if (bp==LOW); // si bouton désactivé

myservo.write(00);

avec du delay et le tout dans une boucle , le mieux pour apprendre c'est de tester , reviens vite nous donner des nouvelles .

Cordialement

Merci à toi je regarde ça !!

Pas de ; après la condition d'un if, sinon aucune instructions ne sera exécuté (en rapport avec le if)

Il faut mettre les instructions du if entre accolade

ahh merci a toi Jambe je n'arrivais plus a mettre des boucles mais voila pourquoi !

Mais le truc c'est que le moteur ne revient jamais en position 0° même après avoir tester avec "if/else" et que il faut toujours rester appuyer sur le bouton ... Merci pour vos réponse et de m'aider

Bonjour,

Il faut que tu testes quand le bouton vient d'être appuyé, c'est à dire qu'il faut que tu compare l'état du bouton à l'état précédent.

Genre ca ? car là je suis un peu perdu ...

void loop() 
{
  int test = digitalRead(bp); 
  if (bp==HIGH)
  {
    myservo.write(90);
    delay(500);
  }
  if (test != HIGH)
  {
    myservo.write(00);
    delay(500);
  }
}

il faut que tu testes le changement d'état du bouton, par exemple comme ça

void loop()
{
 static byte etatPrec=LOW;
 
 byte etat=digitalRead(bp);  //lecture de l'entrée
 if (etat!=etatPrec && etat==HIGH)
 {
   // on vient d'appuyer
  myservo.write(90);
   delay(1000);
  myservo.write(0);
 }
 etatPrec=etat;

 delay(10);
}

et je ne sais pas si le poblème vient de moi avec les branchements mais le moteur de reviens jamais en position 0°

Tu as bien mis une résistance de pull down sur ton bouton?

heuuu je crois que non

Soit tu mets un pulldown soit tu mets un pullup soit tu utilises le pullup interne dans ce cas il faut l'activer avec pinMode(bp, INPUT_PULLUP);

Si tu utilises un pullup, l'état du bouton est inversé (LOW quand appuyé).

non rien n'y fait je suis toujours obliger d’appuyer sur le bouton pour que le moteur tourne donc je suis perdu ...

Mets ton dernier programme ici Et ton schéma de câblage

voici mon programme

#include <Servo.h>

Servo myservo; 

const int bp = 3;

void setup()
{
myservo.attach(9);
 pinMode(bp, INPUT_PULLUP);
}

void loop()
{
 static byte etatPrec=HIGH;
 
 byte etat=digitalRead(bp);  //lecture de l'entrée
 if (etat!=etatPrec && etat==LOW)
 {
   // on vient d'appuyer
  myservo.write(90);
   delay(1000);
  myservo.write(0);
 }
 etatPrec=etat;

 delay(10);
}

et mon cablage

J'ai limpression que ton bouton coupe l'alim du servomoteur. Ton servo doit être alimenté en permanence

Bon merci a vous tout a l'aire de marcher !