Sometimes you want to give more information to the user of your devices than what can be conveyed with a couple of LEDs. For that an alphanumeric LCD is a very convenient solution. These displayes can show text and very simple graphics. There are many different sizes and colors but the most common ones have 2 lines with 16 characters , or 4 lines 20 characters and are blue/white or green/black. Some also have built-in background light making it possible to read the display when it’s dark. These displays usually have a large number of connectors for controlling them, but there exists very cheap modules with a PCF8574-chip that can be soldered to the back of the display giving you a I²C-interface instead so that the while display can be controlled using only to wires.

Code library

In this example we use a display with 16×2 characters and background light with a I²C-module, but the code is easily adaptable for other displays. The only requirement is that the display uses a control chip that us compatible with the very popular Hitachi HD44780-chip. The code library we use is not included in the default Arduino environment, but it’s very easy to install using only a few mouse cliks. Start the Arduino development environment program and go to the menu Sketch > Include library > Manage Libraries… This opens the library manager and here you can search for the library “LiquidCrystal_PCF8574”. Once you’ve found it you click on it and click the install button. Once the library has been downloaded an installed you can close the library manager. You only need to do this once, and the library will then always be available on this computer.

The circuit

Connect the display to the Arduino board as below:

Arduino-project 006 – Display text on a LCD

Description of the code

The code doesn’t contain any real surprises. First we include the code libraryfor controlling the display and create an object for the display that keeps track of settings and provides all functions needed, such as write text, erase text and activating the backlight. In setup() we start the display and make all preparations, such as clearing the display, turning on the backlight and write a first line of text. The main program consists of a for-loop that defines a variabel i that is set to 10. It then executes its code and decreases i with 1 (i--) and if i is still greater than zero the cde is executed once more. This means that the code inside the for-loopen will run 11 times and count from 10 to 0. Each time around the for-loopen we erase the second line on the display and print out the value of the counter, i.e. the i variable and then wait for one second. When the for-loopen is done we clear the display completely and print out a new message. The last thing happening is that we enter a while-loop with a constant true value and without any code. This is something of a special construction which makes the micro controller hang and prevents it from doing anything else until you reset it using the reset button or disconnect the power.

The code

// Include the library for controlling ASCII-displays via I2C
#include <LiquidCrystal_PCF8574.h>

// Create object for controlling the display.
// Use I2C-address 0x27 (standard)
LiquidCrystal_PCF8574 display(0x27);

void setup() {
  // Start the display and specify the size - 16 characters in 2 lines.
  display.begin(16, 2);
  // Clear all old text (if any).
  display.clear();
  // Place the cursor in the upper left corner.
  display.home();
  // Turn on the backlight of the display and set it to max brightness.
  display.setBacklight(255);
  // Print text on the first line
  display.print("Countdown...");
}

void loop() {
  for (int i = 10; i > 0; i--) {
    // Move the cursor to the beginning of the second line (character 0, line 1)
    display.setCursor(0, 1);
    // Clear the line by writing 16 spaces.
    display.print("                ");
    // Move the cursor back to the beginning of the line.
    display.setCursor(0, 1);
    // Print the counter value
    display.print(i);
    // Wait one second
    delay(1000);
  }
  // Clear the display
  display.clear();
  // Set the cursor a small way into the first line (character 4, line 0)
  display.setCursor(4, 0);
  // Print out the final text.
  display.print("KA-BOOM!");
  // Halt the program
  while (1);
}

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.

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.

Kopplingen

Koppla in displayen till Arduino-kortet enligt bilden nedan.

Arduino-projekt 006 – Visa text på LCD-skärm

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 skarm(0x27);

void setup() {
  // Starta skärmen och ange storlek - 16 tecken i 2 rader.
  skarm.begin(16, 2);
  // Rensa skärmen från eventuell gammal text
  skarm.clear();
  // Sätt markören längst upp till vänster
  skarm.home();
  // Aktivera skärmens bakgrundsbelysning med max ljusstyrka
  skarm.setBacklight(255);
  // Skriv text på första raden
  skarm.print("Countdown...");
}

void loop() {
  for (int i = 10; i > 0; i--) {
    // Flytta markören till början av andra raden (tecken 0, rad 1)
    skarm.setCursor(0, 1);
    // Rensa raden genom att skriva 16 mellanslag
    skarm.print("                ");
    // Flytta tillbaka markören till början av raden
    skarm.setCursor(0, 1);
    // Skriv räknarvärde
    skarm.print(i);
    // Vänta en sekund
    delay(1000);
  }
  // Rensa skärmen
  skarm.clear();
  // Sätt markören en bit in på första raden (tecken 4, rad 0)
  skarm.setCursor(4, 0);
  // Skriv ut slut-text
  skarm.print("KA-BOOM!");
  // Stoppa programmet
  while (1);
}

Pin It on Pinterest

Share This