J'ai un écran LCD 1602 qui fonctionne bien seul. Cependant, je voulais libérer certaines broches en utilisant un contrôleur LCD I2C / IIC que j'ai acheté séparément.
Bien que le contrôleur semble communiquer avec mon Arduino UNO à la bonne adresse, je ne parviens pas à afficher le texte. Par défaut (pas de code), il semble que l'écran LCD aura 1 ligne de 16 "carrés" pleins. Lors de l'utilisation de l'adresse 27 dans mon code, l'écran LCD passera à 2 lignes de 16 carrés (voir photo ci-dessous). Le code demande également que le rétroéclairage clignote 3 fois, ce qui fonctionne. Cependant, je ne peux obtenir que 2 lignes de carrés. (Le code complet est au bas de cette question).
J'utilise la bibliothèque LiquidCrystal_I2C de F Malpartida, qui semble être couramment utilisée.
Existe-t-il une meilleure bibliothèque que je devrais utiliser?
Je me demande si ce sont juste les mauvaises broches utilisées dans le code. Tous les croquis que je vois en ligne utilisent les épingles suivantes:
// addr,en,rw,rs,d4,d5,d6,d7,bl,blpol
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
// Set the LCD I2C address
Mais tous les 1602 LCD que je vois en ligne ont les mêmes broches que les miennes, comme vous pouvez le voir sur ma photo ci-dessous:
Ces broches semblent être standard:
Pour encore plus de confusion, les broches de la carte LCD commencent par 1 à gauche, mais les broches du code par défaut semblent commencer par 0! J'ai donc essayé de changer les broches du code en chiffres sur la carte LCD. L'écran LCD ne se transforme plus en 2 lignes de carrés et ne clignote plus le rétro-éclairage. J'ai ensuite essayé de soustraire 1 de chaque broche (pour commencer à 0), même résultat. J'ai ensuite essayé d'utiliser les broches par défaut moins 1, même résultat. Les broches par défaut sont donc plus correctes?! Qu'est-ce que je fais mal?
Quelqu'un d'autre a-t-il réussi à faire fonctionner l'un de ces contrôleurs I2C, et si oui, comment?
Code complet:
/* YourDuino.com Example Software Sketch
16 character 2 line I2C Display
Backpack Interface labelled "YwRobot Arduino LCM1602 IIC V1"
[email protected] */
/*-----( Import needed libraries )-----*/
#include <Wire.h> // Comes with Arduino IDE
// Get the LCD I2C Library here:
// https://bitbucket.org/fmalpartida/new-liquidcrystal/downloads
#include <LiquidCrystal_I2C.h>
/*-----( Declare objects )-----*/
// set the LCD address to 0x27 for a 20 chars 2 line display
// Set the pins on the I2C chip used for LCD connections:
// addr, en,rw,rs,d4,d5,d6,d7,bl,blpol
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // Set the LCD I2C address
void setup() /*----( SETUP: RUNS ONCE )----*/
{
Serial.begin(9600); // Used to type in characters
lcd.begin(16,2); // initialize the lcd for 16 chars 2 lines, turn on backlight
// ------- Quick 3 blinks of backlight -------------
for(int i = 0; i< 3; i++) {
lcd.backlight();
delay(250);
lcd.noBacklight();
delay(250);
}
lcd.backlight(); // finish with backlight on
//-------- Write characters on the display ------------------
// NOTE: Cursor Position: (CHAR, LINE) start at 0
lcd.setCursor(0,0); //Start at character 4 on line 0
lcd.print("Hello, world!");
delay(1000);
lcd.setCursor(0,1);
lcd.print("HI!YourDuino.com");
delay(8000);
// Wait and then tell user they can start the Serial Monitor and type in characters to
// Display. (Set Serial Monitor option to "No Line Ending")
lcd.clear();
lcd.setCursor(0,0); //Start at character 0 on line 0
lcd.print("Use Serial Mon");
lcd.setCursor(0,1);
lcd.print("Type to display");
}/*--(end setup )---*/
void loop() /*----( LOOP: RUNS CONSTANTLY )----*/
{
{
// when characters arrive over the serial port...
if (Serial.available()) {
// wait a bit for the entire message to arrive
delay(100);
// clear the screen
lcd.clear();
// read all the available characters
while (Serial.available() > 0) {
// display each character to the LCD
lcd.write(Serial.read());
}
}
}
}/* --(end main loop )-- */
Réponses:
Tout d'abord, il semble que ces fils ne soient pas correctement connectés:
Je n'ai jamais démonté de pull féminin auparavant, donc ce n'est peut-être pas le problème. Cependant, il semble probable que cela puisse être une cause.
En outre, vous devez régler le contraste en tournant ce potentiomètre (la chose bleue qui ressemble un peu à une vis). Les écrans LCD n'afficheront rien, une version délavée du texte ou des cases bleues si le contraste n'est pas réglé correctement. C'est probablement la cause.
la source
J'ai acheté le SainSmart 20x04 et j'ai également dû changer l'adresse pour
0x3F
. Mon cavalier de rétro-éclairage manquait, cette petite tête à droite de la carte I2C fournit la puissance du rétro-éclairage. Un code que j'ai trouvé comprenait ceci:la source
J'ai le même problème et je le corrige simplement en changeant l'adresse de l'écran LCD 1602A, qui se trouve dans les didacticiels 0x27 mais dans mon appareil est 0x3F.
Bonne chance!
la source
LiquidCrystal_I2C lcd(0x3F,16,2);
. Merci beaucoup!Autant que je sache, les résistances de pull-up devraient être intégrées à l'écran.
Avez-vous essayé différentes adresses? J'en ai un similaire, qui fonctionne sur l'adresse 0x3F. Peut-être que cela aide.
la source
Modifiez ce code:
Pour ça:
(L'argument avant "POSITIF" est changé de 3 en 8)
la source
Je suis sûr que ce lien vous sera utile, j'ai le même écran LCD et je l'ai fait fonctionner avec I2C en suivant les étapes de ce lien http://forum.arduino.cc/index.php?topic=128635.0
la source
Le module I2C D6-> P5 est D5-> P6 (inversé).
la source
Ctrl+K
pour que votre navigateur le fasse pour vous. Votre réponse serait plus utile si vous étiez plus en détail.