Affichage sur moitié afficheur LCD après nouvel affichage

Bonjour à tous ,

je suis enseignant, et je débute sur Arduino suite à un changement de poste. A la base, j'ai une formation en BTS MAI ( mécanisme et automatisme industriel ) et j'ai un Capet en science de l'ingénieur option productique. Je pars de zéro mais avec quand même quelques connaissances de base.

Pour former les élèves , je vais utiliser deux maquettes d'initiations . La première maquette sur laquelle j'ai commencé a travailler est la "Keyestudio smart home" .

J'ai donc repris les activités an Anglais existantes sur le site officiel KS0085 Keyestudio Smart Home Kit for Arduino - Keyestudio Wiki , et j'ai transposé en language Ardublock les différents exercices en Français, avec quelques modifications.

J'utilise la version augmenté de Duinoedu : Ardublock

Pour l'initiation au afficheur LCD , j'ai décidé de faire quelque chose de simple . J'utilise le détecteur de présence infra rouge de la maison , et lorsque quelqu'un est détecté , cela affiche sur l'afficheur LCD :

en ligne 1 : Bienvenue au
en ligne 2 : collège

J'ai tâtonné pendant pas mal de temps, en utilisant différents blocs proposés par les librairies disponibles. Je n'ai obtenu un résultat qu'avec la librairie "DuinoEdu grove add".

Voici le programme réalisé en Ardublock :

Après transfert , cela fonctionne parfaitement à la première détection . Le texte s'affiche, puis après quelques secondes , disparait .

Je vois donc sur mon afficheur :

Bienvenue au
college

Mais une fois le texte disparue, lors de la seconde détection, je vois ceci :

Bienve
col

C'est à dire que les 8 premières colonnes affichent bien le texte, mais pas les 8 dernières.
J'ai trouvé une solution provisoire pour régler le soucis, c'est a dire que j'écrase mon texte par deux lignes de 16 signes _ . Et la cela fonctionne. J'en déduis donc que c'est la fonction "LCD I2c : Effacer" qui pose probléme. Mais je ne vois pas pourquoi.

Cordialement.

Franck

Salut

est-ce que le backpack I2C est bien soudé sur l'écran?

vous avez le code généré en C++ ?

Bonsoir ,

j'ai vérifié deux fois mon câblage , au cas ou . L'afficheur fonctionne ( c'est un modèle 1602) , je l'ai testé avec le code fournit par le fabricant du kit . Voila le programme test :

[code]
/*
Keyestudio smart home Kit for Arduino
Project 12
1602 LCD
http://www.keyestudio.com
*/
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd (0x27,16,2); // set the LCD address to 0x27 for a16 chars and 2 line display
void setup ()
{
lcd.init (); // initialize the lcd
lcd.init (); // Print a message to the LCD.
lcd.backlight ();
lcd.setCursor (3,0);
lcd.print ("Hello, world!"); // LED print hello, world!
lcd.setCursor (2,1);
lcd.print ("keyestudio!"); // LED print keyestudio!
}
void loop ()
{
}

[/code]

lorsque je crée mon propre programme test , voici le code généré :

[code]
#include <Wire.h>
#include <rgb_lcd.h>

#define EDU_LCD_ADRESS 0x27
#define EDU_LCD_COLS   2
#define EDU_LCD_ROWS   16
boolean __ardublockDigitalRead(int pinNumber)
{
  pinMode(pinNumber, INPUT);
  return digitalRead(pinNumber);
}


#if defined (EDU_LCD_ADRESS)
#include <Duinoedu_LiquidCrystalUp.h>
Duinoedu_LiquidCrystalUp monRgb(EDU_LCD_ADRESS, EDU_LCD_COLS, EDU_LCD_ROWS);
#else
rgb_lcd monRgb;
#endif

void setup()
{
  monRgb.branch();

}

void loop()
{
  if (__ardublockDigitalRead(D2))
  {
    monRgb.placerCurseurEn(0, 2);
    monRgb.ecrire("Bienvenue au" );
    monRgb.placerCurseurEn(1, 5);
    monRgb.ecrire("college" );
    delay( 5000 );
  }
  else
  {
    monRgb.clear();
  }
}

[/code]

J'ai remarqué que les bibliothéques utilisées ne sont pas les mêmes , ( liquidcristal dans un cas, rgb-lcd dans l'autre ) peut être que cette version d'Ardublock ne gère pas correctement les afficheurs 1602 , qui ne sont pas des afficheurs RGB . Cela reste quand même utilisable en utilisant la méthode d'écrasement des 2 x 16 lignes. Autre solution, acheter des LCD RVB et les changer sur toutes les platines. ( j'espére avoir bien coller mon code :slight_smile: )