J'ai crée un code et il y a une erreur pouvez vous m'aider ?

POUVEZ-VOUS M'AIDER ?

(Sur 'ARDUINO UNO')

Sur le message d'erreur il y a écrit:

Compilation error: a founction-definition is not allowed here before '{' token

Voici le code:

#define LED 13
#define LED1 12
#define LED2 11
#define BUTTON 10


const int ledPin = 9;


int buttonState = 0;


void setup() {
 Serial.begin(9600);
 pinMode(13, OUTPUT);
 pinMode(12, OUTPUT);
 pinMode(11, OUTPUT);
 pinMode(ledPin, OUTPUT);
 pinMode(10, INPUT);
}

void loop() {
  digitalWrite (LED, HIGH);
  Serial.println("LED R ALUMEE");
  delay (5000);
  digitalWrite (LED, LOW);
  Serial.println("LED R ETEINTE");
  digitalWrite (LED1, HIGH);
  Serial.println("LED V ALUMEE");
  delay (5000);
  digitalWrite (LED1, LOW);
  Serial.println("LED V ETEINTE");
  digitalWrite (LED2, HIGH);
  Serial.println("LED G ALUMEE");
  delay (2000);
  digitalWrite (LED2, LOW);
  Serial.println("LED G ETEINTE");
  if(buttonState == HIGH) {
   void loop (){                // IL Y A ECRIT QUE IL Y A L'ERREUR ICI
    digitalWrite(ledPin, HIGH);
    }
   }
  }

MERCI d'avance ! :grin:

Bonjour,

Tu as une redéfinition de loop() à l’intérieur de la loop

  if(buttonState == HIGH) {
   void loop (){                // IL Y A ECRIT QUE IL Y A L'ERREUR ICI
    digitalWrite(ledPin, HIGH);
    }
   }

Je n'arrive pas à comprendre ce que tu veux faire.

que ca allume une led et que plus rien se passe (que la led reste allumé et que tout s'arrete(sauf la led))

Salut !
c'est normal, tu as mis une fonction void loop dans la fonction loop de ton programme !!! Ici :

La fonction loop est une fonction prédéfinie dans la bibliothèque Arduino (cachée par l'IDE). Elle ne peut être utilisée qu'une seule fois dans le code, c'est là que l'on met en général le corps du code, celui qui doit s'exécuter tout le temps. En revanche, on ne peut pas l'utiliser pour boucler dans le code - ça, c'est le rôle d'une toute autre fonction, nommée for. Voici sa syntaxe :

for(int i = 0; i < un_nombre; i++) { // ou i--
  // le code
}

J'imagine que ce que tu voulais faire, c'était de boucler jusqu'à ce que les LEDs soient toutes allumées, si le bouton est pressé :wink: Pour cela, mieux vaut soit utiliser une boucle for, soit allumer successivement les 4 LEDs. Ici, ce n'est pas possible, car ce n'est pas linéaire. Tu peux simplement allumée tes 4 LEDs avec digitalWrite(pin_de_la_led, HIGH) (×4).

EDIT : devancé par @kamill :innocent:


Il y a deux ou trois trucs qui me gênent dans ton code :

Serial.begin(9600)

C'est pas très rapide, ça... Mets plutôt 115200


Pourquoi ne pas utiliser tes define pour déclarer les pins de ton bouton et de tes LEDs dans le setup ? Comme ceci :

pinMode(LED, OUTPUT);
 pinMode(LED1, OUTPUT);
 pinMode(LED2, OUTPUT);
 pinMode(ledPin, OUTPUT);
 pinMode(BUTTON, INPUT);

Tu peux déclarer ton bouton avec INPUT_PULLUP, ça évitera d'avoir un état flottant quand le bouton n'est pas pressé :

pinMode(BUTTON, INPUT_PULLUP);

Bonne bidouilles ! :wink:
Amitiés
R-P7

EDIT : c'est pour quoi, ce code ? :grin:

1 Like

je veut que il y ait que la led qui est pas allumé qui s'allume et les autres s'éteignent

Pour ton EDIT :

pour un feu tricolore
feu tricollore

Le dernier LED c'est pour le jaune qui clignote quand ou appuie sur le bouton

OK - Ce n'est pas les tutos qui manquent sur le net à ce sujet, par exemple :

Le code est expliqué :slight_smile:.
Et comme la fonctionnalité

ne fonctionne pas, tu vas comprendre pourquoi. La gestion d'un bouton, c'est pas quelque chose de simple. Regarde ça : Un simple bouton - Arduino : premiers pas en informatique embarquée • Tutoriels • Zeste de Savoir


Comme j'ai l'impression que tu es débutant, un peu de lecture :

Ce document, écris par @Eskimon - souvent cité comme référence sur le forum - explique de A à Z comment faire de l'Arduino, en passant autant par la programmation que par le hardware...

Bonne journée
Amitiés
Rémi

1 Like

Bonjour dariusistoc1

Comme l'a dit @kamill tu ne peut pas faire une boucle d'attente en utilisant loop(), cette syntaxe est réservée au langage Arduino.

Pour une boucle d'attente il y a while() qui veut dire "tant que", ainsi, tant que BUTTON n'est pas pressé, on ne fait rien, traduit en Arduino, ça donne ceci:

	Serial.println("\nAttente pression bouton");

	digitalWrite(ledPin, HIGH);     // Allumage ledPin
	while(digitalRead(BUTTON) == HIGH)     // Tant que le bouton n'est pas pressé
	{
		// On ne fait rien
	}
	digitalWrite(ledPin, LOW);     // Extinction ledPin

Pour ce faire, il faut que BUTTON soit en mode PULLUP:
pinMode(BUTTON, INPUT_PULLUP);
Physiquement, ton bouton est câblé, d'un côté à GND et de l'autre à la pin de l'Arduino (BUTTON).
Regardes Résistance pull up intégrée au microcontrôleur

Ton programme corrigé:

#define LED 13
#define LED1 12
#define LED2 11
#define BUTTON 10


const int ledPin = 9;


int buttonState = 0;


void setup() 
{
	Serial.begin(9600);
	pinMode(LED, OUTPUT);
	pinMode(LED1, OUTPUT);
	pinMode(LED2, OUTPUT);
	pinMode(ledPin, OUTPUT);
	pinMode(BUTTON, INPUT_PULLUP);
}

void loop() 
{
	digitalWrite (LED, HIGH);
	Serial.println("LED R ALUMEE");
	delay (5000);
	digitalWrite (LED, LOW);
	Serial.println("LED R ETEINTE");
	digitalWrite (LED1, HIGH);
	Serial.println("LED V ALUMEE");
	delay (5000);
	digitalWrite (LED1, LOW);
	Serial.println("LED V ETEINTE");
	digitalWrite (LED2, HIGH);
	Serial.println("LED G ALUMEE");
	delay (2000);
	digitalWrite (LED2, LOW);
	Serial.println("LED G ETEINTE");
	Serial.println("\nAttente pression bouton");

	digitalWrite(ledPin, HIGH);     // Allumage ledPin
	while(digitalRead(BUTTON) == HIGH)     // Tant que le bouton n'est pas pressé
	{
		// On ne fait rien
	}
	digitalWrite(ledPin, LOW);     // Extinction ledPin
}

A+
Cordialement
jpbbricole

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