#include <Servo.h>

Servo myservoZ;  // déclare le servo pour l'axe z

Servo myservoY; // déclare le servo pour l'axe y

int posZ = 90;    // pour la position initial 90°
int posY = 90;    // pour la position initial 90°
int message = 0;  //  par défaut message vaut 0
int posZZ;
int posYY;


void setup() {
  myservoZ.attach(2);  // servo z sur pin 2 
  myservoZ.write(posZ);  // va en position initial
  myservoY.attach(3);  // servo z sur pin 3
  myservoY.write(posY); // va en position initial
  Serial.begin(9600); 
}

void cam()  // fonction  
{
  if (Serial.available())  {   // si on recoit quelque chose du port serie
    message = Serial.read()-'0';  // on soustrait le caractère 0, qui vaut 48 en ASCII
    
    switch (message) {  // si message vaut
    case 1:  //  si message vaut 1 on tourne à droite
      posZZ = posZ + 10;  // on defini la nouvelle position (position actuelle augmentée de 10°)
      if (posZZ > 180)    // pour ne jamais depassé les 180°
        {
          posZZ = 180;
        }    
      for(posZ=posZ; posZ <= posZZ; posZ += 1) // boucle for, pour se déplacer à la nouvelle position pas trop vite et pas à pas.
         {                                  
           myservoZ.write(posZ);
           delay(100);
         }      
      break;
    case 2:    //  si message vaut 2 on tourne à gauche
      posZZ = posZ - 10;   // on defini la nouvelle position (position actuelle diminuée de 10°)   
      if (posZZ < 0)   // pour ne jamais descendre en dessous de 0°
        {
          posZZ = 0;
        }
      for(posZ=posZ; posZ >= posZZ; posZ -= 1)    // boucle for, pour se déplacer à la nouvelle position pas trop vite et pas à pas.
         {                                  
           myservoZ.write(posZ);
           delay(100);
         }      
      break;
    case 3:    //  si message vaut 3 on monte
      posYY = posY + 10;  // on defini la nouvelle position (position actuelle augmentée de 10°)
      if (posYY > 180)   // pour ne jamais depassé les 180°
        {
          posYY = 180;
        }  
      for(posY=posY; posY <= posYY; posY += 1)      // boucle for, pour se déplacer à la nouvelle position pas trop vite et pas à pas.
         {                                  
           myservoY.write(posY);
           delay(100);
         }
      break;
    case 4:   //  si message vaut 3 on descend
      posYY = posY - 10;   // on defini la nouvelle position (position actuelle diminuée de 10°) 
      if (posYY < 0)       // pour ne jamais descendre en dessous de 0°
        {
          posYY = 0;
        }
      for(posY=posY; posY >= posYY; posY -= 1)      // boucle for, pour se déplacer à la nouvelle position pas trop vite et pas à pas.
         {                                  
           myservoY.write(posY);
           delay(100);
         }
      break;
    case 5:   //  si message vaut 5 on se remet en position initiale en fonction de la ou on se trouve pas trop vite et pas à pas.
      if (posZ > 90)  {   
        for(posZ=posZ; posZ >= 90; posZ -= 1)      
         {                                  
          myservoZ.write(posZ);
          delay(100);
         }           
      }
      if (posZ < 90)  {
        for(posZ=posZ; posZ <= 90; posZ += 1)      
         {                                  
           myservoZ.write(posZ);
           delay(100);
         }           
      }
      if (posY > 90)  {
        for(posY=posY; posY >= 90; posY -= 1)      
         {                                  
          myservoY.write(posY);
          delay(100);
         }           
      }
      if (posY < 90)  {
        for(posY=posY; posY <= 90; posY += 1)      
         {                                  
           myservoY.write(posY);
           delay(100);
         }           
      }
      break;
    }
  }
}

void loop() {
   cam();  // appel de la fonction en boucle,
}