New LiquidCrystal Library

Als kleine Ergänzung zu den bisherigen Beiträgen mit I2C LCD Modul wollte ich heute kurz etwas über die New LiquidCrystal Library von “F. Malpartida” schreiben. Ich habe gewechselt da ich vor kurzem in einem Projekt mit der bisher verwendeten LiquidCrystal I2C Library von DFRobot Probleme hatte.

New LiquidCrystal Library - Scrolling Text

Grundsätzlich funktionierte die alte LiquidCrystal I2C Library von DFRobot sehr gut, in Verbindung mit einer hohen Anzahl an Interrupts blieb bei mir aber leider der Arduino hängen?! Mit der New LiquidCrystal Library ist das Problem nicht mehr aufgetreten.

Quellen

Die Library und weitere Informationen findet ihr auf der New LiquidCrystal Library Webseite. Auf der englischen Seite arduino-info.wikispaces.com findet ihr eine sehr gute Beschreibung für andere I2C LCD Module und andere Beispiele.

Sketch

Ich habe mal ein kleines Beispiel für ein 20×4 Zeichen LCD Modul mit der schwarzen YwRobot I2C Platine geschrieben. Damit es nicht ganz so langweilig wird, habe ich noch eine Funktion zum Text scrollen eingebaut.

Für die neue New LiquidCrystal Library müssen nur zwei Zeilen angepasst werden. Ihr solltet im Anfangsbereich alle wichtigen Funktionen finden die man so benötigt.

#include <Wire.h>
#include <LiquidCrystal_I2C.h>

// LiquidCrystal_I2C lcd(0x27, 20, 4);  // DFRobot
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);  // New LiquidCrystal

void setup()
{
// lcd.init();  // DFRobot
  lcd.begin(20,4);  // New LiquidCrystal

  lcd.setCursor(0,1);
  lcd.print("www.nikolaus-");
  delay(2000);

  lcd.setCursor(8,2);
  lcd.print("lueneburg.de");
  delay(2000);
  
  lcd.noBacklight();
  lcd.clear();
  delay(2000);

  lcd.backlight();
  delay(500);
}

void loop()
{
  DisplayText(); // Scrolling Text Function
}

//////////////////
// Scolling Text

const int LCD_COLS = 20; // cols per line
int LCD_START = 0; // start position for text

char LCD_TEXT[] = "Scrolling Text  - www.nikolaus-lueneburg.de - Scrolling Text";

void DisplayText()
{
  int TEXT_LEN = (sizeof(LCD_TEXT) / sizeof(char)) - 1;
  int LCD_LIMIT = TEXT_LEN - LCD_COLS;
  
  {
    if (LCD_START > LCD_LIMIT)
    {
      delay(1500);
      for(int i = 0; i < LCD_COLS; i++)
      {
        lcd.setCursor(i, 1);
        lcd.print(LCD_TEXT[i]);
      }
      delay(1500);
      LCD_START = 0;
    }
    
    if (LCD_START <= LCD_LIMIT)
    {
      for(int i = 0; i < LCD_COLS; i++)
      {
        lcd.setCursor(i, 1);
        lcd.print(LCD_TEXT[LCD_START + i]);
      }
      LCD_START++;
      delay(350);
    }
  }
}

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert