Ich war mit dem gekauften LCD-Shield nicht ganz zufrieden. Deshalb entschloss ich mich ein eigenes Shield zu bauen. Es bekam vier Taster, einen Encoder mit Druck-Taster, vier Led's und eine Buchsenleiste für einen analogen Eingang. Ebenso sind die original I/O's des Uno's als Buchsenleiste ausgeführt.
Aber Highlight ist das aufsteckbare 4x20 Zeichen LCD-Display.
Belegung:
Pin 0 = Taster 1
Pin 1 = Taster 2
Pin 8 = Taster 3
Pin 9 = Taster 4
Pin 10 = Taster Drehgeber
Pin 7 = Led 1
Pin 6 = Led 2
Pin 5 = Led 3
Pin 4 = Led 4
Pin 13= Led
Pin 11, A1, A2, A3, A4, A5 = LCD
Serielles Interface für LCD-Display
Um ein LCD-Display am Arduino anzuschliesen
werden 6 Pins plus Spannungsversorgung benötigt. Da können die I/O's
schon einmal knapp werden. Bei ebay bin ich auf ein "Serial Interface Port Board For Arduino 1602 LCD Converter" gestoßen.
Diese sind unter 2.-€ zu haben und benötigen neben der
Spannungsversorgung nur noch zwei Pins. Es gibt sogar schon ein Poti um
den Kontrast einzustellen. Die kleine Platine hat schon alle Pins an
Board und wird einfach in die Durchkontaktierungen des LCD-Displays
gesteckt und verlötet. Alles paßt perfekt. Hier stellte sich allerdings
das Problem heraus das keine Libary beim Verkäufer zum Download bereit
stand. Hier wurde ich dann fündig: Library. Nachdem die Library eingebunden war, funktionierte mein kleines Testprogramm auf Anhieb.
Programm:
Das LCD-Display wird initialisiert und die Hintergrundbeleuchtung eingeschaltet.
In die erste Zeile wird das berühmte "Hello World" geschrieben
In der zweiten Zeile läuft ein Zähler hoch.
Belegung:
SCL: Pin A5
SDA: Pin A4
Spannungsversorgung
Testprogramm:
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2); // LCD Address 0x27 und 16 Zeichen, 2 Zeilen
int i = 0; // Zähler auf 0 setzen
void setup()
{
lcd.init(); // initialize das lcd
lcd.clear(); // LCD löschen
lcd.setCursor(0, 0); // Cursor setzen
lcd.backlight(); // Hintergrundbeleuchtung an
lcd.print("Hello, world!"); // schreibe auf LCD
delay (3000);
}
void loop()
{
i=i+1; // Zähler hoch zählen
lcd.setCursor(0, 1); // Cursor setzen
lcd.print(i); // schreibe auf LCD
delay (1000); // warte 1000ms
}
Programm:
Das LCD-Display wird initialisiert und die Hintergrundbeleuchtung eingeschaltet.
In die erste Zeile wird das berühmte "Hello World" geschrieben
In der zweiten Zeile läuft ein Zähler hoch.
Belegung:
SCL: Pin A5
SDA: Pin A4
Spannungsversorgung
Testprogramm:
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2); // LCD Address 0x27 und 16 Zeichen, 2 Zeilen
int i = 0; // Zähler auf 0 setzen
void setup()
{
lcd.init(); // initialize das lcd
lcd.clear(); // LCD löschen
lcd.setCursor(0, 0); // Cursor setzen
lcd.backlight(); // Hintergrundbeleuchtung an
lcd.print("Hello, world!"); // schreibe auf LCD
delay (3000);
}
void loop()
{
i=i+1; // Zähler hoch zählen
lcd.setCursor(0, 1); // Cursor setzen
lcd.print(i); // schreibe auf LCD
delay (1000); // warte 1000ms
}
LCD-Keypad Shield
Um Programme für den Arduino testen zu können und zu entwickeln, habe ich mir dieses LCD Keypad Shield bestellt.
Es wird einfach auf den Uno Rev 3 aufgesteckt. Leider gab es keine Belegung dazu. Doch nach etwas probieren konnte ich die Belegung herausfinden. Gewundert hat mich, daß alle Tasten nur an einen einzigen analogen Eingang angeschlossen sind.
Beschreibung:
Das Programm liest den Analogwert an Pin A0 ein und zeigt den Analogert in Zeile eins auf dem Display an. Wird eine der Tasten gedrückt ändert sich der Analogwert entsprechend und die gedrückte Taste wird in Zeile zwei angezeigt.
Belegung:
Pin A0: Taster
Pin 4-9: LCD-Display
Pin 10: LCD-Hintergrundbeleuchtung
Programm:
/* I/O Shield.ino
*
* Created on: 15.12.2014
* Last changed on: 16.12.2014
*
* Autor: fk
*/
#include <LiquidCrystal.h> // binde Bibliothek LiquidCrystal ein
LiquidCrystal lcd(8, 9, 4, 5, 6, 7); // initialisieren Bibliothek und Interface-Pins
#define Tast_All A0 // Analog-Eingang
int Led = 10; // Hintergrundbeleuchtung
int All = 0;
int Up = 0;
int Down = 0;
int Right= 0;
int Left = 0;
int Select=0;
void setup()
{
pinMode(Led,OUTPUT); // Pin10 als Ausgang setzen
analogWrite(Led,40); // Helligkeit der Hintergrundbeleuchtung setzen
pinMode(Tast_All,INPUT); // Pin0 als Eingang setzen
lcd.begin(16, 2); // LCD-Display initialisieren
lcd.clear(); // LCD löschen
lcd.setCursor(0, 0); // Cursor an Pos setzen
lcd.print("I/O Shield"); // schreiben
lcd.setCursor(0, 1); // Cursor an Pos setzen
lcd.print("Ver 1.0 by FK"); // schreiben
delay(3000); // warte 3sec
}
void loop()
{
delay(100); // warte 0,1sec
lcd.clear(); // Display löschen
lcd.setCursor(0, 1); // Cursor an Pos setzen
All = analogRead(Tast_All); // Analogwert einlesen
lcd.setCursor(0, 0); // Cursor an Pos setzen
lcd.print(All); // Analogwert schreiben
lcd.setCursor(0, 1); // Cursor an Pos setzen
if (All == 0) // Wenn Wert = 0
{
lcd.print("rechts"); // schreiben
}
if (All >= 300 && All <= 312) // Wenn Wert zwischen xx und yy
{
lcd.print("runter"); // schreibe
}
if (All >= 124 && All <= 136) // Wenn Wert zwischen xx und yy
{
lcd.print("hoch"); // schreiben
}
if (All >= 474 && All <= 486) // Wenn Wert zwischen xx und yy
{
lcd.print("links"); // schreiben
}
if (All >= 714 && All <= 726) // Wenn Wert zwischen xx und yy
{
lcd.print("Auswahl"); // schreiben
}
}
Es wird einfach auf den Uno Rev 3 aufgesteckt. Leider gab es keine Belegung dazu. Doch nach etwas probieren konnte ich die Belegung herausfinden. Gewundert hat mich, daß alle Tasten nur an einen einzigen analogen Eingang angeschlossen sind.
Beschreibung:
Das Programm liest den Analogwert an Pin A0 ein und zeigt den Analogert in Zeile eins auf dem Display an. Wird eine der Tasten gedrückt ändert sich der Analogwert entsprechend und die gedrückte Taste wird in Zeile zwei angezeigt.
Belegung:
Pin A0: Taster
Pin 4-9: LCD-Display
Pin 10: LCD-Hintergrundbeleuchtung
Programm:
/* I/O Shield.ino
*
* Created on: 15.12.2014
* Last changed on: 16.12.2014
*
* Autor: fk
*/
#include <LiquidCrystal.h> // binde Bibliothek LiquidCrystal ein
LiquidCrystal lcd(8, 9, 4, 5, 6, 7); // initialisieren Bibliothek und Interface-Pins
#define Tast_All A0 // Analog-Eingang
int Led = 10; // Hintergrundbeleuchtung
int All = 0;
int Up = 0;
int Down = 0;
int Right= 0;
int Left = 0;
int Select=0;
void setup()
{
pinMode(Led,OUTPUT); // Pin10 als Ausgang setzen
analogWrite(Led,40); // Helligkeit der Hintergrundbeleuchtung setzen
pinMode(Tast_All,INPUT); // Pin0 als Eingang setzen
lcd.begin(16, 2); // LCD-Display initialisieren
lcd.clear(); // LCD löschen
lcd.setCursor(0, 0); // Cursor an Pos setzen
lcd.print("I/O Shield"); // schreiben
lcd.setCursor(0, 1); // Cursor an Pos setzen
lcd.print("Ver 1.0 by FK"); // schreiben
delay(3000); // warte 3sec
}
void loop()
{
delay(100); // warte 0,1sec
lcd.clear(); // Display löschen
lcd.setCursor(0, 1); // Cursor an Pos setzen
All = analogRead(Tast_All); // Analogwert einlesen
lcd.setCursor(0, 0); // Cursor an Pos setzen
lcd.print(All); // Analogwert schreiben
lcd.setCursor(0, 1); // Cursor an Pos setzen
if (All == 0) // Wenn Wert = 0
{
lcd.print("rechts"); // schreiben
}
if (All >= 300 && All <= 312) // Wenn Wert zwischen xx und yy
{
lcd.print("runter"); // schreibe
}
if (All >= 124 && All <= 136) // Wenn Wert zwischen xx und yy
{
lcd.print("hoch"); // schreiben
}
if (All >= 474 && All <= 486) // Wenn Wert zwischen xx und yy
{
lcd.print("links"); // schreiben
}
if (All >= 714 && All <= 726) // Wenn Wert zwischen xx und yy
{
lcd.print("Auswahl"); // schreiben
}
}
Abonnieren
Posts (Atom)