probleme d'insertion servomoteur

bonjour je voudrais insert un servomoteur avec tempo avant position a 90°

je m’explique

j’ai mon arduino dessus j’ai des bouton je sélectionne le temps voulu
jours
heur
minute
seconde

et stars pour démarre

et c’est la que j’ai besoin de votre aide

je veut que mon servomoteur ai une tempo de 30 seconde

et après se mes a un degré que j’ai pas encore choisi

pour verrouiller la boite

et quand le temps fini qui se remets au position de depart

merci de votre aide

#include <LiquidCrystal.h> //Libreria del display LCD
#include <Wire.h>
#include <Servo.h>
LiquidCrystal lcd(12,11,5,4,3,2); //Inicializamos la libreria con el numero de los pines a utilizar


byte jours, heurs, minutes, secondes;
byte pinServo = 8;
byte pinBuz = 13;
byte pinJou = A4;
byte pinSta = A0;
byte pinHor = A1;
byte pinMin = A2;
byte pinSeg = A3;

boolean SSS; //start Stop State
byte seguro;

unsigned long lastMillis;
void setup() {

 pinMode(pinServo, OUTPUT);
 pinMode(pinBuz, OUTPUT);              //Pin salida visual y/o sonora
 pinMode(pinSta, INPUT_PULLUP);        //Pin boton Start
 pinMode(pinJou, INPUT_PULLUP);        //Pin boton heurs
 pinMode(pinHor, INPUT_PULLUP);        //Pin boton heurs
 pinMode(pinMin, INPUT_PULLUP);        //Pin boton minutes
 pinMode(pinSeg, INPUT_PULLUP);        //Pin boton secondes
 startLCD();

 //Inicializamos las variables del tiempo, ese sera el valor inicial.
 jours = 2 ;
 heurs = 0 ;
 minutes = 1;
 secondes = 0;
}

