problème avec servo qui ne prend pas un bon départ

Bonjour j’ai un problème avec un servo qui ne prend pas un bon départ.
J’aimerai qu’il garde une position fixe toujours la même à chaque démarrage arduino.
Malgré que j’ai bien initialisé l’angle à zero au départ il ne pivote à droite que de 90° en appuyant sur le bouton AV puis il s’inverse à gauche de 180° là il est en bonne position.
Ensuite j’appuie sur le bouton AR et il pivote de 180° à droite c’est toujours bon et alors le processus se déroule normalement si ce n’est que je dois appuyer plus longtemps sur le bouton AV pour exécuter l’ordre alors que le bouton arrière je le touche sans insister et l’action est immédiate.
Le code est ci-dessous, auriez-vous une idée pour résoudre ce problème. Merci

#include <Servo.h>
int pushButton = 2;
int pushButton2 = 3;
Servo myservo;  // création de l'objet myservo 

int pin_servo = 9;       // Pin sur lequel est branché le servo
int pos = 0;             // variable permettant de conserver la position du servo
int angle_initial = 0;   //angle initial
int angle_final = 180;   //angle final
int increment = 1;       //incrément entre chaque position
bool angle_actuel = false;//Envoi sur le port série la position courante du servomoteur

void setup() {
  Serial.begin(9600);                       
  while(!Serial){;} 
  myservo.attach(pin_servo);  // attache le servo au pin spécifié sur l'objet myservo
  pinMode(pushButton, INPUT);
  pinMode(pushButton2, INPUT);
 
}

void loop() {
  int buttonState = digitalRead(pushButton);
//Serial.println(buttonState);
  delay(1); 
if (buttonState == HIGH)
   {
  Serial.println("Marche AV");
  // Fait bouger le bras de 0° à 180°
  
  for (pos = angle_initial; pos <= angle_final; pos += increment) { // Déplace le servo de 0 à 180 degréespar pas de 1 degrée 
    myservo.write(pos);              // Demande au servo de se déplacer à cette position angulaire
    delay(30);                       // Attend 30ms entre chaque changement de position
   if (angle_actuel) {
        Serial.println(myservo.read());
    }
  }
   }

  int buttonState2 = digitalRead(pushButton2);
//Serial.println(buttonState2);
  delay(1);  
  if (buttonState2 == HIGH)
   {
  Serial.println("Marche AR"); 
  
  // Fait bouger le bras de 180° à 0° 
  for (pos = angle_final; pos >= angle_initial; pos -= increment) { // Fait le chemin inverse
    myservo.write(pos);              
    delay(30);   
    if (angle_actuel) {
        Serial.println(myservo.read());
    }
  }
   }
}

Dans loop tu ne fais rien tant qu'un bouton n'est pas appuyé. Donc fatalement ton servo ne bouge pas au départ.
Si tu veux que ton servo démarre dans une position particulière le plus simple c'est de le faire dans setup()
As-tu des pullups externent sur les boutons?

Si justement au départ il fait un quart de tour pour se placer en zéro sans aucune action de ma part.
Oui j'ai 2 pull up externe avec une résistance de 10k pour chaque.

bonjour

en ce qui concerne la différence marche avant , marche arrière et

afin de vous assurer que ce n'est pas un problème matériel ,

vous pouvez vérifier en inversant dans le programme

1°) les pins 2 et 3 (une seule est affublé du petit signe ~ )..

2°) pushButton et pushButton2 (oxydation sur micro Switch ou particularité du cervo)

didiersee:
Si justement au départ il fait un quart de tour pour se placer en zéro sans aucune action de ma part.

ça, c'est le fonctionnement normal de Servo à l'initialisation il se place au neutre (0°).
Si tu veux placer ton servo dans une positon particulière il faut faire un Servo.write() après Servo.Attach() avec la position que tu veux lui voir prendre.

Merci fdufnews j'ai modifié le code comme indiqué dans votre poste et j'ai modifié la condition if pour ne pas exécuter la marche AV puisque je fais un un servo.write à180°. j'ai évidemment une erreur pcq maintenant le servo va à 180° puis revient et ne s'arrête plus sans aucune action de ma part mon code est c-dessous.
Peut-être pourriez-vous le corriger.
Merci

void setup() {
  Serial.begin(9600);                       
  while(!Serial){;} 
  myservo.attach(pin_servo);  // attache le servo au pin spécifié sur l'objet myservo
  myservo.write(180);
  pinMode(pushButton, INPUT);
  pinMode(pushButton2, INPUT);
 
}

void loop() {
  int buttonState = digitalRead(pushButton);
//Serial.println(buttonState);
  delay(1); 
if ((buttonState == HIGH)&&(angle_initial != 180));
   {
  Serial.println("Marche AV");

Peut-être qu’avec le code complet on y verrait plus clair

Vous avez raison et grâce à votre aide tout fonctionne correctement.
Donc en pratique je veux que mon servo reste à la position où il est au démarrage puis j’appuie une fois sur le bouton il fait 180° il reste à cette position 3 secondes puis il revient à son point de départ.

Encore merci pour votre aide tout fonctionne, voici le code.

/*mon servo reste à la position où il est à la mise sous tension puis j’appuie une fois sur le bouton 
il fait 180° il reste à cette position pendant 3 secondes puis il revient à son point de départ.*/


#include <Servo.h>
int pushButton = 2;

Servo myservo;  // création de l'objet myservo

int pin_servo = 9;       // Pin sur lequel est branché le servo
int pos = 0;             // variable permettant de conserver la position du servo
int angle_initial = 0;   //angle initial
int angle_final = 180;   //angle final
int increment = 1;       //incrément entre chaque position
bool angle_actuel = false;//Envoi sur le port série la position courante du servomoteur

void setup() {
  Serial.begin(9600);                       
  while(!Serial){;}
  myservo.attach(pin_servo);  // attache le servo au pin spécifié sur l'objet myservo
  myservo.write(pos);
  pinMode(pushButton, INPUT);
 
 
}

void loop() {
  int buttonState = digitalRead(pushButton);
//Serial.println(buttonState);
  delay(1);
if (buttonState == HIGH)
   {
  Serial.println("Marche AV");
  // Fait bouger le bras de 0° à 180°
 
  for (pos = angle_initial; pos <= angle_final; pos += increment) { // Déplace le servo de 0 à 180 degréespar pas de 1 degrée
    myservo.write(pos);              // Demande au servo de se déplacer à cette position angulaire
    delay(30);                       // Attend 30ms entre chaque changement de position
   if (angle_actuel) {
        Serial.println(myservo.read());
    }
  }
    delay(3000);// revient à sa position après 3 secondes
    
    // Fait bouger le bras de 180° à 0°
    Serial.println("Marche AR");
   for (pos = angle_final; pos >= angle_initial; pos -= increment) { // Fait le chemin inverse
    myservo.write(pos);             
    delay(30);   
    if (angle_actuel) {
        Serial.println(myservo.read());
    }
  }
   
   }
}