[Résolu]Problème de débutant sur I2C et LCD

Tu commence très bien.

Petite optimization possible sur la première fonction car il te sera plus facile d'utiliser un tableau d'octets.
Par ailleurs petite erreur sur la seconde : telle qu'elle est écrite tu n'affichera qu'un seul caractère.
Voici mes corrections :

// Définit un caractère grisé (damier de pixels blanc et noirs)
byte CarreGris[8] = { 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA };

/*
Fonction destinée à créer un caractère personnalisé sur l'afficheur CLCD Comfile
*/
void CLCDCarac(byte NumCar, byte *carTab ) {
  Wire.beginTransmission(0x00);       //Adresse esclave 0x00 et Start 
  Wire.write(0x1B);                   //Envoi ESC
  Wire.write(0x44);                   //Envoi "D"
  Wire.write(NumCar);                 //Numéro caractère de 8 à 15 (0x08 à 0x0F)
  for ( int i = 0 ; i < 8 ; i++ )
    Wire.write(carTab[i]);         //Pixels allumés 
  Wire.endTransmission();             //Stop  
}

/*
Fonction destinée à afficher un caractere sur l'afficheur CLCD Comfile
*/
void CLCDPrint(char c) {
  Wire.beginTransmission(0x00);  //Adresse esclave 0x00 et Start 
  Wire.write(c);             //Envoi caractere
  Wire.endTransmission();        //Stop    
}

/*
Fonction destinée à afficher une chaîne de caracteres sur l'afficheur CLCD Comfile
*/
void CLCDPrint(char *str) {
  Wire.beginTransmission(0x00);  //Adresse esclave 0x00 et Start 
  while( *str )                             // on s'arrete sur le caractère nul '\0' marqueur de fin d'une chaine de caractère en C
      Wire.write(*str++);             //Envoi caractere et passe au suivant
  Wire.endTransmission();        //Stop    
}

void setup()
{
  // définit le cartèere 8 comme un gris :
  CLCDCarac( 8, CarreGris );
  // Afficher des 8 caractères gris
  CLCDPrint( "\0x08\0x08\0x08\0x08\0x08\0x08\0x08\0x08\0x08" ); 
}

void loop()
{
}

Comme tu peux le voir j'ai définit 2 fonctions qui portent le même nom mais en C++ cela est autorisé car on distingue les 2 fonctions parce qu'elles ne prennent pas le même type de paramètre : l'une prend un charactère et l'aure un pointeur sur caractère caractéristique en C/C++ d'une chaine de caractères.

En C/C+ une chaine de caractère est une suite de caractères consécutivement placés en mémoire, terminée par le caractère nul '\0' (code 0x00) et identifioée par l'adresse (pointeur) du 1ere caractère de la chaine.
Toutes ces écritures sont plus ou moins équivalents mais avec des subtilités :

char *str1 = "Une chaîne";
char str2[] = "Une chaîne";
char str3[] = { 'U', 'n', 'e', ' ', 'c', 'h', 'a', 'î', 'n', 'e', '\0' };

Dans les 2 premiers cas, l'usage des guillemets définissant une chaîne de caractère rend implicite qu'un caractère '\0' est ajouté à la fin.
Dans le 3eme cas, c'est un tableau de caractères "discrets". Il faut donc explicitement ajouter le caractère nul à la fin si cela doit definir une chaîne. En pratique on n'utilise jamais cette syntaxe pour définir une chaîne.

Il légal d'appeller CLCDPrint( ) avec n'importe laquelle de ces variables :

CLCDPrint( str1 );
CLCDPrint( str2 );
CLCDPrint( str3 );