Problème de fonction appelé dans le loop

Bonjours ,
j’essaye de faire un programme pour animer une maquette à base de servomoteur et quand on passe devant un capteur de mouvement la maquette s’anime. J’ai réalisé le programme suivant sauf que quand je commence avec 2 void l’animation se fais 2 fois au lieu d’une fois. Je ne sais pas cela peut venir d’où merci pour vos réponses d’avance.

#include <Servo.h>
#include <Arduino.h>
#define PIR_MOTION_SENSOR 2
#define LED 4

/*! ===========================================================================================================================
//                         Objets et variables globales
// ===========================================================================================================================*/
// OBJETS:
Servo servo;

Servo ServoMain;
Servo ServoEB;
Servo ServoEY;
Servo ServoCoude;
Servo ServoPoigne;
//VARIABLES:




/*! ===========================================================================================================================
//                         fonctions
// ===========================================================================================================================*/

void setup()
{

    ServoMain.attach(10);
    ServoEB.attach(9);
    ServoEY.attach(8);
    ServoCoude.attach(11);
    ServoPoigne.attach(12);
       pinMode(PIR_MOTION_SENSOR, INPUT);
       pinMode(LED,OUTPUT);
}
/*!============================================================================================================================*/
///Détection d'une personne
boolean PersonneDetect()
{
    int sensorValue = digitalRead(PIR_MOTION_SENSOR);
    if(sensorValue == HIGH)
    {
        return true;
    }
    else
    {
        return false;
    }
}
/*!============================================================================================================================*/
void VservoMain()
{

        ServoMain.write(90);
        delay(10);
        ServoMain.write(0);
}

/*!============================================================================================================================*/

void VservoCoude()
{

        ServoCoude.write(90);
        delay(10);
        ServoCoude.write(0);
}
/*!============================================================================================================================*/

/*void VservoEB()
{

        ServoEB.write(90);
        delay(10);
        ServoEB.write(0);
}
/*!============================================================================================================================*/
/*
void VservoEY()
{

        ServoEY.write(90);
        delay(10);
        ServoEY.write(0);
}
/*!============================================================================================================================*/
/*
void VservoPoigne()
{

        ServoPoigne.write(90);
        delay(10);
        ServoPoigne.write(0);
}
/*! ===========================================================================================================================
//                          programme principal
// ===========================================================================================================================*/

void loop()
{
    if(PersonneDetect())
    {
       digitalWrite(LED, HIGH);
       VservoMain();
       VservoCoude();
    //   VservoEB();
      // VservoEY();
       //VservoPoigne();
    }

    else
{
      digitalWrite(LED, LOW);
                ServoMain.write(0);
         //       ServoPoigne.write(0);
         //       ServoEB.write(0);
         //       ServoEY.write(0);
                ServoCoude.write(0);
                delay(10);
}


}

Bonjour,

C'est tout a fait normal, les animations se font tant que PersonneDetect() retourne vrai.
Et le temps pendant lequel sensorValue est à HIGH, dure plus longtemps que le temps d'éxecution de la boucle principale.

Donc il faudrait ajouter une variable booléenne qui est testée en même temps que la détection de personne et qui reste à true pendant un temps choisi à l'avance (le délai minimum entre deux animations).
L'animation est lancée seulement si la variable est false. La variable est mise à true lors de l'animation et revient à false après que le délai est passé.
Si on repasse devant le capteur avant ce délai, la variable est toujours à true et l'animation n'est donc pas lancée.