Ibland vill man kunna ge mer information till användaren av sina prylar än vad man kan göra med några lysdioder. Då är en text-LCD-skärm en mycket smidig lösning. Dessa skärmar kan visa text och enkel grafik. De finns i olika storlekar och färger men de vanligaste har 2 rader med 16 tecken, eller 4 rader med 20 tecken och är blå/vita eller grön/svarta. Vissa har även inbyggd belysning så att de går att läsa även i mörker. Dessa display har normalt väldigt många anslutningar för att styra dem, men det finns mycket billiga moduler med PCF8574-chip som löds fast baktill på displayen som ger ett I²C-gränssnitt istället så att hela displayen kan styras med enbart 2 ledningar.
Kopplingen
Koppla in displayen till Arduino-kortet enligt bilden nedan.
Viktigt! På baksidan av skärmen på den lilla i²c-modulen som du ansluter dina sladdar till så finns det ett litet vridmotstånd (potentiometer). Denna justerar kontrasten på skärmen. Den är nästan alltid fel satt från fabriken så den måste justeras för att du ska kunna se något på skärmen. Detta är ett vanligt misstag som gör att många tror att något är fel på deras skärm eller koppling. Så om du inte ser något på skärmen justera kontrasten genom att vrida på potentiometern med en liten skruvmejsel tills att du kan se texten. När du väl ställt in kontrasten rätt en gång så behöver den inte justeras igen.
Anslutningarna till displayen är följande:
GND | Jord (0 Volt) |
Vcc | + 5 Volt |
SDA | I²C datasignal |
SCL | I²C klocksignal |
Kodbibliotek
I det här exemplet använder vi oss av en 16×2-teckens display med bakgrundsbelysning och med en I²C-modul, men koden går lätt att anpassa för andra skärmar. Det enda kravet är att de använder styrkretsar som är kompatibla med den mycket populära Hitachi HD44780-kretsen. Det kod-bibliotek vi använder följer inte med Arduino-miljön, men går att installera med ett par klick. Starta Arduino-programmet, gå till menyn Skiss > Inkludera bibioktek > Hantera bibliotek… Detta öppnar upp bibliotekshanteraren och här kan du söka efter biblioteket ”LiquidCrystal_PCF8574”. När du hittat det klickar du på det och väljer installera. När biblioteket laddats ner och installeras kan du stänga bibliotekshanteraren. Detta behöver du bara göra en gång på datorn, därefter finns det tillgängligt.
Beskrivning av koden
Koden innehåller inga direkt konstigheter. Först hämtar vi in kod-bibiokteket för att styra skärmen och skapar ett objekt för skärmen som håller ordning på inställningar och tillhandahåller alla funktioner som behövs, såsom skriva text, radera och styra bakgrundsbelysning. I setup() startar vi igång skärmen och gör alla nödvändiga förberedelser, såsom att rensa skärmen, slå på bakgrundsbelysning och skriva ut en första text-rad. Huvudprogrammet består av en for-loop som skapar en variabel i som sätts till 10. Sedan kör den sin kod och efteråt minskar den i med 1 (i–) och om i fortfarande är större än noll så körs koden en gång till. Detta innebär att koden i for-loopen kommer att köras 11 gånger och räkna från 10 till 0. Koden inne i for-loopen rensar varje gång andra raden på skärmen och skriver ut räknarens värde dvs variabeln i och väntar sedan en sekund. När for-loopen är färdig så rensar vi skärmen helt och skriver ut ett nytt meddelande. Det sista som sker är att vi startar en while-loop med ett konstant sant värde och utan kod. Detta är lite av en specialkonstruktion som gör att mikrokontrollern i princip hänger sig och kommer inte att göra något mer förrän man nollställer den med reset-knappen eller bryter strömmen till den.
Koden
// Hämta in kod-biblioteket för styrning av ASCII-displayer via I2C
#include <LiquidCrystal_PCF8574.h>
// Skapa objekt för att styra displayen
// Använd I2C-adress 0x27 (standard)
LiquidCrystal_PCF8574 lcd(0x27);
void setup() {
// Starta skärmen och ange storlek - 16 tecken och 2 rader.
lcd.begin(16, 2);
// Rensa skärmen från eventuell gammal text
lcd.clear();
// Sätt markören längst upp till vänster
lcd.home();
// Aktivera skärmens bakgrundsbelysning med max ljusstyrka
lcd.setBacklight(255);
// Skriv text på första raden
lcd.print("Countdown...");
}
void loop() {
for (int i = 10; i > 0; i--) {
// Flytta markören till början av andra raden (tecken 0, rad 1)
lcd.setCursor(0, 1);
// Rensa raden genom att skriva 16 mellanslag
lcd.print(" ");
// Flytta tillbaka markören till början av raden
lcd.setCursor(0, 1);
// Skriv räknarvärde
lcd.print(i);
// Vänta en sekund
delay(1000);
}
// Rensa skärmen
lcd.clear();
// Sätt markören en bit in på första raden (tecken 4, rad 0)
lcd.setCursor(4, 0);
// Skriv ut slut-text
lcd.print("KA-BOOM!");
// Stoppa programmet
while (1);
}