Een LCD scherm kan voorzien worden van een I2C (spreek uit I-kwadraad-C (I-squared-C)) module. Je hebt dan behalve de 5v en ground verbinding nog maar 2 draden (en Arduino pinnen) nodig. We hebben twee bibliotheken nodig: Wire.h voor de I2C module en LiquidCrystal_I2C.h voor het display. De Wire.h is een standaard Arduino bibliotheek en die kan je bij schets > bibliotheek gebruiken zo aanklikken. Boven in je sketch komt dan #include <Wire.h> te staan.
De LiquidCrystal bibliotheek moet je misschien nog installeren. Kijk daarvoor bij libraries installeren ( https://sites.google.com/site/hwcontwerpen/sensoren/libraries-installeren )
We gebruiken hier de LiquidCristal_I2C van Frank de Brabander die kan je hier downloaden: https://github.com/fdebrabander/Arduino-LiquidCrystal-I2C-library.
Helemaal beneden staan een voorbeeldprogramma waarbij eerst in de setup een paar seconden een tekst op het scherm geschreven wordt. Hieruit kan je o.a. afleiden hoe je de cursor kan plaatsen en het scherm leegmaken. Daarna leest het programma in de loop een LDR (lichtsensor) uit en schrijft de waardes op het display. Beneden een bepaalde waarde van de lichtsensor gaat een ledje branden.
Hieronder het aansluitschema.
De SCL en SDA aansluitingen van de I2C module worden verbonden met de SCL en SDA pinnen van de Arduino. Die zitten naast de AREF pin.
Gnd op Gnd en VCC op Arduino 5v.
// LCD I2C demo
// Bibliotheek LCD:
// https://github.com/fdebrabander/Arduino-LiquidCrystal-I2C-library
// LDR waarde wordt op het display weergegeven en een led brandt beneden een
// bepaalde waarde.
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2); // LCD adres is 0x27, 16 karakters, 2 regels
int led = 4;
int ldrWaarde = 0;
int ldrPin = A0;
void setup()
{
lcd.init(); // initialiseer de lcd
lcd.backlight();
lcd.setCursor(1, 0);
lcd.print("....LCD-I2C....");
lcd.setCursor(6, 1);
lcd.print("DEMO");
delay(2000);
lcd.clear(); // na 2 seconden clear scherm
pinMode(led, OUTPUT);
}
void loop()
{
lcd.setCursor(3, 0);
lcd.print("ldrWaarde");
ldrWaarde = analogRead(ldrPin);
lcd.setCursor(7, 1);
lcd.print(ldrWaarde);
lcd.print(" ");
if (ldrWaarde < 500) {
digitalWrite(led, HIGH);
}
else {
digitalWrite(led, LOW);
}
}