In acest articol vom folosi un display LCD 2004 impreuna cu un adaptor I2C pentru a reduce numarul conexiunilor intre afisaj si modulul Arduino.
Pretul unui astfel de display este de 23 lei si se poate cumpara de aici.
Conectarea dintre modulul adaptor si Arduino este simpla deoarece vom folosi doar 4 fire: +5V, GND, SCL si SDA.
Pentru a putea utiliza acest adaptor vom folosi o librarie externa numita Arduino Liquid Cristal I2C Library si care poate fi descarcata de aici.
Pe langa aceasta librarie va trebui sa cunoastem si adresa i2c al adaptorului folosit. Pentru acest lucru vom folosi sketch-ul i2c_scanner disponibil in editorul Arduino (meniul Fisier > Exemple > Wire > i2c_scanner). Codul acestui sketch este mai jos:
#include <Wire.h>
void setup() {
Wire.begin();
Serial.begin(9600);
while (!Serial); // Leonardo: wait for serial monitor
Serial.println("\nI2C Scanner");
}
void loop() {
int nDevices = 0;
Serial.println("Scanning...");
for (byte address = 1; address < 127; ++address) {
Wire.beginTransmission(address);
byte 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
}
Dupa ce citim adresa i2c a adaptorului vom testa functionarea displayului. Pentru acest lucru vom folosi sketchul de mai jos:
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3F, 20, 4);
void setup()
{
lcd.begin();
lcd.backlight();
lcd.setCursor(1, 0);
lcd.print("Testare afisaj LCD");
lcd.setCursor(3, 1);
lcd.print("cu adaptor I2C");
lcd.setCursor(1, 3);
lcd.print("electronicstore.ro");
delay(3000);
lcd.clear();
}
void loop()
{
lcd.setCursor(0, 0);
lcd.print("Testare rand 1");
lcd.setCursor(0, 1);
lcd.print("Testare rand 2");
lcd.setCursor(0, 2);
lcd.print("Testare rand 3");
lcd.setCursor(0, 3);
lcd.print("Testare rand 4");
delay(3000);
lcd.noDisplay();
lcd.noBacklight();
delay(500);
lcd.clear();
lcd.display();
lcd.backlight();
lcd.setCursor(0, 2);
lcd.print("www.");
lcd.setCursor(0, 3);
lcd.print("electronicstore.ro");
delay(3000);
lcd.clear();
delay(500);
}
Cateva poze cu modulul I2C si afisajul in functiune mai jos:



