I2C LCD und Arduino

Da ich in letzter Zeit viel mit dem I2C Display gebastelt habe und damals den Beitrag I2C LCD Modul mit 20×4 Zeichen nie wirklich weitergeführt habe, wollte ich in diesem HowTo zeigen, wie einfach man mit I2C LCD und Arduino eine kleine Visualisierung zusammenbauen kann.
I2C LCD und Arduino - Beispiel

I2C Bus, Verkabelung und Adresse

Kurz zum I²C Bus: Dieser benötigt immer zwei Signalleitungen Takt SCL und Daten SDA. Daher kann man beim Verkabeln nicht viel falsch machen. Aufpassen muss man nur ein wenig auf die z. T. vorgegebene I²C Adresse. Bei vielen Bauteilen lässt sich aber mit Lötbrücken oder über Jumper die Adresse anpassen. Probleme mit Überschneidungen hatte ich aber noch nicht. Ganz genau sollte man auf den richtigen Pegel auf dem I²C Bus achten, der Arduino hat 5V. Die meisten Module arbeiten aber mit 3.3V sowie 5V I²C Pegelspannung zusammen, wenn nicht, wird ein i²C kompatibler Pegelwandler wie z. B. der Adafruit Logic Level Converter – BSS138 benötigt. Wenn alles passt, muss man nur noch die i²C Pins auf dem jeweiligen Arduino finden.

Arduino SDA SCL
Uno A4 A5
Mega 20 21
Micro Pro 2 3

Wenn auf der Arduino Seite die entsprechenden Ports lokalisiert wurden, können I2C LCD und Arduino entsprechend 1:1 mit GND, VCC (5V),  SDA und SCL miteinander verbunden werden. Hier muss nicht auf den richtigen Pegel geachtet werden.

Arduino Sketch File

Im Beispiel habe ich verschiedene Funktionen wie Symbole und Umlaute anzeigen sowie Backlight aus- und einschalten eingebaut. Dabei habe ich versucht die einzelnen Befehle als Kommentar kurz und einfach zu beschreiben.

Ich verwende die LiquidCrystal I2C V1.1 Library von DFRobot die zwar schon etwas länger nicht gepflegt wurde aber auch noch mit der aktuellen Arduino IDE 1.6.x kompatibel ist. Bisher hatte ich mit dieser Library aber die geringsten Probleme.

// Sketch based on CustomChars example from DFRobot.com

#include <Wire.h> // Library for I2C
#include <LiquidCrystal_I2C.h> // Library for I2C LCD

LiquidCrystal_I2C lcd(0x27, 20, 4); // Set address 0x27 (default) 20 x 4 character LCD

uint8_t bell[8]  = {0x4,0xe,0xe,0xe,0x1f,0x0,0x4};
uint8_t note[8]  = {0x2,0x3,0x2,0xe,0x1e,0xc,0x0};
uint8_t clock[8] = {0x0,0xe,0x15,0x17,0x11,0xe,0x0};
uint8_t heart[8] = {0x0,0xa,0x1f,0x1f,0xe,0x4,0x0};
uint8_t duck[8]  = {0x0,0xc,0x1d,0xf,0xf,0x6,0x0};
uint8_t check[8] = {0x0,0x1,0x3,0x16,0x1c,0x8,0x0};
uint8_t cross[8] = {0x0,0x1b,0xe,0x4,0xe,0x1b,0x0};
uint8_t retarrow[8] = {0x1,0x1,0x5,0x9,0x1f,0x8,0x4};

void setup()
{
  lcd.init(); // Initialize LCD
  lcd.backlight(); // Turn on LCD backlight
  
// Special symbols optional
  lcd.createChar(0, bell);
  lcd.createChar(1, note);
  lcd.createChar(2, clock);
  lcd.createChar(3, heart);
  lcd.createChar(4, duck);
  lcd.createChar(5, check);
  lcd.createChar(6, cross);
  lcd.createChar(7, retarrow);

  lcd.clear(); // Clear LCD Screen  							

// Screen 1 - Logo
  
  lcd.print("********************"); // write text

  lcd.setCursor(0, 1); // Set cursor to line 2
  lcd.print("www.nikolaus-"); // write text

  lcd.setCursor(0, 2); // Set cursor to line 3
  lcd.print("        lueneburg.de"); // write text

  lcd.setCursor(0, 3); // Set cursor to line 4
  lcd.print("********************"); // write text

  delay(5000);
  lcd.clear(); // Clear LCD Screen

// Screen 2 - Backlight
  lcd.print("   Turn backlight"); // write text
  lcd.setCursor(5, 1); // Set cursor to line 2 position 6
  lcd.print("off and on"); // write text

  delay(5000);
  lcd.clear(); // Clear LCD Screen

  lcd.noBacklight(); // Turn off LCD backlight
  delay(2000);
  lcd.backlight(); // Turn on LCD backlight

// Screen 3 - Umlaute
  lcd.print("Umlaute"); // write text
  lcd.setCursor(0, 1); // Set cursor to line 2
  lcd.write(239); // ö
  lcd.print("=239 "); // write text
  lcd.write(245); // ü
  lcd.print("=245 "); // write text
  lcd.write(225); // ä
  lcd.print("=225"); // write text

  lcd.setCursor(0, 2); // Set cursor to line 3
  lcd.print("Beispiel Symbole"); // write text
  lcd.setCursor(0, 3); // Set cursor to line 4
  lcd.write(2); // Clock
  lcd.print("=2 "); // write text
  lcd.write(3); // Heart
  lcd.print("=3 "); // write text
  lcd.write(5); // Check Mark
  lcd.print("=5 "); // write text
  lcd.write(6); // Cancel
  lcd.print("=6"); // write text

  delay(5000);
  lcd.clear(); // Clear LCD Screen

// Screen 4 - COde Description
  lcd.setCursor(0, 1); // Set cursor to line 2
  lcd.print(" Showing Code 0-255"); // write text
  
  delay(5000);

// Screen 5 - Display Key Codes
  displayKeyCodes();
}

// Function to display all keycodes
void displayKeyCodes(void) {
  uint8_t i = 0;
  while (1) {
    lcd.clear();
    
    lcd.print("Code ");
    lcd.print(i);
    lcd.print(" - ");
    lcd.print(i + 15);
    lcd.setCursor(0, 1);
    for (int j = 0; j < 16; j++) {
      lcd.write(i + j);
    }
    i += 16;
    
    lcd.setCursor(0, 2);
    lcd.print("Code ");
    lcd.print(i);
    lcd.print(" - ");
    lcd.print(i + 15);
    
    lcd.setCursor(0, 3);
    for (int j = 0; j < 16; j++) {
      lcd.write(i + j);
  }
  i += 16;
  delay(6000);
  }
}

void loop()
{
  // Nothing to do here
}

Schreibe einen Kommentar

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

*

code