void loop() {

 do {//<------inicia do
   manage_SSS();  //función que activa y libera el ciclo do y el ciclo while
   //--------RUTINA ESCOGER EL TIEMPO EN PANTALLA.
   lcd.home();     //regresa el cursor a la posición (0,0)
   lcd.print("TEMPS RESTANT");
   printTime();    // imprime el tiempo en la segunda linea de la pantalla

   //--------RUTINA BOTONES DE TIEMPO.
  if (digitalRead(pinJou) == LOW)
   { delay(200);                         //retraso para evitar falso conteo
     jours++;
     if (jours > 365) jours = 0;         //jours máximos permitidos 365
   }
   
   if (digitalRead(pinHor) == LOW)
   { delay(200);                        //retraso para evitar falso conteo
     heurs++;
     if (heurs > 24) heurs = 0;         //heurs máximas permitidas 24
   }

   if (digitalRead(pinMin) == LOW)
   { delay(200);                         //retraso para evitar falso conteo
     minutes++;
     if (minutes > 60) minutes = 0;      //minutes máximos permitidos 60
   }

   if (digitalRead(pinSeg) == LOW)
   { delay(200);                         //retraso para evitar falso conteo
     secondes++;
     if (secondes > 60) secondes = 0;    //secondes máximos permitidos 60
   }

 }
 while (!SSS); //SSS = FALSE

 while (SSS) //<----inicia whie // SSS = TRUE
 { manage_SSS();//<----función que activa y libera el ciclo do y el ciclo while
   lcd.home();
   lcd.print("Temps restant");
   //    printTime();  // imprime el tiempo en la segunda linea de la pantalla
   //A PARTIR DE AQUÍ INICIA EL CALCULO DEL TIEMPO RESTANTE, CADA 1000 MS
   if (millis() - lastMillis >= 1000)
   {
     lastMillis = millis();// junto con la comprobación, posibilita ejecutarse una vez cada segundo.
     
     if (secondes > 0 ) secondes--;    //decremento un segundo cada vez
     if (secondes == 0 && minutes > 0) //si secondes = 0 y hay minutes 
     {
       minutes--;                       //decremento un minuto cada vez
       secondes = 59;                   //decremento un segundo del minuto restado
     }
     if (minutes == 0 && heurs > 0)     //si minutes = 0 y hay heurs
     {
       heurs--;                         //decremento una hora
       minutes = 59;                    //decremento un minuto a la hora restada.
     }
     if (heurs == 0 && jours > 0)     //si minutes = 0 y hay heurs
     {
       jours--;                         //decremento una hora
       heurs = 24;                    //decremento un minuto a la hora restada.
     }
   } //TERMINA EL CALCULO DEL TIEMPO RESTANTE
     //EMPIEZA LA RUTINA "TIEMPO FINALIZADO"
     if (jours == 0 &&heurs == 0 && minutes == 0 && secondes == 0) //<----  ¿no hay tiempo?.
     {
       lcd.clear();
       lcd.setCursor(5, 0);
       lcd.print("TEMPS");
       lcd.setCursor(3, 1);
       lcd.print("Finalition");


       digitalWrite(pinBuz, HIGH);
       delay(100);
       digitalWrite(pinBuz, LOW);
       delay(100);
     }else printTime();  // imprime el tiempo en la segunda linea de la pantalla
   }
 }

 void manage_SSS() { //función que cambia el estado de SSS, y evita atascos
   //se ejecuta en ambos ciclos, para poder salir de ambos.
   if (digitalRead(pinSta) == LOW && seguro == 0) //si el pinSta esta en low y seguro = 0
   {lcd.clear();        //agrego un clear porque cuando termina el tiempo queda F00:00:00o
     SSS = !SSS;        //el valor de SSS = cambia a su contrario
     seguro++;          //seguro cambia de cero a 1 y con esto evitamos un falso cambio
   }                    //cuando el pinSta continua en low,es decir solo pasara una vez.

   if (digitalRead(pinSta) == HIGH) seguro = 0;
   //cuando pinSta sea liberado cambiara su estado a HIGH y seguro = 0
   //con esto posibilitamos que la condición anterior se pueda ejecutar nuevamente
   // y por una vez cuando sea presionado nuevamente (pinSta = LOW)
   //no necesita delay pues el seguro entra inmediato

 }

 void printTime() {
   // función simple que imprime el tiempo en la segunda linea
   // con esto evitamos repetir código en el ciclo do y en el ciclo while
   lcd.setCursor(2, 1);
   if (jours < 10)lcd.print("0");
   lcd.print(jours);
   lcd.print(":");
   if (heurs < 10)lcd.print("0");
   lcd.print(heurs);
   lcd.print(":");
   if (minutes < 10)lcd.print("0");
   lcd.print(minutes);
   lcd.print(":");
   if (secondes < 10)lcd.print("0");
   lcd.print(secondes);
 }

 void startLCD() {
   // + + + + + + + + + + + + + + + + + + + + + //
   //  ---- Rutina de inicio Splash Screen ---- //
   // + + + + + + + + + + + + + + + + + + + + + //
   lcd.begin(16, 2);
   byte customChar1[8] = {
     B00000,
     B00100,
     B01110,
     B11111,
     B01110,
     B00100,
     B00000,
     B00000
   };
   byte customChar2[8] = {
     B00000,
     B00100,
     B01010,
     B10101,
     B01010,
     B00100,
     B00000,
     B00000
   };
   

   lcd.createChar(0, customChar1);
   lcd.createChar(1, customChar2);

   // --- inicia rutina --- //

   lcd.setCursor(4, 0);
   lcd.print("DEMARAGE");
   lcd.setCursor(0, 1);
   lcd.write(byte(0));
   lcd.setCursor(1, 1);
   lcd.print("--------------");
   lcd.setCursor(15, 1);
   lcd.write(byte(1));
   delay(2500);
   lcd.clear();

   lcd.setCursor(0, 0);
   lcd.print("Temporisation");
   lcd.setCursor(1, 1);
   lcd.print("A toi de joué");
   delay(2500);
   lcd.clear();
 }

as tu suivi le tuto d'eskimon qu'on t'a déjà conseillé

oui mes seul je sais le faire mais en compilation dans un code sais une autre paire de manche

j’ai reussi a avancer seul dit moi si je suis sur la bonne voix

#include <LiquidCrystal.h> //Libreria del display LCD
#include <Wire.h>
#include <Servo.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
Servo pinServo;

const int PositionFermee = 0;
const int PositionOuverte = 180;


byte jours, heurs, minutes, secondes;

byte pinBuz = 13;
byte pinJou = A4;
byte pinSta = A0;
byte pinHor = A1;
byte pinMin = A2;
byte pinSeg = A3;

