erreur dans mon code

bonjour tout, le monde , je ne suis pas expert en code, car je pratique pas assez regulierement, j ai ecrit ça hier soir, et ça bloque, mais je ne comprend pas pourquoi

il me semble avoir bien respecter les consignes de bases en arduino...

//definition entrées et sorties

/*
 * D2=entrée sonde
 * D3=buzzer tone
 * D4=entree interrupteur
 * D5=relais
 */
#define sonde 2
#define buzzer 3
#define inter 4
#define relais 5

//pinmode
pinMode(sonde, INPUT);
pinMode(buzzer,OUTPUT);
digitalWrite(buzzer, LOW);
pinMode(inter, INPUT);
pinMode(relais, OUTPUT);
digitalWrite(relais, LOW);



//declaration variable
int tempssondepleine=0;
int tempssondevide=0;
int etiquetteremonte=0;
int echenillagecasse=0;


void setup() {
  // put your setup code here, to run once:

digitalWrite(buzzer, LOW); // ON DESACTIVE LE BUZZER    a valider
digitalWrite(relais, LOW); // ON DESACTIVE LE RELAIS
}

void loop() {
  // put your main code here, to run repeatedly:
tempssondepleine=5000; // 5 SECONDE


//DEFINITION TIMER SI LES ETIQUETTES REMONTE DANS L ECHENILLAGE
if digitalread(sonde)==LOW; //si rien devant la sonde
{
timersondepleine=time + tempssondepleine; //ON RAFRAICHIT TIMERSONDEPLEINE
}
if digitalread(sonde)==HIGH && time > timersondepleine;  // SI UNE ETIQUETTE EST DEVANT LA SONDE NON STOP PENDANT PLUS DE 5 SECONDE
{
etiquetteremonte=HIGH;
}
else
{
etiquetteremonte=LOW;
}


//DEFINITION TIMER SI L ECHENILLAGE CASSE

tempssondevide=10000; //10 SECONDE

if digitalread(sonde)==HIGH; //SI QUELQUE CHOSE DEVANT LA SONDE
{
timersondevide=time + tempssondevide; //ON RAFRAICHIT TIMERSONDEVIDE
}
if digitalread(sonde)==LOW && time > timersondevide;  // SI RIEN EST DEVANT LA SONDE NON STOP PENDANT PLUS DE 10 SECONDE
{
echenillagecasse=HIGH;
}
else
{
echenillagecasse=LOW;
}




  if digitalRead(inter)== HIGH; // si l'inter est en position marche
  {
    if echenillagecasse==HIGH || etiquetteremonte==HIGH  // SI LES ETIQUETTES REMONTE PENDANT PLUS DE 5 SECONDES OU QUE L ECHENILLAGE CASSE PENDANT PLU DE 10 SECONDE
    {
      digitalWrite(relais)= HIGH;  //on active la sortie relais
      tone (buzzer,900);      
    }
  }
    else
   {
    digitalWrite(buzzer, LOW) // ON DESACTIVE LE BUZZER    a valider
    digitalWrite(relais, LOW) // ON DESACTIVE LE RELAIS 
   }


}

alors voici, une correction, il manquait des majuscules sur les digitalRead, et j 'ai mis les delcarations dans le setup

ça passe mieux, mais ça bloque encore

//definition entrées et sorties

/*
 * D2=entrée sonde
 * D3=buzzer tone
 * D4=entree interrupteur
 * D5=relais
 */


void setup() {
  // put your setup code here, to run once:

#define sonde 2
#define buzzer 3
#define inter 4
#define relais 5

//pinmode
pinMode(sonde, INPUT);
pinMode(buzzer,OUTPUT);
digitalWrite(buzzer, LOW);
pinMode(inter, INPUT);
pinMode(relais, OUTPUT);
digitalWrite(relais, LOW);

  //declaration variable
int tempssondepleine=0;
int tempssondevide=0;
int etiquetteremonte=0;
int echenillagecasse=0;

digitalWrite(buzzer, LOW); // ON DESACTIVE LE BUZZER    a valider
digitalWrite(relais, LOW); // ON DESACTIVE LE RELAIS
}

