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 :

Problème affichage sur écran lcd avec module RFID


Sujet :

Arduino

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2018
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2018
    Messages : 13
    Par défaut Problème affichage sur écran lcd avec module RFID
    Bonjour, je travaille sur l'amélioration d'une porte automatique et je dois permettre l'accès aux personnes autorisées.
    J'ai donc décidé de prendre une module RFID VMA405, un module relai et écran LCD RGB Blacklight v2.0.
    Je dois afficher sur l'écran LCD le nom de la personne en fonction de la carte présentée, voici mon programme:

    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
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    #include <SPI.h>      
    #include <RFID.h>    
    #include <Wire.h>     
    #include "rgb_lcd.h"  
     
    #define SS_PIN 10     
    #define RST_PIN 9    
     
    RFID rfid(SS_PIN,RST_PIN);  
    rgb_lcd lcd;                
     
    const int relaisPin = 8;                                 
    const int colorR = 255;
    const int colorG = 155;                                  
    const int colorB =30;
     
    int serNum[5];                                          
     
    int card1[][5] = {{32,149,77,109,149}};                   
    int card2[][5] = {{156,160,140,171,27}};
     
    int access1 = 0;
    int access2 = 0;
     
    void setup(){
     
        Serial.begin(9600);                                 
        SPI.begin();                                          
        rfid.init();                                         
        pinMode(relaisPin, OUTPUT);
     
        lcd.begin(16, 2);                                    
        lcd.setRGB(colorR, colorG, colorB);                  
        lcd.print("Veuillez montrer");                      
        lcd.setCursor(2, 1);                                 
        lcd.print("votre  badge");
     
    }
     
    void loop(){
     
        if(rfid.isCard()){                                               
     
            if(rfid.readCardSerial()){                                   
     
               for(int x = 0; x < sizeof(card1); x++){
                  for(int i = 0; i < sizeof(rfid.serNum); i++ ){
                      if(rfid.serNum[i] != card1[x][i]) { 
     
                          access1 = 0;
                          break;
     
                      } else {
     
                          access1 = 1;
                      }
                  }
     
                  if(access1) break;
     
                }
     
            }
                  if(rfid.readCardSerial()){                                   
     
               for(int x = 0; x < sizeof(card2); x++){
                  for(int i = 0; i < sizeof(rfid.serNum); i++ ){
                      if(rfid.serNum[i] != card2[x][i]) {
     
                          access2 = 0;
                          break;
     
                      } else {
     
                          access2 = 1;
                      }
                  }
                  if(access2) break;
                }
     
            }  
     
            switch (access1 = 1 || access2 = 1) {
     
              case access1 = 1 :
     
               lcd.clear();
               lcd.setCursor(0, 0);                          
               lcd.print("Nom1");
               delay(2000);
               lcd.clear();
     
               delay(1000);
               digitalWrite(relaisPin, HIGH);                          
               delay (2000);
               digitalWrite(relaisPin, LOW);                          
               delay(2000);
     
               lcd.print("Veuillez montrer");           
               lcd.setCursor(2, 1);
               lcd.print("votre  badge");
               break;
     
               case access2 = 1 :
     
               lcd.clear();
               lcd.setCursor(0, 0);                          
               lcd.print("Nom2");
               delay(2000);
               lcd.clear();
     
               delay(1000);
               digitalWrite(relaisPin, HIGH);                         
               delay (2000);
               digitalWrite(relaisPin, LOW);                          
               delay(2000);
     
               lcd.print("Veuillez montrer");           
               lcd.setCursor(2, 1);
               lcd.print("votre  badge");
               break;
     
               default :
     
               lcd.clear();
               lcd.setCursor(0, 0);
               lcd.print("Acces refuse");
     
               delay(2000);
     
               lcd.clear();
     
               delay (2000);
     
               lcd.print("Veuillez montrer");           
               lcd.setCursor(2, 1);
               lcd.print("votre  badge");
            }  
     
           } 
           rfid.halt();       
        }
    et voici le message d'erreur qu'il m'affiche :

    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
     
    F:\Revue 2\Test_final\Test_final.ino: In function 'void loop()':
     
    Test_final:74: error: lvalue required as left operand of assignment
     
             switch (access1 = 1 || access2 = 1) {
     
                                            ^
     
    Test_final:75: error: expression '(access1 = 1)' is not a constant-expression
     
               case access1 = 1 :
     
                              ^
     
    Test_final:75: error: expression '(access1 = 1)' is not a constant-expression
     
    Test_final:91: error: expression '(access2 = 1)' is not a constant-expression
     
                case access2 = 1 :
     
                               ^
     
    Test_final:91: error: expression '(access2 = 1)' is not a constant-expression
     
    exit status 1
    lvalue required as left operand of assignment

  2. #2
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 317
    Par défaut
    Commence par revoir la syntaxe du switch...case en C (en français)

  3. #3
    Membre habitué
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2018
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2018
    Messages : 13
    Par défaut
    Y'a-t-il moyen de passer par autre chose qu'un switch/case ?

  4. #4
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 317
    Par défaut
    Une condition if devrait suffire ici, non ?

  5. #5
    Membre habitué
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2018
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2018
    Messages : 13
    Par défaut
    J'ai essayé de revenir sur une version antérieure en utilisant le if de la détection de la carte pour voir ce qui ne fonctionnait pas.
    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
    #include <SPI.h>      
    #include <RFID.h>     
    #include <Wire.h>     
    #include "rgb_lcd.h"  
     
    #define SS_PIN 10    
    #define RST_PIN 9     
     
    RFID rfid(SS_PIN,RST_PIN);  
    rgb_lcd lcd;                
     
    const int relaisPin = 8;                                 
    const int colorR = 255;
    const int colorG = 155;                                  
    const int colorB =30;
     
    int serNum[5];                                          
     
    int card1[][5] = {{32,149,77,109,149}};                  
    int card2[][5] = {{156,160,140,171,27}};
     
    bool access1 = false;
    bool access2 = false;
     
    void setup(){
     
        Serial.begin(9600);                                  
        SPI.begin();                                         
        rfid.init();                                         
        pinMode(relaisPin, OUTPUT);                          
        lcd.begin(16, 2);                                   
        lcd.setRGB(colorR, colorG, colorB);                  
        lcd.print("Veuillez montrer");                       
        lcd.setCursor(2, 1);                                 
        lcd.print("votre  badge");
     
    }
     
    void loop(){
     
        if(rfid.isCard()){                                               
     
            if(rfid.readCardSerial()){     //lecture des numéros du badge
              Serial.print(rfid.serNum[0]);
                Serial.print(" ");
                Serial.print(rfid.serNum[1]);
                Serial.print(" ");
                Serial.print(rfid.serNum[2]);
                Serial.print(" ");
                Serial.print(rfid.serNum[3]);
                Serial.print(" ");
                Serial.print(rfid.serNum[4]);
                Serial.println("");  
               for(int x = 0; x < sizeof(card1); x++){
                  for(int i = 0; i < sizeof(rfid.serNum); i++ ){
                      if(rfid.serNum[i] != card1[x][i]) {                
                          access1 = false;
                          Serial.println("access 1 non valide");
     
                      } else {
                          access1 = true;
                          Serial.println("access 1 valide");
                      }
                      if(access1) break;
                  }
     
                }
     
            }
                  if(rfid.readCardSerial()){                                   
                Serial.print(rfid.serNum[0]);
                Serial.print(" ");
                Serial.print(rfid.serNum[1]);
                Serial.print(" ");
                Serial.print(rfid.serNum[2]);
                Serial.print(" ");
                Serial.print(rfid.serNum[3]);
                Serial.print(" ");
                Serial.print(rfid.serNum[4]);
                Serial.println(""); 
               for(int x = 0; x < sizeof(card2); x++){
                  for(int i = 0; i < sizeof(rfid.serNum); i++ ){
                      if(rfid.serNum[i] != card2[x][i]) {                
                          access2 = false;
                          Serial.println("access 2 non valide");
     
                      } else {
                          access2 = true;
                          Serial.println("access 2 valide");
                      }
                      if(access2) break;
                  }
     
                }
     
            }
        }  
     
     
            rfid.halt();         
           }
    Le problème étant que quand je présente la carte 1, elle passe par: "access 1 validé" puis "access 1 non validé"
    Et la carte 2 passe seulement par "access 1 non validé" et n'arrive pas à l'accès 2

  6. #6
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 317
    Par défaut
    Tu as deux boucles for imbriquées avec un seul break dans la boucle intérieure :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    for
    {   
      for
      {    
        if  
        {
          break 
        }
      }
    }
    Lorsque le break est activé, tu sorts de la boucle interne mais pas de la boucle externe. Donc le code continue de tourner.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Sélection d'affichage sur écran LCD
    Par Creanics dans le forum Arduino
    Réponses: 0
    Dernier message: 20/03/2017, 21h27
  2. Réponses: 2
    Dernier message: 25/10/2007, 09h31
  3. probléme d'affichage sur écran
    Par ess2007 dans le forum Périphériques
    Réponses: 7
    Dernier message: 13/06/2007, 13h56
  4. Réponses: 10
    Dernier message: 04/05/2007, 09h05
  5. Gros problèmes d'affichage sur écran 16/9
    Par slylafone dans le forum C++Builder
    Réponses: 7
    Dernier message: 25/07/2006, 09h33

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