Message erreur avec arduino

Bonsoir
étant débutant sur arduino, j'ai réalisé ce programme
mais à la verification, j'ai systématiquement le message d'erreur suivant :

expected unqualified-id before '{' token
Voici le programme

[code]
// Gestionrelais

#include <OneButton.h>
const byte ButtonIR1 = 0; // notre IR1 est sur la pin 0
const byte ButtonIR2 = 1; // notre IR2 est sur la pin 1
const byte ButtonIR3 = 2; // notre IR3 est sur la pin 2
const byte ButtonIR4 = 3; // notre IR4 est sur la pin 3

OneButton button1(ButtonIR1, true); // true pour le mettre en INPUT_PULLUP
OneButton button2(ButtonIR2, true); // true pour le mettre en INPUT_PULLUP
OneButton button3(ButtonIR3, true); // true pour le mettre en INPUT_PULLUP
OneButton button4(ButtonIR4, true); // true pour le mettre en INPUT_PULLUP


// les pins utilisées pour les relais
const byte pinH1B1 = 4; // relais H1 B1
const byte pinH1B2 = 5; // relais H1 B2
const byte pinH2B1 = 6; // relais H2 B1
const byte pinH2B2 = 7; // relais H2 B2


// La fonction de call back, appellée automatiquement quand on clique
// ------------------------------------------------------
void simpleclick1()
{
    //IR1 detectee
    // H1B1 s'enclence
      digitalWrite(pinH1B1, HIGH); // HB s'enclenche
  
  if (pinH1B1, HIGH);
  digitalWrite(pinH2B1, LOW); // H2B1 bloqué
  digitalWrite(pinH2B1, LOW); // H2B2 bloqué
      } 

    
    void simpleclick2()
{
    //IR2 detectee
    // H1B1 se coupe
    //H1B2 s'enclenche
      digitalWrite(pinH1B1, LOW); // H1B1 se coupe
      delay(50);
      digitalWrite(pinH1B2, HIGH); // H1B2 s'enclenche
  
  if (pinH1B2, HIGH);
  digitalWrite(pinH2B1&&pinH2B1, LOW);//bloque
      delay (1000);
}

 void simpleclick3()
{
   // Capteur ds l'autre sens
   
     //IR3 detectee
    // H2B1 s'enclence
      digitalWrite(pinH2B1, HIGH); // H2B1 s'enclenche
  
  if (pinH2B1, HIGH);
  digitalWrite(pinH1B1, LOW); // H1B1 bloqué
  digitalWrite(pinH1B1, LOW); // H1B2 bloqué
}
  
   //void simpleclick4()

{
    //IR4 detectee
    // H2B1 se coupe
    //H2B1 s'enclenche
      digitalWrite(pinH2B1, LOW); // H2B1 se coupe
      delay(50);
      digitalWrite(pinH2B2, HIGH); // H2B2 s'enclenche
  
  if (pinH2B2, HIGH);
  digitalWrite(pinH1B1&&pinH1B1, LOW);//bloque
      delay (1000);
}


// ------------------------------------------------------
// On initialise notre système dans le setup
// ------------------------------------------------------
void setup() 
{
  pinMode(pinH1B1, OUTPUT);
  pinMode(pinH1B2, OUTPUT);
  pinMode(pinH2B1, OUTPUT);
  pinMode(pinH2B2, OUTPUT);


   // On attache la fonction simpleClick() comme callBack
  button1.attachClick(simpleclick1);
  button2.attachClick(simpleclick2);
  button3.attachClick(simpleclick3);
  button4.attachClick(simpleclick4);
}


void loop() 
{

  button1.tick();
  button2.tick();
  button3.tick();
  button4.tick();

}
[/code]

Pouvez-vous m'aider ?
Cordialement