void loop() {
  // put your main code here, to run repeatedly:
 int tempssondepleine=5000; // 5 SECONDE


//DEFINITION TIMER SI LES ETIQUETTES REMONTE DANS L ECHENILLAGE
if digitalRead(sonde)==LOW; //si rien devant la sonde
{
timersondepleine=time + tempssondepleine; //ON RAFRAICHIT TIMERSONDEPLEINE
}
if digitalRead(sonde)==HIGH && time > timersondepleine;  // SI UNE ETIQUETTE EST DEVANT LA SONDE NON STOP PENDANT PLUS DE 5 SECONDE
{
etiquetteremonte=HIGH;
}
else
{
etiquetteremonte=LOW;
}


//DEFINITION TIMER SI L ECHENILLAGE CASSE

tempssondevide=10000; //10 SECONDE

if digitalRead(sonde)==HIGH; //SI QUELQUE CHOSE DEVANT LA SONDE
{
timersondevide=time + tempssondevide; //ON RAFRAICHIT TIMERSONDEVIDE
}
if digitalRead(sonde)==LOW && time > timersondevide;  // SI RIEN EST DEVANT LA SONDE NON STOP PENDANT PLUS DE 10 SECONDE
{
echenillagecasse=HIGH;
}
else
{
echenillagecasse=LOW;
}




  if digitalRead(inter)== HIGH; // si l'inter est en position marche
  {
    if echenillagecasse==HIGH || etiquetteremonte==HIGH  // SI LES ETIQUETTES REMONTE PENDANT PLUS DE 5 SECONDES OU QUE L ECHENILLAGE CASSE PENDANT PLU DE 10 SECONDE
    {
      digitalWrite(relais)= HIGH;  //on active la sortie relais
      tone (buzzer,900);      
    }
  }
    else
   {
    digitalWrite(buzzer, LOW) // ON DESACTIVE LE BUZZER    a valider
    digitalWrite(relais, LOW) // ON DESACTIVE LE RELAIS 
   }


}

Les conditions des if doivent être entre parenthèses
Et il doit manquer un ; à la fin de la ligne 88

La variable timersondevide n'est pas déclarée, il faut déclarer une variable globale en int comme pour tes autres variables

Les lignes du bloc juste après //pinMode doivent aller dans le setup

Les define vont avant le setup

Les déclarations de variables globales aussi.

Tu as ôté les messages du compilateur, c'est dommage.

Pas de ; sur la ligne d'un if
La syntaxe c'est

if (condition) 
{ bloc si oui ;}
else
{ bloc si non ;}

bon je crois que j ai tout cassé....

time est pas une fonction native?

j'ai declarer dans setup mes variables

int tempssondepleine=0;
int tempssondevide=0;
int timersondevide=0;
int timersondepleine=0;
int etiquetteremonte=0;
int echenillagecasse=0;

il me dit qu elles sont a nouveau pas declarer dans loop....

Si tu déclares des variables partagées entre setup() et loop() elles doivent être déclarées en dehors des fonctions, en global donc.

Oui, il s'agit de ce qu'on appelle la portée des variables. Une variable définie dans une fonction n'est pas citée à l'extérieur de cette fonction. Une variable globale est déclarée avant le setup (damned, grilled!)

merci c est bon, ba dit donc j en avais ecris des conneries....

//definition entrées et sorties

/*
 * D2=entrée sonde
 * D3=buzzer tone
 * D4=entree interrupteur
 * D5=relais
 */
#define sonde 2
#define buzzer 3
#define inter 4
#define relais 5


//declaration variable
int tempssondepleine=0;
int tempssondevide=0;
int etiquetteremonte=0;
int echenillagecasse=0;
int timersondepleine=0;
int timersondevide=0;
unsigned long time;



void setup() {
  // put your setup code here, to run once:

//pinmode
pinMode(sonde, INPUT);
pinMode(buzzer,OUTPUT);
digitalWrite(buzzer, LOW);
pinMode(inter, INPUT);
pinMode(relais, OUTPUT);
digitalWrite(relais, LOW);



digitalWrite(buzzer, LOW); // ON DESACTIVE LE BUZZER    a valider
digitalWrite(relais, LOW); // ON DESACTIVE LE RELAIS
}

void loop() {
  // put your main code here, to run repeatedly:

time = millis();

  
tempssondepleine=5000; // 5 SECONDE


//DEFINITION TIMER SI LES ETIQUETTES REMONTE DANS L ECHENILLAGE
if (digitalRead(sonde)==LOW) //si rien devant la sonde
{
timersondepleine=time + tempssondepleine; //ON RAFRAICHIT TIMERSONDEPLEINE
}
if (digitalRead(sonde)==HIGH && time > timersondepleine)  // SI UNE ETIQUETTE EST DEVANT LA SONDE NON STOP PENDANT PLUS DE 5 SECONDE
{
etiquetteremonte=HIGH;
}
else
{
etiquetteremonte=LOW;
}


//DEFINITION TIMER SI L ECHENILLAGE CASSE

tempssondevide=10000; //10 SECONDE

if (digitalRead(sonde)==HIGH) //SI QUELQUE CHOSE DEVANT LA SONDE
{
timersondevide=time + tempssondevide; //ON RAFRAICHIT TIMERSONDEVIDE
}
if (digitalRead(sonde)==LOW && time > timersondevide)  // SI RIEN EST DEVANT LA SONDE NON STOP PENDANT PLUS DE 10 SECONDE
{
echenillagecasse=HIGH;
}
else
{
echenillagecasse=LOW;
}




  if (digitalRead(inter)== HIGH) // si l'inter est en position marche
  {
    if (echenillagecasse==HIGH || etiquetteremonte==HIGH)  // SI LES ETIQUETTES REMONTE PENDANT PLUS DE 5 SECONDES OU QUE L ECHENILLAGE CASSE PENDANT PLU DE 10 SECONDE
    {
      digitalWrite(relais, HIGH);  //on active la sortie relais
      tone (buzzer,900);      
    }
  }
    else
   {
    digitalWrite(buzzer, LOW); // ON DESACTIVE LE BUZZER    a valider
    digitalWrite(relais, LOW); // ON DESACTIVE LE RELAIS 
   }


}

