Erreur lors de la compilation "redeclared as different kind of symbol"

Bonjour, je suis en train de finaliser un projet et lors de la compilation de mon programme une erreur que je ne connaissais, celle-ci :

redeclared as different kind of symbol

Je vous met mon programme ci-dessous au cas où le problème venait de celui-ci

#include <Adafruit_NeoPixel.h>
int buzzerPin = 3; // broche du buzzer
int capteur =7; // broche du capteur de lumière
int stick = 6 ; // broche du stick à led
int val = 0; // pour lire la valeur du capteur de lumière
Adafruit_NeoPixel strip = Adafruit_NeoPixel (16, 6, NEO_RGB + NEO_KHZ800);


void setup()
{
  strip.begin();
  strip.show(); // Initialise toutes les NeoPixels en "off"
  pinMode(buzzerPin, OUTPUT); // Programme le buzzer en sortie logique
  pinMode(capteur, INPUT); // Programme le capteur en entrée logique
}

void loop()
{


 val = digitalRead(capteur); // on lis la valeur que renvoie le capteur
  
   if (val == LOW)
   {              // si la valeur d'entrée est haute
   digitalWrite(stick, HIGH);   
  } 
  else
  {
  digitalWrite(stick, LOW);
    }
   
   val = digitalRead(capteur);
 if (val ==  HIGH) {          // Si la valeur est haute
      noTone(buzzerPin);
  }
  else {
  
    tone(buzzerPin, 11000, 300);// on allume le buzzer
    delay(2000);
         }



 
   }

void stick() {
strip.setPixelColor(0, 127, 127, 127); // Blanc
strip.setPixelColor(1, 127, 127, 127); // Blanc
strip.setPixelColor(2, 127, 127, 127); // Blanc
strip.setPixelColor(3, 127, 127, 127); // Blanc
strip.setPixelColor(4, 127, 127, 127); // Blanc
strip.setPixelColor(5, 127, 127, 127); // Blanc
strip.setPixelColor(6, 127, 127, 127); // Blanc
strip.setPixelColor(7, 127, 127, 127); // Blanc
strip.setPixelColor(8, 127, 127, 127); // Blanc
strip.setPixelColor(9, 127, 127, 127); // Blanc
strip.setPixelColor(10, 127, 127, 127); // Blanc
strip.setPixelColor(11, 127, 127, 127); // Blanc
strip.setPixelColor(12, 127, 127, 127); // Blanc
strip.setPixelColor(13, 127, 127, 127); // Blanc
strip.setPixelColor(14, 127, 127, 127); // Blanc
strip.setPixelColor(15, 127, 127, 127); // Blanc
strip.setPixelColor(16, 127, 127, 127); // Blanc
}

Et merci d'avance pour votre aide qui n peut-être que bénéfique

Bonjour,

C'est parce que tu as défini stick a la fois comme étant un int (variable globale) et à la fois comme une fonction (void stick() {...}) doit l'émoi du compilateur ;-). Appelle par exemple ta fonction stickFunc().

Salut, tout d'abord merci pour ton aide, j'ai appliqué ce que tu m'a dis mais un autre message d'erreur arrivent sur la ligne où je déclare ma fonction :

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

Je remet le code modifié ci-dessous :

#include <Adafruit_NeoPixel.h>
#include <OneSheeld.h>
#define CUSTOM_SETTINGS
#define INCLUDE_PUSH_BUTTON_SHIELD
int buzzerPin = 3; // broche du buzzer
int Pushbutton1 = 4; // Broche du 1er boutton poussoir
int Pushbutton2 = 5; // Broche du 2ème boutton poussoir 
int capteur =7; // broche du capteur de lumière
int stick = 6 ; // broche du stick à led
int val = 0; // pour lire la valeur du capteur de lumière
Adafruit_NeoPixel strip = Adafruit_NeoPixel (16, 6, NEO_RGB + NEO_KHZ800);