boolean SSS; //start Stop State
byte seguro;

unsigned long lastMillis;
void setup() {

  
  pinServo.attach(8);
  pinServo.write(PositionOuverte);
  lcd.print("OUVERT");
  delay(25000);
  lcd.clear();
  lcd.print("FERMETURE");
  delay(2000);
  pinServo.write(PositionFermee);
  lcd.clear();
  

  pinMode(pinBuz, OUTPUT);              //Pin etat visuel
  pinMode(pinSta, INPUT_PULLUP);        //Pin boton Start
  pinMode(pinJou, INPUT_PULLUP);        //Pin boton heurs
  pinMode(pinHor, INPUT_PULLUP);        //Pin boton heurs
  pinMode(pinMin, INPUT_PULLUP);        //Pin boton minutes
  pinMode(pinSeg, INPUT_PULLUP);        //Pin boton secondes
  startLCD();

  //durée de depart.
  jours = 0 ;
  heurs = 0 ;
  minutes = 0;
  secondes = 0;
}

void loop() {

  do {//<------inicia do
    manage_SSS();  //función que activa y libera el ciclo do y el ciclo while
    //--------RUTINA ESCOGER EL TIEMPO EN PANTALLA.
    lcd.home();     //regresa el cursor a la posición (0,0)
    lcd.print("TEMPS RESTANT");
    printTime();    // imprime el tiempo en la segunda linea de la pantalla

    //--------RUTINA BOTONES DE TIEMPO.
    if (digitalRead(pinJou) == LOW)
    { delay(200);                         //retraso para evitar falso conteo
      jours++;
      if (jours > 365) jours = 0;         //jours máximos permitidos 365
    }

    if (digitalRead(pinHor) == LOW)
    { delay(200);                        //retraso para evitar falso conteo
      heurs++;
      if (heurs > 24) heurs = 0;         //heurs máximas permitidas 24
    }

    if (digitalRead(pinMin) == LOW)
    { delay(200);                         //retraso para evitar falso conteo
      minutes++;
      if (minutes > 60) minutes = 0;      //minutes máximos permitidos 60
    }

    if (digitalRead(pinSeg) == LOW)
    { delay(200);                         //retraso para evitar falso conteo
      secondes++;
      if (secondes > 60) secondes = 0;    //secondes máximos permitidos 60
    }

  }
  while (!SSS); //SSS = FALSE

  while (SSS) //<----inicia whie // SSS = TRUE
  { manage_SSS();//<----función que activa y libera el ciclo do y el ciclo while
    lcd.home();
    lcd.print("Temps restant");
    //    printTime();  // imprime el tiempo en la segunda linea de la pantalla
    //A PARTIR DE AQUÍ INICIA EL CALCULO DEL TIEMPO RESTANTE, CADA 1000 MS
    if (millis() - lastMillis >= 1000)
    {
      lastMillis = millis();// junto con la comprobación, posibilita ejecutarse una vez cada segundo.

      if (secondes > 0 ) secondes--;    //decremento un segundo cada vez
      if (secondes == 0 && minutes > 0) //si secondes = 0 y hay minutes
      {
        minutes--;                       //decremento un minuto cada vez
        secondes = 59;                   //decremento un segundo del minuto restado
      }
      if (minutes == 0 && heurs > 0)     //si minutes = 0 y hay heurs
      {
        heurs--;                         //decremento una hora
        minutes = 59;                    //decremento un minuto a la hora restada.
      }
      if (heurs == 0 && jours > 0)     //si minutes = 0 y hay heurs
      {
        jours--;                         //decremento una jours
        heurs = 24;                    //decremento un heurs a la hora restada.
      }
    } //TERMINA EL CALCULO DEL TIEMPO RESTANTE
    //EMPIEZA LA RUTINA "TIEMPO FINALIZADO"
    if (jours == 0 && heurs == 0 && minutes == 0 && secondes == 0) //<----  ¿no hay tiempo?.
    {
      lcd.clear();
      lcd.setCursor(5, 0);
      lcd.print("TEMPS");
      lcd.setCursor(3, 1);
      lcd.print("Finalition");


      digitalWrite(pinBuz, HIGH);
      delay(100);
      digitalWrite(pinBuz, LOW);
      delay(100);
    } else printTime();  // imprime el tiempo en la segunda linea de la pantalla
  }
}

void manage_SSS() { //función que cambia el estado de SSS, y evita atascos
  //se ejecuta en ambos ciclos, para poder salir de ambos.
  if (digitalRead(pinSta) == LOW && seguro == 0) //si el pinSta esta en low y seguro = 0
  { lcd.clear();        //agrego un clear porque cuando termina el tiempo queda F00:00:00o
    SSS = !SSS;        //el valor de SSS = cambia a su contrario
    seguro++;          //seguro cambia de cero a 1 y con esto evitamos un falso cambio
  }                    //cuando el pinSta continua en low,es decir solo pasara una vez.

  if (digitalRead(pinSta) == HIGH) seguro = 0;
  //cuando pinSta sea liberado cambiara su estado a HIGH y seguro = 0
  //con esto posibilitamos que la condición anterior se pueda ejecutar nuevamente
  // y por una vez cuando sea presionado nuevamente (pinSta = LOW)
  //no necesita delay pues el seguro entra inmediato

}

void printTime() {
  // función simple que imprime el tiempo en la segunda linea
  // con esto evitamos repetir código en el ciclo do y en el ciclo while
  lcd.setCursor(2, 1);
  if (jours < 10)lcd.print("0");
  lcd.print(jours);
  lcd.print(":");
  if (heurs < 10)lcd.print("0");
  lcd.print(heurs);
  lcd.print(":");
  if (minutes < 10)lcd.print("0");
  lcd.print(minutes);
  lcd.print(":");
  if (secondes < 10)lcd.print("0");
  lcd.print(secondes);
}

void startLCD() {
  // + + + + + + + + + + + + + + + + + + + + + //
  //  ---- Rutina de inicio Splash Screen ---- //
  // + + + + + + + + + + + + + + + + + + + + + //
  lcd.begin(16, 2);
  byte customChar1[8] = {
    B00000,
    B00100,
    B01110,
    B11111,
    B01110,
    B00100,
    B00000,
    B00000
  };
  byte customChar2[8] = {
    B00000,
    B00100,
    B01010,
    B10101,
    B01010,
    B00100,
    B00000,
    B00000
  };


  lcd.createChar(0, customChar1);
  lcd.createChar(1, customChar2);

  // --- inicia rutina --- //

  lcd.setCursor(4, 0);
  lcd.print("DEMARAGE");
  lcd.setCursor(0, 1);
  lcd.write(byte(0));
  lcd.setCursor(1, 1);
  lcd.print("--------------");
  lcd.setCursor(15, 1);
  lcd.write(byte(1));
  delay(2500);
  lcd.clear();

  lcd.setCursor(0, 0);
  lcd.print("Temporisation");
  lcd.setCursor(1, 1);
  lcd.print("A toi de joué");
  delay(2500);
  lcd.clear();
}

ou inserts ma commande pour que sa marche

je le veux après appui sur stars que le servomoteur se ferme avec un delai de 15 seconde environ et se re-ouvre des que le temps soit fini

la je connais les code mais pas ou les placer

merci

pour la fermeture tu as une variable qui change a l'appui sur start "boolean SSS; //start Stop State"
elle est mise a jour dans une fonction "void manage_SSS() { //función que cambia el estado de SSS, y evita atascos"
donc il faut insérer ton code de fermeture dans la partie de cette fonction qui détecte l'appui sur start
si tu met un délais de 15s il s'ajoutera au temps programmé

pour l'ouverture tu as un buzzer qui sonne pendant 0.1s donc tu insères ton code d'ouverture en même temps

j’ suis ton conseil et sa marche trés bien juste es se que sa possible que le servomoteur se coupe aprés ouverture et fermeture car l’entendre vibre et comment dire c’est chiant j’ai essayer la formule

pinServo.attach(8);
pinServo.write(PositionFermee);
digitalWrite(8, LOW);
delay(1);

#include <LiquidCrystal.h> //Libreria del display LCD
#include <Wire.h>
#include <Servo.h>
#include <RTClib.h>

RTC_DS1307 RTC;
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
Servo pinServo;


const int PositionFermee = 1;
const int PositionOuverte = 90;


byte jours, heurs, minutes, secondes;

byte pinBuz = 13;
byte pinJou = A0;
byte pinSta = 7;
byte pinHor = A1;
byte pinMin = A2;
byte pinSeg = A3;

