Go Down

Topic: LCD I2C: tout pour que ça marche (Read 1 time) previous topic - next topic

kammo

Jun 18, 2018, 03:01 pm Last Edit: Jun 18, 2018, 03:02 pm by kammo
Yopéla,

Moi-même débutant, je constate qu'au moins une fois par semaine, quelqu'un vient demander sur le forum pourquoi son afficheur ne fonctionne pas.

CABLER
Déjà, au lieu de vous embêter avec plein de câbles, ajoutez-lui un module i²c. Du coup, le risque de se tromper dans le câblage s'évanouit totalement. Totalement? bah oui, vous allez voir...
C'est le plus commun des problèmes avec les afficheurs LCD.

SOUDER
Le second problème le plus commun, ce sont les soudures. Je ne parle pas que des soudures que vous réalisez, mais aussi de celles du constructeur. Vérifiez-les une à une en repassant un coup de fer chaud et si nécessaire, un peu d'étain.



Make it, or make it burn.
carte des membres:
https://drive.google.com/open?id=1QmXJT44QyZHM3SIgDaMo7MGUbBSKAaVD&usp=sharing

68tjs

Sympa,
Je te laisse mettre un lien vers une bibliothèque LCD/I2C qui fonctionne accompagnée d'un exemple hyper simple.
Et aussi expliquer comment régler le rétroéclairage et le tuto sera parfait.

kammo

#2
Jun 18, 2018, 03:13 pm Last Edit: Jun 18, 2018, 03:15 pm by kammo
ADRESSE
Maintenant, le dernier problème, c'est l'i2c.
Chaque module i²c a sa propre adresse, ça permet de les empiler sur les pins A4 et A5 (sur UNO et NANO par exemple), et on les appelle par leur adresse. Alors pour vérifier que les deux fils (vert et blanc sur mon montage) ne sont pas inversés ET que l'adresse et bonne, connectez votre module, alimentez-le, ça vous fait 4 fils.




Le potentiomètre bleu derrière permet de régler le contraste, tournez-le à tout moment pour améliorer l'affichage.



Ouvrez IDE et collez ce code:
Code: [Select]
// --------------------------------------
// i2c_scanner
//
// Version 1
//    This program (or code that looks like it)
//    can be found in many places.
//    For example on the Arduino.cc forum.
//    The original author is not know.
// Version 2, Juni 2012, Using Arduino 1.0.1
//     Adapted to be as simple as possible by Arduino.cc user Krodal
// Version 3, Feb 26  2013
//    V3 by louarnold
// Version 4, March 3, 2013, Using Arduino 1.0.3
//    by Arduino.cc user Krodal.
//    Changes by louarnold removed.
//    Scanning addresses changed from 0...127 to 1...119,
//    according to the i2c scanner by Nick Gammon
//    http://www.gammon.com.au/forum/?id=10896
// Version 5, March 28, 2013
//    As version 4, but address scans now to 127.
//    A sensor seems to use address 120.
// Version 6, November 27, 2015.
//    Added waiting for the Leonardo serial communication.
//
//
// This sketch tests the standard 7-bit addresses
// Devices with higher bit address might not be seen properly.
//
 
#include <Wire.h>
 
 
void setup()
{
  Wire.begin();
 
  Serial.begin(9600);
  while (!Serial);             // Leonardo: wait for serial monitor
  Serial.println("\nI2C Scanner");
}
 
 
void loop()
{
  byte error, address;
  int nDevices;
 
  Serial.println("Scanning...");
 
  nDevices = 0;
  for(address = 1; address < 127; address++ )
  {
    // The i2c_scanner uses the return value of
    // the Write.endTransmisstion to see if
    // a device did acknowledge to the address.
    Wire.beginTransmission(address);
    error = Wire.endTransmission();
 
    if (error == 0)
    {
      Serial.print("I2C device found at address 0x");
      if (address<16)
        Serial.print("0");
      Serial.print(address,HEX);
      Serial.println("  !");
 
      nDevices++;
    }
    else if (error==4)
    {
      Serial.print("Unknown error at address 0x");
      if (address<16)
        Serial.print("0");
      Serial.println(address,HEX);
    }    
  }
  if (nDevices == 0)
    Serial.println("No I2C devices found\n");
  else
    Serial.println("done\n");
 
  delay(5000);           // wait 5 seconds for next scan
}


Téléversez le tout et ouvrez le moniteur série (Ctrl+M).

Vous devriez obtenir quelque chose comme ceci:

I2C Scanner
Scanning...
I2C device found at address 0x3F  !
done


Copiez cette adresse (sans le point d'exclamation), par exemple 0x3F
Si elle est différente, peu importe, ce qui compte, c'est de l'avoir ;)

Si aucune adresse n'est renvoyée, c'est que vous avez inversé les fils SDA/SCL, normalement respectivement sur A4 et A5. Rétablissez votre montage, et relancez le programme.

Make it, or make it burn.
carte des membres:
https://drive.google.com/open?id=1QmXJT44QyZHM3SIgDaMo7MGUbBSKAaVD&usp=sharing

kammo

#3
Jun 18, 2018, 03:25 pm Last Edit: Jun 18, 2018, 03:38 pm by kammo
TESTER
D'abord, téléchargez la bibliothèque: elle se trouve ici

