I/O Shield mit 4x20 LCD-Display

Sonntag, 25. Januar 2015

0 Kommentare
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

0 Kommentare
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
        }

LCD-Keypad Shield

0 Kommentare
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
                }
              }