probléme de lecture d'un pin

bonjours à tous,
j'ai essayé toutes vos solutions et voila ce qui marche à la perfection, sachant que si le signal en entrée est continu (reste branché) le programme ne doit s'exécuter qu'une seule fois.
en fait c'est pour un jeux. les enfants doivent trouver 3 objets qui une fois posés sur le bon emplacement laisse passer le - (là le GND, sur mon premier essais c'était le +, mais c'est pas important) , pour déclencher: un son, un moteur qui fait bouger plein de petits trucs et enfin ouvre une porte. le programme ne doit pas redémarrer au début une fois exécuté, pour le remettre à zéro il faut faire un reset.
j'ai remis, dans le code proposé par "DFGH", la fonction ouverturePorte et .... TOUT MARCHE
Maintenant il faut que je digère ce code pour comprendre....

sinon le branchement est assez simple
3 relais alimentés par la carte, et piloté par les pins 4, 6, 8, chaque relais active une fonction.
le pin 10 est relié au GND en passant par des interrupteurs ILS qui se ferment quand on pose les objets dessus (ils sont pourvus d'un aimant), ce qui démarre le programme.

j'espère que c'est clair????

Merci à tous,
BON, à la rentrée je m'inscris au FABLAB qui est pas loin de chez moi pour prendre des cours d'ARDINIO.

encore un grand MERCI

const byte pinMoteur = 4;
const byte pinSon = 6;
const byte pinVentouse = 8;
boolean ouverturePorte;
const byte pinAction = 10;
int val = 0;
void setup()
{
  // état des ports
  pinMode(pinMoteur, OUTPUT);
  pinMode(pinSon, OUTPUT);
  pinMode(pinVentouse, OUTPUT);
  pinMode(pinAction, INPUT_PULLUP);//il faudra mettre ton fil sur GND pour ouvrir
  //mise à zéro
  digitalWrite(pinSon, LOW);
  digitalWrite(pinMoteur, LOW);
  digitalWrite(pinVentouse, LOW);
  ouverturePorte = true;
}
void loop()
{
  val = digitalRead(pinAction);
  if (val == LOW)
  {
    if (ouverturePorte)
    {
    digitalWrite(pinSon, HIGH);
    delay(3000);
    digitalWrite(pinSon, HIGH);
    digitalWrite(pinMoteur, HIGH);
    delay(4000);
    digitalWrite(pinMoteur, LOW);
    digitalWrite(pinVentouse, HIGH);
    delay(3000);
    digitalWrite(pinSon, LOW);
    digitalWrite(pinMoteur, LOW);
    digitalWrite(pinVentouse, LOW);
    {
      ouverturePorte = false;
    }
  }
}
}