boolean SSS; //start Stop State
byte seguro;

unsigned long lastMillis;
void setup() {





  pinMode(pinBuz, OUTPUT);              //Pin etat visuel
  pinMode(pinSta, INPUT_PULLUP);        //Pin boton Start
  pinMode(pinJou, INPUT_PULLUP);        //Pin boton heurs
  pinMode(pinHor, INPUT_PULLUP);        //Pin boton heurs
  pinMode(pinMin, INPUT_PULLUP);        //Pin boton minutes
  pinMode(pinSeg, INPUT_PULLUP);        //Pin boton secondes
  startLCD();

  //durée de depart.
  jours = 0 ;
  heurs = 0 ;
  minutes = 0;
  secondes = 30;
}

void loop() {

  do {//<------inicia do
    manage_SSS();  //función que activa y libera el ciclo do y el ciclo while
    //--------RUTINA ESCOGER EL TIEMPO EN PANTALLA.
    lcd.home();     //regresa el cursor a la posición (0,0)
    lcd.print("TEMPS RESTANT");
    printTime();    // imprime el tiempo en la segunda linea de la pantalla

    //--------RUTINA BOTONES DE TIEMPO.
    if (digitalRead(pinJou) == LOW)
    { delay(200);                         //retraso para evitar falso conteo
      jours++;
      if (jours > 365) jours = 0;         //jours máximos permitidos 365
    }

    if (digitalRead(pinHor) == LOW)
    { delay(200);                        //retraso para evitar falso conteo
      heurs++;
      if (heurs > 24) heurs = 0;         //heurs máximas permitidas 24
    }

    if (digitalRead(pinMin) == LOW)
    { delay(200);                         //retraso para evitar falso conteo
      minutes++;
      if (minutes > 60) minutes = 0;      //minutes máximos permitidos 60
    }

    if (digitalRead(pinSeg) == LOW)
    { delay(200);                         //retraso para evitar falso conteo
      secondes++;
      if (secondes > 60) secondes = 0;    //secondes máximos permitidos 60
    }

  }
  while (!SSS); //SSS = FALSE

  while (SSS) //<----inicia whie // SSS = TRUE
  { manage_SSS();//<----función que activa y libera el ciclo do y el ciclo while
    lcd.home();
    lcd.print("Temps restant");
    //    printTime();  // imprime el tiempo en la segunda linea de la pantalla
    //A PARTIR DE AQUÍ INICIA EL CALCULO DEL TIEMPO RESTANTE, CADA 1000 MS
    if (millis() - lastMillis >= 1000)
    {
      lastMillis = millis();// junto con la comprobación, posibilita ejecutarse una vez cada segundo.

      if (secondes > 0 ) secondes--;    //decremento un segundo cada vez
      if (secondes == 0 && minutes > 0) //si secondes = 0 y hay minutes
      {
        minutes--;                       //decremento un minuto cada vez
        secondes = 59;                   //decremento un segundo del minuto restado
      }
      if (minutes == 0 && heurs > 0)     //si minutes = 0 y hay heurs
      {
        heurs--;                         //decremento una hora
        minutes = 59;                    //decremento un minuto a la hora restada.
      }
      if (heurs == 0 && jours > 0)     //si minutes = 0 y hay heurs
      {
        jours--;                         //decremento una jours
        heurs = 24;                    //decremento un heurs a la hora restada.
      }
    } //TERMINA EL CALCULO DEL TIEMPO RESTANTE
    //EMPIEZA LA RUTINA "TIEMPO FINALIZADO"
    if (jours == 0 && heurs == 0 && minutes == 0 && secondes == 0) //<----  ¿no hay tiempo?.
    {
      lcd.clear();
      lcd.setCursor(5, 0);
      lcd.print("boite");
      lcd.setCursor(3, 1);
      lcd.print("ouvert");

      {
        pinServo.write(PositionOuverte);
        digitalWrite(8, LOW);   // La led s'éteind
        delay(1000);
      }
    } else printTime();  // imprime el tiempo en la segunda linea de la pantalla
  }
}