remplace le ; par {
Plusieurs fois
Et indente correctement ton code en tapant Control-T

Bonjourphiliou

C'est à cause de cette ligne,

elle est en remarque ce qui fait que l'accolade ({) suivante n'a pas de sens et que cette ligne
button4.attachClick(simpleclick4);
invoque une fonction qui n'existe pas.

Supprimes les //.

Cordialement
jpbbricole

Bonjour
un grand merci le code semble etre bon maintenant

Bonjour,

Le code compile peut être, mais on ne peut pas dire qu'il soit bon
Ceci 'if (pinH1B1, HIGH);' ne fait strictement rien.
Ceci 'digitalWrite(pinH2B1 && pinH2B1, LOW);' ne fait certainement pas ce que tu as voulu faire

Bonjour
la ligne de code 'if (pinH1B1, HIGH) pour moi veut dire : si pinH1B1 est high, alors (pinH2B1, LOWpasse à O
(pinH2B1, LOW); passe a 0

Pour 'digitalWrite(pinH2B1 && pinH2B1, LOW);
cela veut dire que les sorties H2B1 et H2B2 passent à O
(j'avais écris par erreur 2 fois H2B1 ds le code)
Cordialement

Dans le premier cas il faudrait écrire

  if (digitalRead(pinH1B1) == HIGH)
  {
    digitalWrite(pinH2B1, LOW); // H2B1 bloqué
    digitalWrite(pinH2B2, LOW); // H2B2 bloqué
  }

Dans le deuxième cas

  digitalWrite(pinH2B1, LOW);
  digitalWrite(pinH2B2, LOW);

Merci pour ces précieuses indications
je vais tester

J'ai fais les modifs mais je rencontre toujours le meme soucis dans le void loop du bas

a function-definition is not allowed here before '{' token

[code]
void loop()
{

  button1.tick();
  button2.tick();
  button3.tick();
  button4.tick();

}
[/code]

Bonjour philiou

Mets le code au complet.

Cordialement
jpbbricole

Voici le code au complet
Merci de votre aide

[code]
// Gestionrelais

#include <OneButton.h>
const byte ButtonIR1 = 0; // notre IR1 est sur la pin 0
const byte ButtonIR2 = 1; // notre IR2 est sur la pin 1
const byte ButtonIR3 = 2; // notre IR3 est sur la pin 2
const byte ButtonIR4 = 3; // notre IR4 est sur la pin 3

OneButton button1(ButtonIR1, true); // true pour le mettre en INPUT_PULLUP
OneButton button2(ButtonIR2, true); // true pour le mettre en INPUT_PULLUP
OneButton button3(ButtonIR3, true); // true pour le mettre en INPUT_PULLUP
OneButton button4(ButtonIR4, true); // true pour le mettre en INPUT_PULLUP


// les pins utilisées pour les relais
const byte pinH1B1 = 4; // relais H1 B1
const byte pinH1B2 = 5; // relais H1 B2
const byte pinH2B1 = 6; // relais H2 B1
const byte pinH2B2 = 7; // relais H2 B2


// La fonction de call back, appellée automatiquement quand on clique
// ------------------------------------------------------
void simpleclick1()
{
  //IR1 detectee
  // H1B1 s'enclence
  digitalWrite(pinH1B1, HIGH); // HB s'enclenche

  if (digitalRead(pinH1B1)==HIGH)
  {
  digitalWrite(pinH2B1, LOW); // H2B1 bloqué
  digitalWrite(pinH2B1, LOW); // H2B2 bloqué
}


void simpleclick2()
{
  //IR2 detectee
  // H1B1 se coupe
  //H1B2 s'enclenche
  digitalWrite(pinH1B1, LOW); // H1B1 se coupe
  delay(50);
  digitalWrite(pinH1B2, HIGH); // H1B2 s'enclenche

  if (digitalRead(pinH1B2==HIGH)
  {
  digitalWrite(pinH2B1, LOW); //Bloque
  digitalWrite(pinH2B2, LOW); //Bloque
  delay (1000);
}
}

void simpleclick3()
{
  // Capteur ds l'autre sens

  //IR3 detectee
  // H2B1 s'enclence
  digitalWrite(pinH2B1, HIGH); // H2B1 s'enclenche

  if(digitalRead(pinH2B1==HIGH)
  {
  digitalWrite(pinH1B1, LOW); // H1B1 bloqué
  digitalWrite(pinH1B1, LOW); // H1B2 bloqué
}
}

void simpleclick4()

{
  //IR4 detectee
  // H2B1 se coupe
  //H2B1 s'enclenche
  digitalWrite(pinH2B1, LOW); // H2B1 se coupe
  delay(50);
  digitalWrite(pinH2B2, HIGH); // H2B2 s'enclenche

  if (digitalRead(pinH2B2==HIGH)
  {
  digitalWrite(pinH1B1,LOW); //bloque
  digitalWrite(pinH1B2,LOW); //bloque
  delay (1000);
}
}

// ------------------------------------------------------
// On initialise notre système dans le setup
// ------------------------------------------------------
void setup()
{
  pinMode(pinH1B1, OUTPUT);
  pinMode(pinH1B2, OUTPUT);
  pinMode(pinH2B1, OUTPUT);
  pinMode(pinH2B2, OUTPUT);


  // On attache la fonction simpleClick() comme callBack
  button1.attachClick(simpleclick1);
  button2.attachClick(simpleclick2);
  button3.attachClick(simpleclick3);
  button4.attachClick(simpleclick4);
}


void loop()
{

  button1.tick();
  button2.tick();
  button3.tick();
  button4.tick();

}
[/code]

Il manque un } à la fin de void simpleclick1()
il manque une ) dans le if (digitalRead(pinH1B2) == HIGH)

effectivement c'était bien cela il faut vraiment etre très vigilant sur les caracteres

Merci encore , je vais tester

Bonjour philiou

Tu as uin problème structurel, il semble que presque tout tes fonctions comme simpleclick2(), simpleclick3() etc, sont imbriquées dans simpleclick1(). Il n'est pas possible d'avoir une ou des fonctions dans une fonction. Il faut les mettre "les une sur les autres".
Tes conditiuons
if (digitalRead(pinH1B2 == HIGH)
devraient être
if (digitalRead(pinH1B2) == HIGH)

Encore une autre remarque à propos de

const byte ButtonIR1 = 0; // notre IR1 est sur la pin 0
const byte ButtonIR2 = 1; // notre IR2 est sur la pin 1

Si tu travailles avec un UNO entre autres, sache que ces 2 pin sont aussi utilisées pour le port série qui sert à télécharger les programmes,
image

ça peut causer quelques ennuis, suivant ce que tu programmes sur ces 2 ports.
Je te mets ton programme corrigé, ça compile, mais pas testé.

// Gestionrelais

#include <OneButton.h>
const byte ButtonIR1 = 0; // notre IR1 est sur la pin 0
const byte ButtonIR2 = 1; // notre IR2 est sur la pin 1
const byte ButtonIR3 = 2; // notre IR3 est sur la pin 2
const byte ButtonIR4 = 3; // notre IR4 est sur la pin 3

OneButton button1(ButtonIR1, true); // true pour le mettre en INPUT_PULLUP
OneButton button2(ButtonIR2, true); // true pour le mettre en INPUT_PULLUP
OneButton button3(ButtonIR3, true); // true pour le mettre en INPUT_PULLUP
OneButton button4(ButtonIR4, true); // true pour le mettre en INPUT_PULLUP


// les pins utilisées pour les relais
const byte pinH1B1 = 4; // relais H1 B1
const byte pinH1B2 = 5; // relais H1 B2
const byte pinH2B1 = 6; // relais H2 B1
const byte pinH2B2 = 7; // relais H2 B2



// ------------------------------------------------------
// On initialise notre système dans le setup
// ------------------------------------------------------
void setup()
{
	pinMode(pinH1B1, OUTPUT);
	pinMode(pinH1B2, OUTPUT);
	pinMode(pinH2B1, OUTPUT);
	pinMode(pinH2B2, OUTPUT);


	// On attache la fonction simpleClick() comme callBack
	button1.attachClick(simpleclick1);
	button2.attachClick(simpleclick2);
	button3.attachClick(simpleclick3);
	button4.attachClick(simpleclick4);
}


void loop()
{
	button1.tick();
	button2.tick();
	button3.tick();
	button4.tick();

}
// La fonction de call back, appellée automatiquement quand on clique
// ------------------------------------------------------
void simpleclick1()
{
	//IR1 detectee
	// H1B1 s'enclence
	digitalWrite(pinH1B1, HIGH); // HB s'enclenche

	if (digitalRead(pinH1B1) == HIGH)
	{
		digitalWrite(pinH2B1, LOW); // H2B1 bloqué
		digitalWrite(pinH2B1, LOW); // H2B2 bloqué
	}
}

void simpleclick2()
{
	//IR2 detectee
	// H1B1 se coupe
	//H1B2 s'enclenche
	digitalWrite(pinH1B1, LOW); // H1B1 se coupe
	delay(50);
	digitalWrite(pinH1B2, HIGH); // H1B2 s'enclenche

	if (digitalRead(pinH1B2) == HIGH)
	{
		digitalWrite(pinH2B1, LOW); //Bloque
		digitalWrite(pinH2B2, LOW); //Bloque
		delay (1000);
	}
}

void simpleclick3()
{
	// Capteur ds l'autre sens

	//IR3 detectee
	// H2B1 s'enclence
	digitalWrite(pinH2B1, HIGH); // H2B1 s'enclenche

	if (digitalRead(pinH2B1) == HIGH)
	{
		digitalWrite(pinH1B1, LOW); // H1B1 bloqué
		digitalWrite(pinH1B1, LOW); // H1B2 bloqué
	}
}

void simpleclick4()
{
	//IR4 detectee
	// H2B1 se coupe
	//H2B1 s'enclenche
	digitalWrite(pinH2B1, LOW); // H2B1 se coupe
	delay(50);
	digitalWrite(pinH2B2, HIGH); // H2B2 s'enclenche

	if (digitalRead(pinH2B2) == HIGH)
	{
		digitalWrite(pinH1B1, LOW); //bloque
		digitalWrite(pinH1B2, LOW); //bloque
		delay (1000);
	}
}

Cordialement
jpbbricole

Merci pour toutes infos
J'ai fait les corrections
Pour info, le code sera utilisé sur un attiny 84 d'où le brochage
Par contre je me rends compte qu'il n'est peut être pas utile de charger la bibiotheque Input-pullup car ce sont des capteurs IR qui généreront une impulsion négative

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.