Formatage PC, compilation impossible

Bonjour à tous,

Je viens ici vous voir car je désespère complètement…
J’ai fais deux programmes pour deux Arduino nano (emetteur/recepteur nRF24L01+ avec bibliothèque Mirf et FastLED).
Tout fonctionnait pour le mieux.
Malheureusement j’ai du réinstaller complètement mon ordinateur et depuis impossible de compiler mes deux programmes…
Je sais que je ne respecte pas forcément les standards ou les règles propres au langage, mais la je ne trouve pas de solution et évidement j’en avais besoin pour demain (c’est rappé).

Même avec d’autres versions de l’ide j’ai ce problème.
J’ai également testé sur un autre ordinateur, pareil.

Qu’est ce qui pourrait expliquer ce problème ? même des librairies connu ne fonctionne plus correctement dans mon programme (conflits exemple: “FastLED/fastled_delay.h:37:0: warning: “NOP” redefined”).

Peut on revenir en arrière sur le compileur peut être ?

Le programme émetteur compile quand même malgré la flopés d’erreur. Et l’arduino fait n’importe quoi.

Retour console pour le programme récepteur :

S:\projets\Arduino\recepteur\recepteur.ino: In function ‘void loop()’:

recepteur:50: error: conflicting declaration ‘byte messagein2 [( + 1)]’

byte messagein2[messagein.length()+1];

^

S:\projets\Arduino\recepteur\recepteur.ino:48:16: note: previous declaration as ‘String messagein2’

String messagein2 = Serial.readStringUntil(’\n’);

^

recepteur:51: error: no matching function for call to ‘String::toCharArray(String&, unsigned int)’

messagein.toCharArray(messagein2,messagein.length()+1);

^

S:\projets\Arduino\recepteur\recepteur.ino:51:62: note: candidate is:

In file included from C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Arduino.h:231:0,

from sketch\recepteur.ino.cpp:1:

C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/WString.h:161:7: note: void String::toCharArray(char*, unsigned int, unsigned int) const

void toCharArray(char *buf, unsigned int bufsize, unsigned int index=0) const

^

C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/WString.h:161:7: note: no known conversion for argument 1 from ‘String’ to ‘char*’

recepteur:53: error: cannot convert ‘String’ to ‘char*’ for argument ‘1’ to ‘char* strtok(char*, const char*)’

char* client = strtok(messagein2, “;”);

^

exit status 1
conflicting declaration ‘byte messagein2 [( + 1)]’

/**
 * An Mirf example which copies back the data it recives.
 *
 * Pins:
 * Hardware SPI:
 * MISO -> 12
 * MOSI -> 11
 * SCK -> 13
 *
 * Configurable:
 * CE -> 8
 * CSN -> 7
 *
 */

#include <SPI.h>
#include <Mirf.h>
#include <nRF24L01.h>
#include <MirfHardwareSpiDriver.h>

void setup(){
    Serial.begin(9600);
    while(!Serial);
  
    Mirf.spi = &MirfHardwareSpi;
    Mirf.init();
    Mirf.setRADDR((byte *)"Recep");   
    Mirf.payload = 32;//sizeof(unsigned long);
    Mirf.channel = 90; 
    Mirf.config();
    
    Serial.println("A l'ecoute..."); 
}
String messagein = "";
void loop(){
    // Reception  
    byte data[Mirf.payload];
     
    if(!Mirf.isSending() && Mirf.dataReady()){    
        Mirf.getData(data);
        String receivedID = "Buz"+(int(data[0]) < 10 ? '0'+String(data[0]) : String(data[0]));
        Serial.println("Reception :"); 
        Serial.println(receivedID); 
    }

    // Message de nodejs
    if(Serial.available()){
        String messagein = Serial.readStringUntil('\n');
        
        byte messagein2[messagein.length()+1];
        messagein.toCharArray(messagein2,messagein.length()+1);
        
        char* client = strtok(messagein2, ";");
        char* command = strtok(NULL, ";");
        char* value = strtok(NULL, ";");

        // Message renvoyé à nodejs
        Serial.println("Recepteur a recu:"+String(client)+";"+String(command)+";"+(value ? String(value) : ""));

        // Conversions
        //byte client[first.length()+1];
        //first.toCharArray(client,first.length()+1);

        String messageout = String(command)+";"+(value ? String(value) : "");
                
        byte message[messageout.length()+1];
        //messageout.toCharArray(message,messageout.length()+1);

        // Message renvoyé au client
        delay(1);
        Mirf.setTADDR((byte *)client);
        Mirf.send(message);
        while(Mirf.isSending());

        messagein = "";
    }
}

Je vous remercie par avance pour votre éclairement,
Vos critiques sur le code sont également les bienvenues.

hello
ton code me donne les mêmes erreurs en 164 et 1612

Bonjour,