void manage_SSS() { //función que cambia el estado de SSS, y evita atascos
  //se ejecuta en ambos ciclos, para poder salir de ambos.



  if (digitalRead(pinSta) == LOW && seguro == 0) //si el pinSta esta en low y seguro = 0
  { lcd.clear();        //agrego un clear porque cuando termina el tiempo queda F00:00:00o
    SSS = !SSS;        //el valor de SSS = cambia a su contrario
    seguro++;          //seguro cambia de cero a 1 y con esto evitamos un falso cambio
  }                    //cuando el pinSta continua en low,es decir solo pasara una vez.



  if (digitalRead(pinSta) == HIGH) seguro = 0;
  //cuando pinSta sea liberado cambiara su estado a HIGH y seguro = 0
  //con esto posibilitamos que la condición anterior se pueda ejecutar nuevamente
  // y por una vez cuando sea presionado nuevamente (pinSta = LOW)
  //no necesita delay pues el seguro entra inmediato
  {
    pinServo.attach(8);
    pinServo.write(PositionFermee);
    digitalWrite(8, LOW);   // La MOTEUR s'éteind
    delay(1);              
  }
}




void printTime() {
  // función simple que imprime el tiempo en la segunda linea
  // con esto evitamos repetir código en el ciclo do y en el ciclo while
  lcd.setCursor(2, 1);
  if (jours < 10)lcd.print("0");
  lcd.print(jours);
  lcd.print(":");
  if (heurs < 10)lcd.print("0");
  lcd.print(heurs);
  lcd.print(":");
  if (minutes < 10)lcd.print("0");
  lcd.print(minutes);
  lcd.print(":");
  if (secondes < 10)lcd.print("0");
  lcd.print(secondes);
}

void startLCD() {
  // + + + + + + + + + + + + + + + + + + + + + //
  //  ---- Rutina de inicio Splash Screen ---- //
  // + + + + + + + + + + + + + + + + + + + + + //
  lcd.begin(16, 2);
  byte customChar1[8] = {
    B00000,
    B00100,
    B01110,
    B11111,
    B01110,
    B00100,
    B00000,
    B00000
  };
  byte customChar2[8] = {
    B00000,
    B00100,
    B01010,
    B10101,
    B01010,
    B00100,
    B00000,
    B00000
  };


  lcd.createChar(0, customChar1);
  lcd.createChar(1, customChar2);

  // --- inicia rutina --- //

  lcd.setCursor(4, 0);
  lcd.print("DEMARAGE");
  lcd.setCursor(0, 1);
  lcd.write(byte(0));
  lcd.setCursor(1, 1);
  lcd.print("--------------");
  lcd.setCursor(15, 1);
  lcd.write(byte(1));
  delay(2500);
  lcd.clear();


}

je sais que loop et une boucle mais je sais pas comment m'en sortir la

Compléments basiques mais rarement expliqués
Si on ne prévoie rien le fonctionnement d’un processeur ou d’un controleur est le suivant:
Au Reset le programme se lance, il va jusqu’au bout des instructions et il se bloque.
Pour le relancer il faut de nouveau appuyer sur Reset.

On est bien d’accord que comme cela ils ne servent à rien.
Dans un ordinateur c’est le système d’exploitation qui est chargé d’empêcher ce blocage.
Dans un micro-contrôleur on créé une boucle infinie dans laquelle les instructions reviennnent en boucle.

Avec l’IDE tu écris ça :

#include>machin.>
int bidule ;
float truc ;

void setup()
{/*     lignes d'instruction qui ne sont à effectuer qu'une seule fois
En général se sont des configurations*/}

void loop()
{/* Ligne s d'instruction qui se répèteront en boucle */ }

