Réception chaines de caractères port série et affichage sur LCD

Bonsoir Messieurs/Dames(peut-être),

Je viens vous demander de l'aide car je bloque sur une partie de mon projet. Celle-ci consiste à réceptionner une chaine de caractère saisie sur un terminal mobile et transmise sur la liaison série en Bluetooth. Pour l'instant je me contenterais de l'envoyer depuis la console du PC.
Je souhaiterais donc récupérer cette chaîne, et l'afficher sur le LCD 20*4 qui est relié à mon Arduino. Je vois déjà venir le problème pour les chaînes de plus de 20 caractères mais vous allez rire, avec moins de 20 caractères ça ne fonctionne même pas...

#include <SoftwareSerial.h>
#include <LiquidCrystal.h>

LiquidCrystal LCD(11, 10, 5, 4, 3, 2); //pin mapping de l'écran
SoftwareSerial bluetooth(12,13); //pin mapping du module bluetooth 

char cBuffer[64]; 
int iIndex=0; 
bool bDataPrete=false;

void setup() {

  lancement(); 
  menuprincipal(); 

  Serial.begin(9600); //ouverture de la voie série du pc
  bluetooth.begin(9600); //ouverture de la voie série avec le module bluetooth

}

void loop() {


  if(Serial.available()>10||bDataPrete==false){

    recevoirData();
  }

  if(bDataPrete==true){
    affichageLCD(); 
  }
  
}











void recevoirData(void){

      LCD.write("RECEPT"); 
    delay(2000); 

    while(Serial.available()>1){
      cBuffer[iIndex]=Serial.read(); 
      iIndex++; 
    }

  bDataPrete=true; 
  
}

void affichageLCD(void){

    LCD.write("AFFICH"); 
    delay(2000); 
  LCD.clear(); 
  LCD.write(cBuffer); 
  bDataPrete=false; 
  
}


void lancement(void) {
  LCD.begin(20,4); 
  LCD.home();
  LCD.setCursor(1,0);
  LCD.write("Demarrage en cours");
  LCD.setCursor(1, 1);
  LCD.write("Veuillez patienter"); 
  LCD.setCursor(8, 2);
  LCD.write("...");
  delay(4000);  
}

void menuprincipal(void){
  LCD.clear();
}

Je vous ai joint mon code. Si une âme charitable pourrait me débloquer ce serait fabulissime!! Je vais arrêter pour aujourd'hui, c'est mieux car je n'arrive plus à me concentrer sur ce code...

Merci et bonne soirée :slight_smile:

Pas sur que ce soit suffisant, mais déjà en premier lieu remplacer LCD.write() par LCD.print()

Effectivement c'est pas suffisant mais quelle est la différence ?

En fait il passe constamment dans une fonction puis dans l'autre je ne vois pas pourquoi (je le sais grâce à l'affichage de debug sur le LCD)...

La nuit porte conseil, je donne donc la solution qui reçoit les caractères saisis dans la console, les stocke dans un tableau de char, et les renvoie dans la console :

void receptionSerie(void){

  while((Serial.available()>0)&&(x<40)){
    cBuffer[x]=Serial.read();
    delay(10); 
    x++; 
  }  
  
}


void afficheChaine(void){
  
  for(iBcl=0;iBcl<x;iBcl++){
    Serial.print(cBuffer[iBcl]); 
    delay(100); 
  }
  x=0; 
  iBcl=0; 
  Serial.println("");

}

Je m'attaque maintenant à la partie affichage sur le LCD, je reviendrais sûrement poser des questions...

Merci!

Sans oublier la partie appel des fonctions dans le loop :

 if(Serial.available()>1){
    receptionSerie(); 
    afficheChaine();  
  }