Problème de code pour le contrôle de 2 servomoteurs

Bonjour,

Je travaille actuellement sur le contrôle de la position d’une webcam grâce à deux servomoteurs depuis un site web, pour se faire j’utilise une carte Arduino Uno qui contrôle les servomoteurs grâce à des informations reçu dans le port Serie envoyé par Processing.

Le problème c’est que quand la position des servomoteurs sont envoyé et qu’ils se mettent à la bonne position, de temps en temps un des servomoteur, retourne à 0 avant de reprendre sa position. (Je n’ai pas ce problème quand j’envoi manuellement la position des servomoteurs dans le port Serie)

Avez-vous une idée pour remédier à ce problème ? Merci d’avance pour votre aide.

Les valeurs envoyé dans le port Serie sont du style xx120yy80

Mon code :

#include <Servo.h> // librairie pour servomoteur

const int BservoX = 3; //déclaration constante des broches des servo
const int BservoY = 6;

int ReceptionOctet=0; // variable de stockage des octets reçus par port série
 
Servo servoX, servoY;  // creation des objets servo pour les controler

char XouY = 0; //variable permettant de mettre la valeur du servo dans le bon servo
               // si XouY=1 alors ça va dans valeurX si XouY=2 ça va dans valeurY

int valeurX = 105, valeurY = 105; //variable definissant la position de chaques servo


void setup() 
{ 
  servoX.attach(BservoX);  // attaches the servo on pin 3 to the servo object 
  servoY.attach(BservoY);  // attaches the servo on pin 7 to the servo object
  
  Serial.begin(9600); // initialise connexion série à 9600 bauds
  
  pinMode(BservoX, OUTPUT); //met la broche en sortie
  pinMode(BservoY, OUTPUT); //met la broche en sortie
  
  servoX.write(valeurX); //mets le sevoX à la position angulaire égale à valeurX
  servoY.write(valeurY); //mets le sevoY à la position angulaire égale à valeurY
  
}



void loop()
{
  if (Serial.available()>0) // si caractère dans la file d'attente
  {
    while (Serial.available()>0) // tant que buffer pas vide pour lire d'une traite tous les caractères reçus
    {
      ReceptionOctet= Serial.read(); // renvoie le 1er octet présent dans la file attente série (-1 si aucun) 
      ReceptionOctet=ReceptionOctet-48; // transfo valeur ASCII en valeur décimale
      
      if (ReceptionOctet==73)
        {
          XouY = 2;
          valeurY = 0 ;
         }
      else if (ReceptionOctet==72)
        {
          XouY = 1;
          valeurX = 0;
         }
       
       else if ((ReceptionOctet>=0)&&(ReceptionOctet<=9))
       {
        if(XouY == 1) valeurX = (valeurX*10)+ReceptionOctet;
        else if(XouY == 2) valeurY = (valeurY*10)+ReceptionOctet;
        }
       delay(1); // pause pour laisser le temps au Serial.available de recevoir les caractères
     } // fin while
     
     XouY = 0;
     
     if (valeurX>=180) valeurX=180;
     if (valeurX<=30) valeurX = 30;
     if (valeurY>=180) valeurY=180;
     if (valeurY<=30) valeurY = 30;

     servoX.write(valeurX); //mets le sevoX à la position angulaire égale à valeurX
     servoY.write(valeurY); //mets le sevoY à la position angulaire égale à valeurY
     delay (1000); //entre chaque changement de position
    }
      
}