Et l’IDE envoi ça au compilateur (qui est un pur fichier source C/C++:

#include<Arduino.h>  // Ajouté par l'IDE
#include<machin.h> 

void setup() ;  // prédéclaration ajoutée
void loop() ;

void main()    // en C/C++ la fonction main est appelée en premier.
{
  init(); Ajoutée par l'ide 
  setup();
  while(1){   // While(1) est toujours vrai donc on ne peut pas sortir de cette boucle
    loop();
  }  
} 

void setup(){
/* instructions que tu as écrit en utilisant l'IDE*/
}
void loop(){
/* instruction que tu as écrit en utilisant l'IDE*/ 
}

Ça c’est le fonctionnement conforme au C/C++
Si tu as besoin de plus de renseignements il faut lire des tutos ou des manuels de C/C++.

Les instructions dans la fonction main() s’effectuant de la première ligne à la dernière on ne passe qu’une seule et unique fois par setup().
C’est bien pour des configurations. Par exemple si tu te sers du moniteur c’est dans setup() que tu initialisera la liaison série avec Serial.begin(débit);

Le programme proprement dit se déroule entièrement dans la fonction loop().
C’est dans loop() qu’il faut écrire ce que tu veut faire.
Par exemple lire létat des boutons avec un digitalRead(pin) et selon que le bouton est à 1 ou à 0 décider d’allumer une diode en utilisant un if.

Mais le mieux est de lire le tuto d’Eskimon dont tu as pu trouver l’adresse dans le message épinglé en tête de forum : “Bienvenue sur le forum de la communauté francophone”
Et si tu n’as pas encore lu ce message, un ce n’est pas bien, et deux tu te précipite pour le lire et tu ne repose des questions qu’après l’avoir lu.
C’est le meilleur tuto qui existe en français.

ouaaaa tu ma perdu

je relie sa demain pour voir si mon cerveau comprend mieux

tu pense que j'en suis loin de finir mon projet
et j'aimerai inseré un pile de memoire cela et t'il compliqué (tiny rtc ic2 )

En résumé arduino c'est du C (et c++).
Il n'y a pas de langage arduino il y a seulement des fonctions (et des classes).

Donc pour tout ce qui relève de la syntaxe et du langage il faut voir des tuto de C et de C++
L'essentiel de ces points étant couverts par des tuto de C.

Avoir une connaissance de la structure d'un fichier C n'est pas indispensable tant qu'on n'utilise que l'ide arduino.
Mais AMHA cela ne peut qu'aider. Cela ouvre plus de possibilités pour savoir où trouver de la documentation, cela rend plus autonome.

alors si j'ai compris que il faut que j'inserts un code mes ou dans le loop mais ou et quoi !!!

void main() la je suis perdu

adrien38:
j' suis ton conseil et sa marche trés bien juste es se que sa possible que le servomoteur se coupe aprés ouverture et fermeture car l’entendre vibre et comment dire c'est chiant j'ai essayer la formule

pinServo.attach(8);
pinServo.write(PositionFermee);
digitalWrite(8, LOW);
delay(1);

je t'invite a relire le tuto que je t'ai conseillé et en particulier le chapitre "Préparer le terrain"
as tu "étalonné" ton servo ?

Soit tu fais betement sans surtout chercher à comprendre le programme final qui est transmis au compilateur :

  • setup pour tout ce qui doit se faire UNE SEULE FOIS
  • loop pour le programme proprement dit
    ET TU REGARDE et tu t'INSPIRE DES EXEMPLES FOURNIS AVEC L'IDE.

N'OUBLI PAS LE TUTO D'ESKIMON

Soit tu cherches à comprendre et tu lis un tuto d'initiation au C en parallele de la documentation des fonctions wiring/arduino.

serai t'il possible de me faire le code car la cette fontion ma perdu total ou me trouver un exemple pour que je comprenne mais une exemple que je peut compilé pour voir le comment sa marche s il vous plais

j'ai essayer sa et sa marche pas non plus

pinServo.write(angle + PositionOuverte);
{ if (angle = PositionOuverte) PositionOuverte;
{
stop();
}
}; break;

bonjour qui pourai resoudre mon probleme svp

mettre une tempo apres le bouton start fermeture du boitier 30 seconde apres et ouverture des que le compte a rebour a fini ouverture et que le servo moteur arrete de cherché sa position si il vous plais

help

en fait sur ce forum on ne fourni pas une solution "clef en main" mais on aide a la réflexion pour résoudre les problèmes
je t'ai conseillé a plusieurs reprise de lire le tuto d'Eskimon et d'étalonner ton servo pour éviter qu'il grogne, l'as tu fait (je pense que non)?
es tu sur que ton servo accepte "pinServo.attach( 8 );" avec les paramètres par défaut ?
après l'avoir attacher il y a peut être un moyen pour le détacher ?
pour bloquer ton programme après ouverture de la boite il y a une solution : le faire rentrer dans une boucle infini (il faudra faire un reset pour redemarrer) a l'aide d'un bloc "faire tant que condition" (si la condition est toujours a 1) ...