Le code ne se met pas en Quote, il se met entre balises CODE : </>
C'est plus facile à copier/coller.

Et ça compile ? Ça fonctionne ?

alors ça compile oui, ça fonctionne non... et je comprend pas pourquoi, c est pourtant un truc simple

en gros, si j'ai un truc plus de xxx secondes non stop devant la sonde, j active la sortie relais et je tone

si j ai strictement rien pendant plus de xxx secondes pareil

si j ai un coup un truc, un coupe rien, je laisse le relais et le buzzer eteint.....

//definition entrées et sorties

/*
 * D2=entrée sonde      etat haut 4.5v si quelque chose devant la sonde, et 0v si rien
 * D3=buzzer tone
 * D4=entree interrupteur
 * D5=relais
 */
#define sonde 2
#define buzzer 3
#define inter 4
#define relais 5


//declaration variable
int tempssondepleine=0;
int tempssondevide=0;
int etiquetteremonte=0;
int echenillagecasse=0;
int timersondepleine=0;
int timersondevide=0;
unsigned long time;



void setup() {
  // put your setup code here, to run once:

//pinmode
pinMode(sonde, INPUT);
pinMode(buzzer,OUTPUT);
digitalWrite(buzzer, HIGH);
pinMode(inter, INPUT);
pinMode(relais, OUTPUT);
digitalWrite(relais, HIGH);



digitalWrite(buzzer, HIGH); // ON DESACTIVE LE BUZZER    a valider
digitalWrite(relais, HIGH); // ON DESACTIVE LE RELAIS

delay(5000);

}

void loop() {
  // put your main code here, to run repeatedly:

time = millis();





//DEFINITION TIMER SI LES ETIQUETTES REMONTE DANS L ECHENILLAGE

tempssondepleine=5000; // 5 SECONDE

if (digitalRead(sonde)==LOW) //si rien devant la sonde
{
timersondepleine=time + tempssondepleine; //ON RAFRAICHIT TIMERSONDEPLEINE
}
else if (digitalRead(sonde)==HIGH && time > timersondepleine)  // SI UNE ETIQUETTE EST DEVANT LA SONDE NON STOP PENDANT PLUS DE 5 SECONDE
{
etiquetteremonte=HIGH;
}
else
{
etiquetteremonte=LOW;
}


//DEFINITION TIMER SI L ECHENILLAGE CASSE

tempssondevide=10000; //10 SECONDE

if (digitalRead(sonde)== HIGH) //SI QUELQUE CHOSE DEVANT LA SONDE
{
timersondevide=time + tempssondevide; //ON RAFRAICHIT TIMERSONDEVIDE
}
else if (digitalRead(sonde)==LOW && time > timersondevide)  // SI RIEN EST DEVANT LA SONDE NON STOP PENDANT PLUS DE 10 SECONDE
{
echenillagecasse=HIGH;
}
else
{
echenillagecasse=LOW;
}




  if (digitalRead(inter)== HIGH) // si l'inter est en position marche
  {
    if (echenillagecasse== HIGH || etiquetteremonte== HIGH)  // SI LES ETIQUETTES REMONTE PENDANT PLUS DE 5 SECONDES OU QUE L ECHENILLAGE CASSE PENDANT PLU DE 10 SECONDE
    {
      digitalWrite(relais, LOW);  //on active la sortie relais
      tone (buzzer,900);      
    }
  }
   else
   {
    digitalWrite(buzzer, HIGH); // ON DESACTIVE LE BUZZER  
    digitalWrite(relais, HIGH); // ON DESACTIVE LE RELAIS 
   }

}

deja HIGH c est sortie 5v ou 0v? a priori 0v

HIGH c'est 5V
Tu dois définir ta variable mesurant le temps en unsigned long. Le nom time pouvant être réservé, choisis autre chose. Je prends en général chrono

unsigned long chrono =millis () ;