Chez moi la seule erreur que j'ai est due au fait que .toCharArray() demande un pointeur char * (comme le nom de la fonction l'indique) et non un byte *
En remplaçant 'byte messagein2[messagein.length()+1];' par 'char messagein2[messagein.length()+1];' tout compile correctement.

Bonjour et merci pour vos réponses.

J’ai fait la correction, je ne sais pas encore si sa fonctionne car je dois corriger l’emetteur.

Est ce que je peux abuser de votre gentillesse pour essayer de corriger celui ci ?

#include <SPI.h>
#include <Mirf.h>
#include <nRF24L01.h>
#include <MirfHardwareSpiDriver.h>
#include <FastLED.h>

int buttonNr;
String client;

#define BRIGHTNESS    40// Luminosité
#define NUM_LEDSA     24// Tour
#define NUM_LEDSB     37// Milieu

CRGB ledsa[NUM_LEDSA];
CRGB ledsb[NUM_LEDSB];

bool actif = false;
unsigned long time = millis();
TBlendType    currentBlending;


int step = 0;
int step_leda = 0;
int step2_leda = 0;
int step_ledb = 0;
int step2_ledb = 0;
CRGB colorsave[1];
String etat = "reset";

void setup(){
    buttonNr = setButtonNr();
   
    client = "Buz"+(int(buttonNr) < 10 ? '0'+String(buttonNr) : String(buttonNr));
    char receiverAddr[client.length()+1];
    client.toCharArray(receiverAddr,client.length()+1);
  
    Serial.begin(9600);
    Serial.print(receiverAddr);
   
    pinMode(6, INPUT);
    
    Mirf.spi = &MirfHardwareSpi;
    Mirf.init();
    Mirf.setRADDR((byte *)receiverAddr);
    Mirf.setTADDR((byte *)"Recep");
    Mirf.payload = 32;//sizeof(unsigned long);
    Mirf.channel = 90; 
    Mirf.config();

    FastLED.addLeds<WS2812B, 9, GRB>(ledsa, NUM_LEDSA).setCorrection( TypicalLEDStrip );
    FastLED.addLeds<WS2812B, 10, GRB>(ledsb, NUM_LEDSB).setCorrection( TypicalLEDStrip );
    FastLED.setBrightness( BRIGHTNESS );
    

    for(int i = 0; i < NUM_LEDSA; i++){
        ledsa[i] = CRGB::Red;
    }
    for(int i = 0; i < NUM_LEDSB; i++){
        ledsb[i] = CRGB::Red;
    }
    colorsave[0].setRGB(0,255,0);
    FastLED.show();
    
    Serial.println(" pret"); 
}
void loop(){

    if(etat == "select")
    {
      if(step == 0 && millis()-time > 50)
      {
        for(int i2 = 0 ; i2 < 24 ; i2++)
        {
          ledsa[(step2_leda+step_leda >= NUM_LEDSA ? step2_leda+step_leda-24 : step2_leda+step_leda)] = CRGB{ ceil(int(colorsave[0].r)/24*(i2+1)),ceil(int(colorsave[0].g)/24*(i2+1)),ceil(int(colorsave[0].b)/24*(i2+1)) };
          ledsb[int(floor((step2_leda+step_leda >= NUM_LEDSA ? (float)step2_leda+step_leda-24 : (float)step2_leda+step_leda)/24*16))] = CRGB{ ceil(int(colorsave[0].r)/24*(i2+1)),ceil(int(colorsave[0].g)/24*(i2+1)),ceil(int(colorsave[0].b)/24*(i2+1)) };
          ledsb[16+int(floor((step2_leda+step_leda >= NUM_LEDSA ? (float)step2_leda+step_leda-24 : (float)step2_leda+step_leda)/24*12))] = CRGB{ ceil(int(colorsave[0].r)/24*(i2+1)),ceil(int(colorsave[0].g)/24*(i2+1)),ceil(int(colorsave[0].b)/24*(i2+1)) };
          ledsb[16+12+int(floor((step2_leda+step_leda >= NUM_LEDSA ? (float)step2_leda+step_leda-24 : (float)step2_leda+step_leda)/24*8))] = CRGB{ ceil(int(colorsave[0].r)/24*(i2+1)),ceil(int(colorsave[0].g)/24*(i2+1)),ceil(int(colorsave[0].b)/24*(i2+1)) };
          ledsb[16+12+8+int(floor((step2_leda+step_leda >= NUM_LEDSA ? (float)step2_leda+step_leda-24 : (float)step2_leda+step_leda)/24*1))] = CRGB{ ceil(int(colorsave[0].r)/24*(i2+1)),ceil(int(colorsave[0].g)/24*(i2+1)),ceil(int(colorsave[0].b)/24*(i2+1)) };
          step_leda++;
          if(step_leda >= NUM_LEDSA) step_leda = 0;
        }
  
        step2_leda++;
        if(step2_leda >= NUM_LEDSA)
        {
          step_leda = 0;
          step2_leda = 0;
          step = 0;
        }
        time = millis();
      }
      FastLED.show();
    }
    else if(etat == "gagne")
    {
      if(millis()-time > 100)
      {
        if(step == 0)
        {
          for(int i = 0 ; i < NUM_LEDSA ; i++)
          {
            ledsa[i] = CRGB{ 0,0,0 };
          }
          for(int i = 0 ; i < NUM_LEDSB ; i++)
          {
            ledsb[i] = CRGB{ 0,0,0 };
          }
          step = 1;
          time = millis();
        }
        else if(step == 1)
        {
          for(int i = 0 ; i < NUM_LEDSA ; i++)
          {
            ledsa[i] = CRGB{ 0,255,0 };
          }
          for(int i = 0 ; i < NUM_LEDSB ; i++)
          {
            ledsb[i] = CRGB{ 0,255,0 };
          }
          step = 0;
          time = millis();
          step_leda++;
          if(step_leda >= 10) etat = "reset";
        }
       
        FastLED.show();
      }
    }
    else if(etat == "perdu")
    {
      if(millis()-time > 100)
      {
        if(step == 0)
        {
          for(int i = 0 ; i < NUM_LEDSA ; i++)
          {
            ledsa[i] = CRGB{ 0,0,0 };
          }
          for(int i = 0 ; i < NUM_LEDSB ; i++)
          {
            ledsb[i] = CRGB{ 0,0,0 };
          }
          step = 1;
          time = millis();
        }
        else if(step == 1)
        {
          for(int i = 0 ; i < NUM_LEDSA ; i++)
          {
            ledsa[i] = CRGB{ 255,0,0 };
          }
          for(int i = 0 ; i < NUM_LEDSB ; i++)
          {
            ledsb[i] = CRGB{ 255,0,0 };
          }
          step = 0;
          time = millis();
          step_leda++;
          if(step_leda >= 10) etat = "reset";
        }
        
        FastLED.show();
      }
    }
    
    if(etat == "reset")
    {
      step = 0;
      step_leda = 0;
      for(int i = 0 ; i < NUM_LEDSA ; i++)
      {
        ledsa[i].r = colorsave[0].r;
        ledsa[i].g = colorsave[0].g;
        ledsa[i].b = colorsave[0].b;
      }
      for(int i = 0 ; i < NUM_LEDSB ; i++)
      {
        ledsb[i].r = colorsave[0].r;
        ledsb[i].g = colorsave[0].g;
        ledsb[i].b = colorsave[0].b;
      }
      etat = "";
      FastLED.show();
    }
    
    // Buzz
    if(digitalRead(6) == HIGH){
        if(actif == false){
            actif = true;
            
            Mirf.send((byte *)&buttonNr);
            
            while(Mirf.isSending());
            
            Serial.println("BuzzzZZzz !");
        }
    }
    else{
        actif = false;
    }

    // Message de la base
    byte data[Mirf.payload];
    if(!Mirf.isSending() && Mirf.dataReady()){
        Mirf.getData((byte *)&data);

        Serial.println(client+" a recu:"+String((char *)data));

        char* command = strtok(data, ";");
        char* value = strtok(NULL, ";");

        char* param1;
        char* param2;
        char* param3;
        
        if(value && String(value).indexOf(',') != -1){
            char* param1 = strtok(value, ",");
            char* param2 = strtok(NULL, ",");
            char* param3 = strtok(NULL, ",");

            if(String((char *)command).equals("couleur")){
                Serial.println(client+" va passer en "+param1+","+param2+","+param3);
                colorsave[0].setRGB(atoi(param1),atoi(param2),atoi(param3));
                etat = "reset";
            }
        }
        else if(String((char *)command).equals("reset")){
            Serial.println(client+" : reset");
            step = 0;
            step_leda = 0;
            etat = "reset";
        }
        else if(String((char *)command).equals("select")){
            Serial.println(client+" : select");
            step = 0;
            step_leda = 0;
            etat = "select";
        }
        else if(String((char *)command).equals("gagne")){
            Serial.println(client+" : gagne");
            step = 0;
            step_leda = 0;
            etat = "gagne";
        }
        else if(String((char *)command).equals("perdu")){
            Serial.println(client+" : gagne");
            step = 0;
            step_leda = 0;
            etat = "perdu";
        }
        
    }
}

byte setButtonNr()
{
    int j = 0;
    uint8_t const pinNrs[] = {5,4,3,2};
  
    for (int i = 0; i < sizeof(pinNrs); ++i)
    {
        pinMode(pinNrs[i], INPUT_PULLUP);
    
        j = (j << 1) | (digitalRead(pinNrs[i]) ? 0 : 1);
    
        pinMode(pinNrs[i], OUTPUT);
        digitalWrite(pinNrs[i], LOW);
    }
  
    return j;
}

C'est le même problème: 'byte data[Mirf.payload];' à remplacer par 'char data[Mirf.payload];'