// ---------------------------------------------------------
// I2C - LCD Anzeige
// Pinning: ESP32 D22 <=> SCL I2C_LCD
// D21 <=> SDA
// 3V3 <=> Vcc
// GND <=> GND
// Befehle:
// oLCD.init ()
// oLCD.backlight ();
// oLCD.clear ();
// oLCD.setCursor (iSpalte,iZeile);
// oLCD.printf ("Hallo");
#include <LiquidCrystal_I2C.h>
#include <string.h>
#include <stdio.h>
#define I2C_ADDR 0x27
#define LCD_COLUMNS 20
#define LCD_LINES 4
//----------------------------------------------------------
#define mup 4
#define mdown 2
#define mright 3
#define mleft 5
LiquidCrystal_I2C oLCD (I2C_ADDR, LCD_COLUMNS, LCD_LINES);
// ---------------------------------------------------------
char sLCDText[30];
int iZeile = 3;
int iSpalte = 0;
void LCDPrintCharSZ(int iSpalte,int iZeile,char cZeichen)
{
char sBuchstabe[2];
if (iZeile < 0) return;
if (iSpalte < 0) return;
if (iZeile >= LCD_LINES) return;
if (iSpalte >= LCD_COLUMNS) return;
sprintf (sBuchstabe,"%c",cZeichen);
oLCD.setCursor(iSpalte, iZeile);
oLCD.print(sBuchstabe);
}
void LCDPrintSZ(int iSpalte, int iZeile)
{
int iIndex;
for (iIndex=0;iIndex < strlen (sLCDText);iIndex++)
{
LCDPrintCharSZ(iSpalte+iIndex,iZeile,sLCDText[iIndex]);
}
}
void LCDCurset(int iSpalte, int iZeile)
{
if (digitalRead(mdown) == LOW)
iSpalte = iSpalte - 1;
if (digitalRead(mup) == LOW)
iSpalte = iSpalte + 1;
if (digitalRead(mleft) == LOW)
iZeile = iZeile - 1;
if (digitalRead(mright) == LOW)
iZeile = iZeile + 1;
}
void setup()
{
oLCD.init();
oLCD.backlight();
pinMode(mup, INPUT_PULLUP);
pinMode(mdown, INPUT_PULLUP);
pinMode(mleft, INPUT_PULLUP);
pinMode(mright, INPUT_PULLUP);
}
void loop()
{
strcpy(sLCDText, "1234567890");
if (digitalRead(mdown) == LOW)
iSpalte = iSpalte - 1;
LCDPrintSZ(iZeile,iSpalte);
if (digitalRead(mup) == LOW)
iSpalte = iSpalte + 1;
LCDPrintSZ(iZeile,iSpalte);
if (digitalRead(mleft) == LOW)
iZeile = iZeile - 1;
LCDPrintSZ(iZeile,iSpalte);
if (digitalRead(mright) == LOW)
iZeile = iZeile + 1;
LCDPrintSZ(iZeile,iSpalte);
LCDPrintSZ(iZeile,iSpalte);
delay(100);
}