Ensuite ta gestion du temps est bizarre. Ton test vérifie que 5 secondes se sont écoulées depuis le lancement du programme. Il sera donc vrai tout le temps à partir de ces 5 secondes. Est-ce bien ce que tu veux ?

Édit : après lecture plus approfondie, c'est un peu plus complexe que je l'avais cru au départ...

Explique nous ce que doit faire ton code, sinon on ne peut t'aider que pour la syntaxe...

j'ai une machine a decouper des etiquettes autocollantes

une fois la decoupe faite, on fait ce qu on appel l echnillage

exemple sur une machine plus grosse que la mienne Echenillage vidéo satisfaisante - YouTube

il y a 2 cas genant pendant la decoupe qui font que je dois toujours avoir un oeil attentif sur la machine, alors que je ne devrais pas

-soit la decoupe est pas assez profonde et dans ce cas tout les etiquettes remonte avec l echenillage

dans ce cas ma sonde va detecter une bande en continue pendant plus de xxx seconde non stop

-soit l echenillage casse, et du coup il reste coller, et se reenroule avec la bobine d etiquette

dans les 2 cas j'active un relais et une sortie buzzer pour m alerter

le fonctionnement normal, comme sur la video est que le faisceau de la sonde est interrompu regulierement, dans ce cas pas de relais nis de buzzer

voici le code debuger avec un pote

//definition entrées et sorties

/*
 * D2=entrée sonde      etat haut 4.5v si quelque chose devant la sonde, et 0v si rien
 * D3=buzzer tone
 * D4=entree interrupteur
 * D5=relais
 */
#define sonde 2
#define buzzer 3
#define inter 4
#define relais 5


//declaration variable
//DEFINITION TIMER SI LES ETIQUETTES REMONTE DANS L ECHENILLAGE
#define TEMPS_SONDE_PLEINE  5000 // 5 SECONDES
#define TEMPS_SONDE_VIDE    10000; //10 SECONDES

bool etiquetteremonte=false;
bool echenillagecasse=false;
int timersondepleine=0;
int timersondevide=0;
unsigned long chrono=0;



void setup()
{
  Serial.begin(115200);

  //pinmode
  pinMode(sonde, INPUT);
  pinMode(buzzer,OUTPUT);
  digitalWrite(buzzer, LOW);
  pinMode(inter, INPUT);
  pinMode(relais, OUTPUT);
  digitalWrite(relais, HIGH);
  timersondepleine = chrono + TEMPS_SONDE_PLEINE;
  timersondevide=chrono + TEMPS_SONDE_VIDE;
}


void loop()
{
  //delay(500);
  chrono = millis();
  //Serial.print(timersondepleine);
  if (digitalRead(sonde)==LOW) //si rien devant la sonde
  {
    //Serial.print(".");
    timersondepleine = chrono + TEMPS_SONDE_PLEINE; //ON RAFRAICHIT TIMERSONDEPLEINE
  }
  if (digitalRead(sonde)==HIGH && chrono > timersondepleine)  // SI UNE ETIQUETTE EST DEVANT LA SONDE NON STOP PENDANT PLUS DE 5 SECONDE
  {
    etiquetteremonte=true;
    Serial.print("\nEtiquetteRemonte\n");
  }
  else
  {
    etiquetteremonte=false;
  }

  //DEFINITION TIMER SI L ECHENILLAGE CASSE


  if (digitalRead(sonde)== HIGH) //SI QUELQUE CHOSE DEVANT LA SONDE
  {
    Serial.print("Q");
    timersondevide=chrono + TEMPS_SONDE_VIDE; //ON RAFRAICHIT TIMERSONDEVIDE
  }
  if (digitalRead(sonde)==LOW && chrono > timersondevide)  // SI RIEN EST DEVANT LA SONDE NON STOP PENDANT PLUS DE 10 SECONDE
  {
    echenillagecasse=true;
    Serial.print("\nCasse\n");
  }
  else
  {
    echenillagecasse=false;
    //Serial.print("false");
  }

  if (digitalRead(inter)== HIGH) // si l'inter est en position marche
  {
    if (echenillagecasse== true || etiquetteremonte== true)  // SI LES ETIQUETTES REMONTE PENDANT PLUS DE 5 SECONDES OU QUE L ECHENILLAGE CASSE PENDANT PLU DE 10 SECONDE
    {
      digitalWrite(relais, LOW);  //on active la sortie relais
      tone (buzzer,900);      
    }
    else
    {
      digitalWrite(buzzer, LOW); // ON DESACTIVE LE BUZZER  
      digitalWrite(relais, HIGH); // ON DESACTIVE LE RELAIS 
    }
  }
  else
  {
    digitalWrite(buzzer, LOW); // ON DESACTIVE LE BUZZER  
    digitalWrite(relais, HIGH); // ON DESACTIVE LE RELAIS 
  }

}

merci tout le monde