[Résolu] Répétabilité de caractère personnalisé

Bonjour à tous, J'ai un soucis avec des caractères personnaliser que j'ai crée pour mon afficheur LCD via la fonction createChat(). Quand je transfert mon programme dans l'aduino ça marche niquel, mais quand je redémarre l'appli j'obtient n'importe quoi... Et à chaque fois que je re-téléverse le programme ça repart niquel...

Quelqu'un a déjà été confronter à ce problème ?

Cdt

bonjour, sans code, impossible de répondre. ca ressemble à un dépassement de mémoire.

Et bien je déclare mes caractères comme cela :

byte LHalf[8]={       
  B11111,             
  B11100,             
  B11100,             
  B11100,             
  B11100,             
  B11100,             
  B11100,             
  B11111              
};                    
                      
byte C2Tier[8]={  
  B11111,             
  B11110,             
  B11110,             
  B11110,             
  B11110,             
  B11110,             
  B11110,             
  B11111              
};                    

byte C1Tier[8]={      
  B11111,             
  B11000,             
  B11000,             
  B11000,             
  B11000,             
  B11000,             
  B11000,             
  B11111              
};                    
                      
byte CEmpty[8]={      
  B11111,             
  B00000,             
  B00000,             
  B00000,             
  B00000,             
  B00000,             
  B00000,             
  B11111              
};                    
                      
byte RFull[8]={       
  B11100,             
  B11110,             
  B11111,             
  B11111,             
  B11111,             
  B11111,             
  B11110,             
  B11100              
};                    
                      
byte R1Tier[8]={      
  B11100,             
  B10010,             
  B10011,             
  B10011,             
  B10011,             
  B10011,             
  B10010,             
  B11100              
};                    
                      
byte REmpty[8]={      
  B11100,             
  B00010,             
  B00011,             
  B00011,             
  B00011,             
  B00011,             
  B00010,             
  B11100              
};

ensuite je crée les caractères:

lcd.createChar(0, LHalf);     
  lcd.createChar(1, C2Tier);    
  lcd.createChar(2, C1Tier);     
  lcd.createChar(3, CEmpty);        
  lcd.createChar(4, RFull);            
  lcd.createChar(5, R1Tier);     
  lcd.createChar(6, REmpty);     
  lcd.begin();                                   
  lcd.setCursor(0,0);

et j'ai fais une petite boucle pour afficher ces caractères:

 while(true){
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.write(iChoix);
    lcd.setCursor(0,1);
    lcd.print(iChoix);
    bouton = LectBoutons();
    if(bouton == BOUTON_1){
      iChoix ++;
    }
    else if(bouton == BOUTON_4){
      iChoix--;
    }
    delay(200);
  }

La première fois que j'essaie après le téléversement il n'y a aucun problème mais dès que j'éteint et rallume le système, c'est dans les chou

Bonjour Les caractères personnalisés sont stockés dans une RAM de l'afficheur. il sont donc perdus quand son alimentation est coupée

Surement mais je les déclare et crée à chaque initialisation de l'arduino,donc même si ils s'effacent à chaque extinction, il devraient être recréé a chaque fois

Bizarre ces lcd.createChar() AVANT le lcd.begin() qui, comme son nom l'indique, devrait être la toute première méthode appelée pour initialiser le lcd avant de l'utiliser...

Tous les exemples que j'ai trouvé sur le sujet indique de faire comme ça : http://menututo.com/creer-des-caracteres-perso-avec-un-afficheur-lcd-216-caracteres-arduino/

https://www.arduino.cc/en/Reference/LiquidCrystalCreateChar

Par curiosité j'ai essayé de mettre le begin avant la création des caractères et maintenant ça marche sans soucis...

Il est en effet étonnant de trouver cette bizarrerie y compris dans les exemples donnés sur le site institutionnel Arduino.

Il y a ici un fil de discussion assez long et complet sur le sujet.

En gros : ça dépend des bibliothèques utilisées, mais dans tous les cas cela fonctionne correctement quand on met le lcd.begin avant toute autre chose, ce qui est quand même la logique de base.