Ecran LCD ne fonctionne pas dans loop

Salut à tous,

Voila mon projet, un lecteur de badge RFID avec validation ou non du badge.

Je souhaitais intégrer un écran LCD, tout fonctionne sauf à partir du moment ou le badge est testé et validé, l'écran LCD n'indique pas ce que lui dit d'indiquer.

Voici mon code :

#include <SPI.h>
#include <MFRC522.h>
#include <Servo.h>
#include <LiquidCrystal.h> // on importe la bibliothèque pour l'écran LCD
//on défini nos pin
#define SS_PIN 10
#define RST_PIN 9
Servo monServomoteur;
const int rs = 4, en = 3, d4 = 2, d5 = 1, d6 = 0, d7 = 8; // on indique sur quels PIN sont connectés l'écran
LiquidCrystal lcd(rs, en, d4, d5, d6, d7); // écran LCD
// definition des pin du RC522
MFRC522 mfrc522(SS_PIN, RST_PIN); 

//on defini la bronche pour notre indicateur/témoin
int Led_rouge = A5;
int Led_verte = 5;
float sinVal;        // crée une variable de type "float" appelée "SinVal" et qui contient la valeur sinusoïdale qui fera monter et descendre la tonalité.
int toneVal;         // crée une variable de type "int" appelée "toneVal" et qui représente la fréquence de la note produite en hertz (Hz).
char st[20];
char badgeok = " BADGEOK ";
char badgenon = "BADGENON";
 
void setup() 
{
  monServomoteur.attach(6);
  unsigned long position = 0;
 monServomoteur.writeMicroseconds(position);
  pinMode(7, OUTPUT);
  pinMode(Led_verte, OUTPUT);
  pinMode(Led_rouge, OUTPUT);
 lcd.begin(16, 2);
   //Print a message to the LCD.
  lcd.setCursor(5,1);        // place le curseur aux coordonnées (2,1)
  lcd.print("BADGEZ");
  


 
  //initialisation serie(pour le relevé d'information via le moniteur série) et initialisation des deux bibliotheque SPI et MFRC522
  Serial.begin(9600);
  SPI.begin();
  mfrc522.PCD_Init(); 
  // Message initial (le message afiché au démarrage dans le moniteur serie de notre programme arduino)
  Serial.println("Test acces via TAG RFID");
  Serial.println();
}

void loop() // le corps de notre programme
{
  
  if ( ! mfrc522.PICC_IsNewCardPresent()) 
  {
    return;
  }
  if ( ! mfrc522.PICC_ReadCardSerial()) 
  {
    return;
  }
  Serial.print("UID de tag :");
  String tag= "";
  byte caractere;
  for (byte i = 0; i < mfrc522.uid.size; i++) 
  {
     Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ");
     Serial.print(mfrc522.uid.uidByte[i], HEX);
     tag.concat(String(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "));
     tag.concat(String(mfrc522.uid.uidByte[i], HEX));
  }
  Serial.println();
  Serial.print("Message : ");
  tag.toUpperCase();

  
  
 // ici on va vérifier l'autorisation
  
  if (tag.substring(1) == "39 C8 76 89") // le numero de tag est visible lorsqu on presente la carte ou le badge via le moniteur serie
  
  //il suffit d'insérer ci-dessus le tag que l'on souhaite authoriser ici on dit que si le tag = 06 62 20 02 est lu alors on affiche dans le moniteur serie
    {
    // Ici nous allumons la LED
    lcd.setCursor(0,0);
            affichageOK();

    digitalWrite(Led_verte, HIGH);
    Serial.println("TAG verifié - Acces Autorisé !");
    Serial.println();
    

    

 

    for(int x=0; x<180; x++){                   // crée une variable "x" de type "int" dont la valeur de départ est de 0 et qui lorsqu'elle est inférieur 
                                                 // à 180 augmente de +1. Ce qui permet de s'arrurer que la valeur sinusoïdale ne va pas dans le négatif.
     
        sinVal = (sin(x*(3.1412/180)));         // permet de convertir la valeur de x en radians pour la suite du programme.
        toneVal = 1500+(int(sinVal*1000));      // formule qui permet de convertir la variable en une nouvelle varianble "toneVal" qui défénira la fréquence du Buzzer.
        tone(7, toneVal);                      // utilise la fonction tone, constituer du numéro de la Broche (13) et de la fréquence (toneVal)
        delay(2); 
        //toneVal = 0;
        //tone(4, toneVal);
        pinMode(7, INPUT);
        }
        
   
    for (int x=0; x<10; x++){
    digitalWrite(Led_verte, HIGH);
    delay(50);
    digitalWrite(Led_verte, LOW);
    delay(50);
    }
    
    

    
     // Fait bouger le bras de 0° à 180°
     //for (unsigned long position = 1000; position <= 2000; position += 5) {
    unsigned long position = 2000;
    monServomoteur.writeMicroseconds(position);
    // plus le delay est court, plus rapide est le mouvement et vice versa
    delay(3000);
    position = 0;
    monServomoteur.writeMicroseconds(position);
    //delay(1000);

  }
  
  // ici on va vérifier un second badge (il est possible d'ajouter plusieurs "else if" il peut être interessant 
  //d'utiliser la fonction switch je vous invite à vous renseigner sur celle-ci.
 else if (tag.substring(1) == "29 14 DE D9") // le numero de tag est visible lorsqu on presente la carte ou le badge via le moniteur serie
  //il suffit d'insérer ci-dessus le tag que l'on souhaite authoriser ici on dit que si le tag = 06 62 20 02 est lu alors on affiche dans le moniteur serie
  // Tag verifie - Acces Autorisé et nous eteignons notre led pendant 3sec
  {
    digitalWrite(Led_verte, HIGH);
    Serial.println("TAG verifié - Acces Autorisé !");
    Serial.println();
    delay(1000);
    digitalWrite(Led_verte, LOW);
   affichageOK();
    }
  
else
  //sinon si le Tag n'est pas valide
  {
    //on affiche Acces refuse !!!
    Serial.println("TAG inconnu - Accès refusé !!!");
    Serial.println();
 
 affichageNON();
    for (int i= 1; i<5 ; i++)
    {
      
      digitalWrite(Led_rouge, HIGH);
      delay(200);
      digitalWrite(Led_rouge, LOW);
      delay(200);
      //digitalWrite(ventilo, LOW);
    }

  delay(200);
}
  }

void affichageOK() {
lcd.begin(16, 2);
lcd.clear();
lcd.print("OUI");
}

void affichageNON() {
lcd.begin(16, 2);
lcd.clear();
lcd.print("NON");
}

Merci d'avance pour votre aide !! :slight_smile:

Cordialement

Boulauventre

Pas besoin de mettre "lcd.begin(16, 2);" dans les fonctions affichageOK et affichageNON

Merci de ta réponse,

J'enlève ça de suite. Tu n'as pas d'idée pour l'affichage dans le loop ?