void setup()
{
  strip.begin();
  strip.show(); // Initialise toutes les NeoPixels en "off"
  pinMode(buzzerPin, OUTPUT); // Programme le buzzer en sortie logique
  pinMode(capteur, INPUT); // Programme le capteur en entrée logique
  OneSheeld.begin();
}

void loop()
{


 val = digitalRead(capteur); // on lis la valeur que renvoie le capteur
  
   if (val>350)
   {              // si la valeur d'entrée est haute
   digitalWrite(stickfunc, HIGH);   
  } 
  else
  {
  digitalWrite(stickfunc, LOW);
    }
   
   if(PushButton.isPressed())
  {
    
    digitalWrite(buzzerPin,HIGH);
  }
  else
  {
    digitalWrite(buzzerPin,LOW);
  }

void stickfunc() {
strip.setPixelColor(0, 127, 127, 127); // Blanc
strip.setPixelColor(1, 127, 127, 127); // Blanc
strip.setPixelColor(2, 127, 127, 127); // Blanc
strip.setPixelColor(3, 127, 127, 127); // Blanc
strip.setPixelColor(4, 127, 127, 127); // Blanc
strip.setPixelColor(5, 127, 127, 127); // Blanc
strip.setPixelColor(6, 127, 127, 127); // Blanc
strip.setPixelColor(7, 127, 127, 127); // Blanc
strip.setPixelColor(8, 127, 127, 127); // Blanc
strip.setPixelColor(9, 127, 127, 127); // Blanc
strip.setPixelColor(10, 127, 127, 127); // Blanc
strip.setPixelColor(11, 127, 127, 127); // Blanc
strip.setPixelColor(12, 127, 127, 127); // Blanc
strip.setPixelColor(13, 127, 127, 127); // Blanc
strip.setPixelColor(14, 127, 127, 127); // Blanc
strip.setPixelColor(15, 127, 127, 127); // Blanc
strip.setPixelColor(16, 127, 127, 127); // Blanc
}

C'est parce que tu as oublié de "fermer" la fonction loop (avec une '}') avant de commencer à définir ta fonction stickfunc.

Regarde bien la cohérence des couples '{' et de '}'

Sinon si tu continues à nous soumettre des erreurs de compilation, c'est plus simple pour nous que tu copies le message entier (y compris le numéro de ligne).

A+,

PS je ne serai pas dispo avant ce soir pour d'autre aide.

Les digitalWrite doivent utiliser la variable stick, pas le nom de la fonction stickfunc :
digitalWrite(stick, LOW);et il manque une accolade '}' à la fin de la loop, juste avant la définition de la fonction.

EDIT : Damned, coiffé au poteau par supercc !!! :slight_smile:
Au passage, tu pourrais simplifier ta fonction en faisant une boucle for...

Mais je pense que tu n'as pas compris l'utilisation de la barre de LEDs. Tu ne l'allumes pas avec un digitalWrite. C'est ta fonction qui doit allumer ou éteindre la barre :

#include <Adafruit_NeoPixel.h>
#include <OneSheeld.h>
#define CUSTOM_SETTINGS
#define INCLUDE_PUSH_BUTTON_SHIELD
int buzzerPin = 3; // broche du buzzer
int Pushbutton1 = 4; // Broche du 1er boutton poussoir
int Pushbutton2 = 5; // Broche du 2ème boutton poussoir 
int capteur =7; // broche du capteur de lumière
int stick = 6 ; // broche du stick à led
int val = 0; // pour lire la valeur du capteur de lumière
Adafruit_NeoPixel strip = Adafruit_NeoPixel (16, stick, NEO_RGB + NEO_KHZ800); // <-- stick intervient ici (c'est tout)


void setup()
{
  strip.begin();
  strip.show(); // Initialise toutes les NeoPixels en "off"
  pinMode(buzzerPin, OUTPUT); // Programme le buzzer en sortie logique
  pinMode(capteur, INPUT); // Programme le capteur en entrée logique
  OneSheeld.begin();
}

void loop()
{


 val = digitalRead(capteur); // on lit la valeur que renvoie le capteur
  
   if (val>350)
   {              // si la valeur d'entrée est haute
   stickfunc(1);   //  <-- Appel de la fonction pour allumer
  } 
  else
  {
  stickfunc(0);  //  <-- Appel de la fonction pour éteindre
    }
   
   if(PushButton.isPressed())
  {
    
    digitalWrite(buzzerPin,HIGH);
  }
  else
  {
    digitalWrite(buzzerPin,LOW);
  }

void stickfunc(int val) {

for (int i=0, i<16, i++) {
   strip.setPixelColor(i, 127*val, 127*val, 127*val); // Blanc (127) ou noir (0)
}
}

... si j'ai bien compris ton besoin...

Merci beaucoup de ton aide lesept, j'en suis très reconnaissant et tu as bien compris mon besoin, mais une petite erreur intervient à la ligne où tu appel la fonction pour l'eteindre

'stickfunc' was not declared in this scope

Je remet le code pour plus de visibilité :

#include <Adafruit_NeoPixel.h>
#include <OneSheeld.h>
#define CUSTOM_SETTINGS
#define INCLUDE_PUSH_BUTTON_SHIELD
int buzzerPin = 3; // broche du buzzer
int Pushbutton1 = 4; // Broche du 1er boutton poussoir
int Pushbutton2 = 5; // Broche du 2ème boutton poussoir 
int capteur =7; // broche du capteur de lumière
int stick = 6 ; // broche du stick à led
int val = 0; // pour lire la valeur du capteur de lumière
Adafruit_NeoPixel strip = Adafruit_NeoPixel (16, stick, NEO_RGB + NEO_KHZ800); // <-- stick intervient ici (c'est tout)


void setup()
{
  strip.begin();
  strip.show(); // Initialise toutes les NeoPixels en "off"
  pinMode(buzzerPin, OUTPUT); // Programme le buzzer en sortie logique
  pinMode(capteur, INPUT); // Programme le capteur en entrée logique
  OneSheeld.begin();
}

void loop()
{


 val = digitalRead(capteur); // on lit la valeur que renvoie le capteur
  
   if (val>350)
   {              // si la valeur d'entrée est haute
   stickfunc(1);   //  <-- Appel de la fonction pour allumer
  } 
  else
  {
  stickfunc(0);  //  <-- Appel de la fonction pour éteindre
    }
   
   if(PushButton.isPressed())
  {
    
    digitalWrite(buzzerPin,HIGH);
  }
  else
  {
    digitalWrite(buzzerPin,LOW);
  }

void stickfunc(int val) {

for (int i=0, i<16, i++) {
   strip.setPixelColor(i, 127*val, 127*val, 127*val); // Blanc (127) ou noir (0)
}
}

Bonjour,

Indentes correctement ton code en faisant CTRL T et tu verras qu'il manque un } à la fin de la loop.

D'autre part dans une boucle for on utilise des points-virgule, pas des virgules.
Tu arrives au bout ...

Quelle est la plateforme ? UNO ou MEGA ?

@+

UNO, et merci de ton aide j'ai réussis

Après compilation j'obtiens :

Le croquis utilise 26346 octets (85%) de l'espace de stockage de programmes. Le maximum est de 30720 octets.
Les variables globales utilisent 2020 octets (98%) de mémoire dynamique, ce qui laisse 28 octets pour les variables locales. Le maximum est de 2048 octets.

Cela fait peu, 28 octets de RAM.
Si tu as des problèmes de plantage ou d'instabilité, ne cherche pas.
D'autre part il te reste quelques Ko de flash, pas de quoi aller bien loin.
J'espère que tu n'ajouteras pas trop de code, sinon la MEGA est faite pour toi.

@+

C'est étonnant qu'il reste si peu de mémoire, non ? Le code est tout petit et les variables peu nombreuses.
C'est les biblis qui prennent de la place ? OneSheeld est-elle nécessaire ?

Normalement le code d'une librairie non utilisée n'est pas linké. Seul le code utile l'est.
Imaad va nous dire s'il obtient le même résultat.

@+

Désolé tout le monde pour le retard, alors tout d'abord oui j'ai besoin de la librairie OneSheeld pour mon BP qui est commandé par appli mais je vais essayer de l'enlever et je vous tiens au jus !
Merci encore pour vos aides

Update

J'ai essayer d'enlever la librairie et un message d'erreur est apparu :

Erreur de compilation pour la carte Arduino/Genuino Uno

Je vous donne mon besoin (qui me paraissait simple au début mais qui petit à petit s'est compliqué).
Je veux que dès que mon capteur de lumière indique à l'arduino que l'intensité lumineuse est inférieur à 350 le stick s'allume en blanc.
Dès que j'appuie sur un des 2 BP il y a un clignotement qui se lance (je vous met le code ci-dessous).
Et dès que j'appuie sur le 2ème BP le buzzer se met en route jusqu'à que je re-appuie dessus pour l'éteindre. Voici grosso modo mon projet.

Code du cligotement des sticks NeoPixels :

void startShow(int i) {
  switch(i){
    case 0: colorWipe(strip.Color(255, 0, 0), 50);    // Rouge
            break;
    case 1: colorWipe(strip.Color(127, 127, 127), 50);  // Blanc
            break;
    case 2: colorWipe(strip.Color(255, 0, 0), 50);  // Rouge
            break;
    case 3: colorWipe(strip.Color(127, 127, 127), 50);  // Blanc
            break;
    case 4: colorWipe(strip.Color(255, 0, 0), 50);  // Rouge
            break;
    case 5: colorWipe(strip.Color(127, 127, 127), 50);  // Blanc
            break;
    case 6: colorWipe(strip.Color(255, 0, 0), 50);  // Rouge
            break;
    case 7: colorWipe(strip.Color(127, 127, 127), 50);  // Blanc
            break;
    case 8: colorWipe(strip.Color(255, 0, 0), 50);  // Rouge
            break;
    case 9: colorWipe(strip.Color(127, 127, 127), 50);  // Blanc
            break;
    case 10: colorWipe(strip.Color(255, 0, 0), 50);  // Rouge
            break;
    case 11: colorWipe(strip.Color(127, 127, 127), 50);  // Blanc
            break;
    case 12: colorWipe(strip.Color(255, 0, 0), 50);  // Rouge
            break;
    case 13: colorWipe(strip.Color(127, 127, 127), 50);  // Blanc
            break;
    case 14: colorWipe(strip.Color(255, 0, 0), 50);  // Rouge
            break;
    case 15: colorWipe(strip.Color(127, 127, 127), 50);  // Blanc
            break;
    case 16: colorWipe(strip.Color(255, 0, 0), 50);  // Rouge
            break;
  }
}

UP

Un UP ne suffit pas, il faut que tu montres que tu as avancé.

Pour ta fonction, tu peux la simplifier comme ceci :

void startShow(int i) {
  if (i==0) return;
  else if (i%2 == 0) colorWipe(strip.Color(255, 0, 0), 50);    // Rouge
  else colorWipe(strip.Color(127, 127, 127), 50);  // Blanc
}

Mais pour le reste, il faudrait que tu proposes un début de solution...

Oui j'ai avancé mais je n'ai pas pensé à y mettre ici car je crois bien que mon problème est un problème de mémoire, du coup j'ai choisis de privilégier le clignotement dès que le 1er bouton poussoir est appuyé et le buzzer dès que le seconde est appuyé le tout sur l'appli OneSheeld.
Je met le programme ci-dessous :

#include <Adafruit_NeoPixel.h>
#include <OneSheeld.h>
#define CUSTOM_SETTINGS
#define INCLUDE_PUSH_BUTTON_SHIELD
int BuzzerPin = 3; // Broche du buzzer
int Pushbutton = 4; // Broche du bouton poussoir
int Pushbutton1 = 5; // Broche du 2ème bouton poussoir
int stick = 6; // Broche du stick à led

Adafruit_NeoPixel strip = Adafruit_NeoPixel (16, 6, NEO_RGB + NEO_KHZ800);

void setup ()

{ 
   pinMode(4, INPUT);
   pinMode(3, OUTPUT);
   strip.begin();
   strip.show(); // Initialise toutes les leds en "off"
   OneSheeld.begin();
   
}


void loop () {


 if(PushButton.isPressed()) // 
{
  startSwhow(1);

}

else 
{
  startShow(0);
}

if (PushButton.isPressed()) //
{ 
  digitalWrite(BuzzerPin, HIGH);

}
else

{
  digitalWrite(buzzerPin, LOW);
}

}



void colorWipe(int i)
for (int i=0; i<16; i++) {
   colorWipe(strip.Color(255, 0, 0), 50);    // Rouge
            
   colorWipe(strip.Color(127, 127, 127), 50);  // Blanc
            
   colorWipe(strip.Color(255, 0, 0), 50);  // Rouge
           
   colorWipe(strip.Color(127, 127, 127), 50);  // Blanc
            
   colorWipe(strip.Color(255, 0, 0), 50);  // Rouge
            
   colorWipe(strip.Color(127, 127, 127), 50);  // Blanc
            
   colorWipe(strip.Color(255, 0, 0), 50);  // Rouge
           
   colorWipe(strip.Color(127, 127, 127), 50);  // Blanc
            
   colorWipe(strip.Color(255, 0, 0), 50);  // Rouge 
            
   colorWipe(strip.Color(127, 127, 127), 50);  // Blanc
            
   colorWipe(strip.Color(255, 0, 0), 50);  // Rouge
            
   colorWipe(strip.Color(127, 127, 127), 50);  // Blanc
           
   colorWipe(strip.Color(255, 0, 0), 50);  // Rouge
            
   colorWipe(strip.Color(127, 127, 127), 50);  // Blanc
          
   colorWipe(strip.Color(255, 0, 0), 50);  // Rouge
            
   colorWipe(strip.Color(127, 127, 127), 50);  // Blanc
            
   colorWipe(strip.Color(255, 0, 0), 50);  // Rouge)

   strip.show();
}

Dès que je met ta partie de code à la place de la mienne j'ai cette erreur qui arrive :

stray '\302' in program

Je remet mon programme ici :

#include <Adafruit_NeoPixel.h>
#include <OneSheeld.h>
#define CUSTOM_SETTINGS
#define INCLUDE_PUSH_BUTTON_SHIELD
int BuzzerPin = 3; // Broche du buzzer
int Pushbutton = 4; // Broche du bouton poussoir
int Pushbutton1 = 5; // Broche du 2ème bouton poussoir
int stick = 6; // Broche du stick à led

Adafruit_NeoPixel strip = Adafruit_NeoPixel (16, 6, NEO_RGB + NEO_KHZ800);

void setup ()

{ 
   pinMode(4, INPUT);
   pinMode(3, OUTPUT);
   strip.begin();
   strip.show(); // Initialise toutes les leds en "off"
   OneSheeld.begin();
   
}


void loop () {


 if(PushButton.isPressed()) // 
{
  startSwhow(1);

}

else 
{
  startShow(0);
}

if (PushButton.isPressed()) //
{ 
  digitalWrite(BuzzerPin, HIGH);

}
else

{
  digitalWrite(buzzerPin, LOW);
}

}


void startShow(int i) {
  if (i==0) return;
  else if (i%2 == 0) colorWipe(strip.Color(255, 0, 0), 50);    // Rouge
  else colorWipe(strip.Color(127, 127, 127), 50);  // Blanc
}

Cette erreur est due à un "caractère invisible" quelque part dans le code. Le compilateur doit te donner un numéro de ligne pour cette erreur : efface cette ligne et réécris la toi même au clavier. Il arrive qu'on ait des problèmes de ce genre, le doigt glisser sur une touche ou on appuie sur 2 touches en même temps et ça donne ça.