// ---------------------------------------------------------
// I2C - LCD Anzeige
// Pinning: ESP32 D22 <=> SCL I2C_LCD
// D21 <=> SDA
// 3V3 <=> Vcc
// GND <=> GND
// Pinning: UNO D19 <=> SCL I2C_LCD
// D18 <=> SDA
// Befehle:
// oLCD.init ()
// oLCD.backlight ();
// oLCD.clear ();
// oLCD.setCursor (iSpalte,iZeile);
// oLCD.print ("Hallo");
#include <LiquidCrystal_I2C.h>
#define I2C_ADDR 0x27
#define LCD_COLUMNS 20
#define LCD_LINES 4
LiquidCrystal_I2C oLCD (I2C_ADDR, LCD_COLUMNS, LCD_LINES);
// ---------------------------------------------------------
#include <string.h>
#define PIN_UP 7
#define PIN_DOWN 4
#define PIN_RIGHT 6
#define PIN_LEFT 5
char sLCDText[30];
void setup()
{
pinMode(PIN_UP, INPUT_PULLUP);
pinMode(PIN_DOWN, INPUT_PULLUP);
pinMode(PIN_LEFT, INPUT_PULLUP);
pinMode(PIN_RIGHT, INPUT_PULLUP);
oLCD.init();
oLCD.backlight();
}
void LCDPrintChar (int iSpalte,int iZeile,char cZeichen)
{
char sShortString[2];
sShortString[0]=cZeichen;
sShortString[1]='\0';
if (iSpalte<0) return;
if (iSpalte>LCD_COLUMNS-1) return;
if (iZeile<0) return;
if (iZeile>LCD_LINES-1) return;
oLCD.setCursor (iSpalte,iZeile);
oLCD.print (sShortString);
}
void LCDPrint (int iSpalte,int iZeile)
{
int iIndex;
char cZeichen;
for (iIndex=0;iIndex<strlen(sLCDText);iIndex++)
{
cZeichen=sLCDText[iIndex];
LCDPrintChar(iSpalte+iIndex,iZeile,cZeichen);
}
}
void Laufschrift()
{
int iSpalte;
strcpy (sLCDText,"012345");
for (;;)
{
for (iSpalte=0;iSpalte<LCD_COLUMNS;iSpalte++)
{
oLCD.clear();
LCDPrint (iSpalte,0);
delay (500);
}
}
}
void Buttons()
{
int iZeile;
int iSpalte;
iZeile=2;
iSpalte=5;
strcpy (sLCDText,"Test");
for (;;)
{
if (digitalRead(PIN_UP)==LOW) iZeile--;
if (digitalRead(PIN_DOWN)==LOW) iZeile++;
if (digitalRead(PIN_LEFT)==LOW) iSpalte--;
if (digitalRead(PIN_RIGHT)==LOW) iSpalte++;
oLCD.clear();
LCDPrint (iSpalte,iZeile);
delay (200);
}
}
void loop ()
{
//Laufschrift ();
Buttons ();
strcpy (sLCDText,"1234567890");
LCDPrint (15,1);
delay (1000);
}