Cliquez sur DOWNLOAD, puis sur DOWNLOAD ZIP.

Dans IDE, cliquez sur CROQUIS/Inclure une bibliothèque/Ajouter la bibliothèque ZIP, sélectionnez le .zip que vous venez de télécharger. Comme sur cette image:




C'est le moment de voir si le tuto est bien fait mais aussi si vous avez tout bien suivi ;)
Voici un code de test:

Code: [Select]
/*  kammo 2018 - forum arduino france
    ce code de demonstration permet de mieux comprendre
    l'utilisation de la bibliothèque LiquidCrystal_I2C.h
*/


#include <Wire.h>
#include <LiquidCrystal_I2C.h>

// indiquer (adresse i2c, nombre de colonnes, nombre de lignes)
LiquidCrystal_I2C lcd(0x3F, 16, 2);

void setup()
{
  // initialise l'afficheur LCD
  lcd.begin();


}

void loop()
{

  // efface l'ecran et place le curseur en 0,0
  lcd.clear();

  // allumer retroeclairage
  lcd.backlight();

  // activer l'affichage
  lcd.display();

  // ecrire à la position par defaut
  lcd.print("LCD I2C");
  // petite pause
  delay(1000);

  // faire clignoter le block
  lcd.blink_on();
  delay(1000);
  // ne plus clignoter
  lcd.blink_off();
  // on cree une boucle pour faire defiler
  for (int i = 0; i < 16; i++) { // compteur i (de 0 à <16)
    lcd.scrollDisplayRight(); // defiler vers la droite
    delay(100);
  }

  //effacer, curseur 0,0
  lcd.clear();

  // placer le curseur (colonne, ligne)
  lcd.setCursor(17, -1);

  // ecrire à la position par defaut
  lcd.print("DEMONSTRATION");

  // on cree une boucle pour faire defiler
  for (int i = 0; i < 30; i++) { // compteur i
    lcd.scrollDisplayLeft(); // fait defiler vers la gauche
    delay(100);
  }

  // faire clignoter le block
  lcd.blink_on();
  // petite pause
  delay(1000);
  lcd.noDisplay();
  delay(500);
  lcd.noBacklight();
  delay(500);
}



Ca ne fonctionne pas? Foutu truc chinois! Nan ^^
Regardez cette ligne de près:
Code: [Select]
// indiquer (adresse i2c, nombre de colonnes, nombre de lignes)
LiquidCrystal_I2C lcd(0x3F, 16, 2);


0x3F, c'est l'adresse du module
chez moi, la vôtre, c'est celle que je vous ai dit de copier, donnée par le scanner. Remplacez-la. Ca s'invente pas, par contre ça peut se modifier (voir tout à la fin)
Il y a deux chiffres: le nombre de colonnes, et le nombre de lignes.
En général, les LCD sont des 16x2 ou 20x4. Remplacez les chiffres qui correspondent à votre module.
On y voit aussi le nom que vous donnez à votre LCD: lcd. Il peut s'appeler Charlotte c'est pareil.

On n'arrête pas la technologie, vous verrez, c'est Hollywood. Nan, j'déconne, c'est un petit code qui sert à tester, mais aussi à comprendre que les mots-clés de la bibliothèque sont précédés de lcd.
Par exemple:
lcd.print("youpi");
Sinon, ça marche pas.
Make it, or make it burn.
carte des membres:
https://drive.google.com/open?id=1QmXJT44QyZHM3SIgDaMo7MGUbBSKAaVD&usp=sharing

kammo

#4
Jun 18, 2018, 03:29 pm Last Edit: Jun 18, 2018, 05:21 pm by kammo
Comme vous le voyez, les mots clés, ça ne s'invente pas.

Alors les voici: ils sont tous là
n'oubliez pas de les faire précéder d'un lcd. si c'est le nom que vous lui aurez donné.

Un autre article pour modifier l'adresse, l'éclairage Led... c'est clair et bien fait


ATTENTION:

Si ça ne fonctionne pas, recommencez, lisez tout bien, n'ayez pas honte de refaire les soudures et de remettre en questions votre montage.

Si vous ne comprenez pas le code, potassez un peu, vous ne ferez jamais rien d'intéressant avec votre LCD si vous ne savez pas le programmer.

Posez vos questions dans le forum et pas ici. On vous aidera, mais on ne fera pas votre code à votre place.

Lisez bien les deux articles dont j'ai donné les liens, ils répondront aux questions les plus pointues.


J'espère que c'est clair, que vous gagnerez du temps et en compréhension.
kammo
Make it, or make it burn.
carte des membres:
https://drive.google.com/open?id=1QmXJT44QyZHM3SIgDaMo7MGUbBSKAaVD&usp=sharing

bricofoy

ça y est j'ai réussi à remettre la main sur un bout de code absolument indispensable pour utiliser pas mal d'écran i2c de diverse sources, car ils ont leurs câblages parfois différent entre l'expandeur de port I2C et le LCD...

Il s'utilise donc avec la librairie NewLiquidCrystal

Et le sketch i2cLCDGuesser.ino est donc (en pièce jointe, il est trop gros pour le coller dans le message :( )
-tu savais que si tu passe le CD de windows à l'envers, tu entends une chanson satanique ?
-non, mais il y a pire : à l'endroit, ça l'installe !

Go Up