IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Arduino Discussion :

erreur à la compilation


Sujet :

Arduino

  1. #1
    Membre éprouvé
    Inscrit en
    Juillet 2004
    Messages
    955
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 955
    Par défaut erreur à la compilation
    Bonjour,

    je sollicite votre aide sur une erreur dont je ne connais pas la signification :
    dans ce petit programme test dont le but est d'afficher une valeur à l'aide d'un KY-040 -"Rotary encoder module"
    et d'en faire le choix entre 3,4 ou 5


    lvalue required as left operand of assignment

    elle se produit à la ligne :

    NUMBER=5;
    fonction : void initNBLetter()

    merci par avance
    pascal



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
     
    //**********************************///
    // ESP32 TTGO Lora OLED V1
    //*********************************////
     
    #include "FS.h"
    #include "SPIFFS.h"
    #define FORMAT_SPIFFS_IF_FAILED true
    #include <TFT_eSPI.h>
    #include <SPI.h>
    #include "Free_Fonts.h"
    #include <AiEsp32RotaryEncoder.h>
     
    #define NUMBER 0
    #define TFT_WIDTH 135
    #define TFT_HEIGHT 240
    #define BUTTON_1 35
    #define BUTTON_2 0
    TFT_eSPI tft = TFT_eSPI(TFT_WIDTH, TFT_HEIGHT);
     
    const char wordFile[] = "";
     
     
    #define ROTARY_ENCODER_A_PIN 33
    #define ROTARY_ENCODER_B_PIN 32
    #define ROTARY_ENCODER_BUTTON_PIN 25
    #define ROTARY_ENCODER_STEPS 4
    AiEsp32RotaryEncoder rotaryEncoder = AiEsp32RotaryEncoder(ROTARY_ENCODER_A_PIN, ROTARY_ENCODER_B_PIN, ROTARY_ENCODER_BUTTON_PIN, -1, ROTARY_ENCODER_STEPS);
    void IRAM_ATTR readEncoderISR()
    {
    rotaryEncoder.readEncoder_ISR();
    }
     
    void initTFT() {
      // Prepare the display
      tft.begin();
      tft.fillScreen (TFT_BLACK);
      tft.setRotation(0);
    }
    void initNBLetter()
    {
    tft.setTextDatum(TC_DATUM);
    tft.setFreeFont(FSSB12);
    int h = 20;
    int d = 5;
    char letter;
        while (not rotaryEncoder.isEncoderButtonClicked()) {
          if (rotaryEncoder.encoderChanged()) {
          letter = rotaryEncoder.readEncoder();
          // display letter
          tft.fillRect(0, TFT_HEIGHT - 63, TFT_WIDTH, 63, TFT_BLACK);
          int y = (h + 3 * d);
          int x = (h + d) + 3;
          tft.fillRect(x, y, h + d, h + d, TFT_ORANGE);
          tft.drawRect(x, y, h + d, h + d, TFT_BLUE);
          tft.setCursor(x + h / 4, y + h);
          tft.setTextColor(TFT_WHITE);
          tft.print(letter);
          }
        }
     
        if (letter == 51) { 
        NUMBER=3;
          const char wordFile[] = "fichier3.txt";
        }
         if (letter == 52) { 
          NUMBER=4;
          const char wordFile[] = "fichier4.txt";
        }
         if (letter == 53) { 
          NUMBER=5;                                         <========================
          const char wordFile[] = "fichier5.txt";
        }
    }
     
      //*************************************************
    // SETUP
    //*************************************************
     
    void setup ()
    {
     
      //***********************************************
      rotaryEncoder.begin();
      rotaryEncoder.setup(readEncoderISR);
      rotaryEncoder.setBoundaries(51, 53, true);
      //***********************************************  
      Serial.begin (115200);
      initTFT();
      if (!SPIFFS.begin(FORMAT_SPIFFS_IF_FAILED)) {
        Serial.println("Échec du montage du SPIFFS");
        return;
      }
      // valider le nb de lettres
      initNBLetter();
      File file = SPIFFS.open(wordFile);
      if (!file || file.isDirectory()) {
        Serial.printf("%s: Impossible d'ouvrir le fichier pour la lecture\n", wordFile);
        //  while (1);
      }
     
    }
     
    //*************************************************
    // LOOP
    //*************************************************
     
    void loop() {
     
    }

  2. #2
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 899
    Par défaut
    vous avez fait (ligne 14)
    un define ne crée pas de variable ou constante, c'est juste une directive de compilation qui dit "avant de compiler, partout où tu trouves dans le code le mot NUMBER, remplace le par 0

    Un peu plus loin dans le code vous faites

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
      if (letter == 51) {
        NUMBER = 3;
        const char wordFile[] = "fichier3.txt";
      }
      if (letter == 52) {
        NUMBER = 4;
        const char wordFile[] = "fichier4.txt";
      }
      if (letter == 53) {
        NUMBER = 5;                                         <= == == == == == == == == == == == =
          const char wordFile[] = "fichier5.txt";
      }
    donc la substitution textuelle, avant de compiler donne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
      if (letter == 51) {
        0 = 3;  // <==== AÏE AÏE AÏE 
        const char wordFile[] = "fichier3.txt";
      }
      if (letter == 52) {
        0 = 4;  // <==== AÏE AÏE AÏE 
        const char wordFile[] = "fichier4.txt";
      }
      if (letter == 53) {
        0 = 5;  // <==== AÏE AÏE AÏE                                          
          const char wordFile[] = "fichier5.txt";
      }
    ==> les 3 lignes colorées en rouge n'ont bien sûr aucun sens pour le compilateur. Il faut que NUMBER soit définit comme une variable si vous voulez pouvoir le modifier


    ------

    vous aurez aussi d'autres erreurs, par exemple redéfinir dans le bloc du if (des else seraient pas mal d'ailleurs) la variable wordFile ne sert à rien, ce n'est pas la variable globale mais une locale. il faut lire des infos sur la portée des variables (https://www.arduino.cc/reference/en/...lifiers/scope/). De plus votre variable globale
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    const char wordFile[] = "";
    n'a pas assez de mémoire réservée pour copier dedans le nom du fichier.

    il faut déclarer par exemple
    et pour initialiser le contenu on ne peut pas faire une simple affectation il faudra utiliser strcpy() par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strcpy(wordfile, "fichier5.txt");
    mais le plus simple serait de ne conserver qu'un pointeur et d'affecter le pointeur au bon endroit

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    const char * wordFile = nullptr;
    ....
    wordfile =  "fichier5.txt";

    j'ai pas tout lu mais il y a du boulot sans doute...

  3. #3
    Membre éprouvé
    Inscrit en
    Juillet 2004
    Messages
    955
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 955
    Par défaut
    Merci Jay M

    j'ai effectivement un peu de boulot ...

    je vais laisser pour l'instant tomber wordFile[]
    et me concentrer sur NUMBER

    il faut donc que je définisse une variable
    byte NUMBER =0 ;
    ( par ex car la valeur est uniquement 3, 4 ou 5 )
    et là çà compile mieux

    en fait , il faut comprendre #define comme un alias c'est çà ?


    pascal

  4. #4
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 899
    Par défaut
    Citation Envoyé par cobra38 Voir le message
    Merci [B]
    en fait , il faut comprendre #define comme un alias c'est çà ?
    Exactement
    C’est comme si vous faisiez rechercher et remplacer textuellement dans le code avant de compiler

Discussions similaires

  1. Erreur de compilation après modification du Uses
    Par DevelOpeR13 dans le forum Langage
    Réponses: 5
    Dernier message: 30/10/2007, 14h23
  2. Réponses: 2
    Dernier message: 23/09/2003, 14h32
  3. Réponses: 10
    Dernier message: 22/09/2003, 21h58
  4. Réponses: 4
    Dernier message: 27/08/2003, 21h34
  5. Réponses: 2
    Dernier message: 04/03/2003, 23h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo