#include <Keypad.h>
#include <string.h>
#define ROWS 4
#define COLS 4
char cKeys[ROWS][COLS] =
{
{ '1', '2', '3', 'A' },
{ '4', '5', '6', 'B' },
{ '7', '8', '9', 'C' },
{ '*', '0', '#', 'D' }
};
uint8_t iColPins[COLS] = { 5, 4, 3, 2 }; // Pins connected to C1, C2, C3, C4
uint8_t iRowPins[ROWS] = { 9, 8, 7, 6 }; // Pins connected to R1, R2, R3, R4
Keypad oKeypad = Keypad(makeKeymap(cKeys), iRowPins, iColPins, ROWS, COLS);
int iSollWert;
char cSollWert;
char sSollwert[100];
//----------------------------------------------------------------------------
int potilesen()
{
int iPotWert = analogRead(A0);
int iSollWertMax = 100;
int iPotWertMax = 1023;
int iSollWert = map(iPotWert, 0, iPotWertMax, 0, iSollWertMax);
return iSollWert;
}
void CEingabeMenu()
{
char cKey;
char sText[400];
Serial.println("cSollWert eingeben - Menü");
Serial.println("=> A, B, C oder D eingeben");
Serial.println("=> bitte eingeben");
do
{
cKey = oKeypad.getKey();
} while (cKey == NO_KEY);
switch (cKey)
{
case 'A':
case 'B':
case 'C':
case 'D':
cSollWert = cKey;
sprintf(sText, "Eingabe: %c", cSollWert);
break;
default:
Serial.println("Funktion nicht definiert");
break;
}
sprintf(sText, "Eingabe: %c", cSollWert);
Serial.println(sText);
}
void AllesAendernMenu()
{
char cKey;
Serial.println("Werte ändern - Menü");
Serial.println("1 ... iSollWert(Bitte die Taste 'C' drücken, um neuen Wert zu bestätigen)");
Serial.println("2 ... cSollWert");
Serial.println("3 ... sSollWert");
Serial.println("-!-bitte wählen-!-");
do
{
cKey = oKeypad.getKey();
} while (cKey == NO_KEY);
switch (cKey)
{
case '1':
while (true) {
iSollWert = potilesen();
Serial.println(iSollWert);
delay(100); //Delay um potizahl schneller anzeigen oder nicht bei ändern
if (oKeypad.getKey() == 'C') {
break;
}
}
break;
case '2':
CEingabeMenu();
break;
case '3':
SSollwertEingabeMenu();
break;
default:
Serial.println("Funktion nicht definiert");
break;
}
}
void SSollwertEingabeMenu()
{
char cKey;
char sText[100];
Serial.println("sSollwert eingeben - Menü");
Serial.println("=> Neue Zeichenkette eingeben");
Serial.println("=> '#' zum Bestätigen");
Serial.println("=> 'D' zum Abbrechen");
memset(sSollwert, 0, strlen(sSollwert));
uint8_t currentLength = 0;
do
{
cKey = oKeypad.getKey();
if (cKey != NO_KEY)
{
if (cKey == 'D')
break;
else if (cKey == '#')
break;
else if (currentLength < sizeof(sSollwert) - 1)
{
sSollwert[currentLength] = cKey;
currentLength++;
}
sprintf(sText, "Eingabe: %s", sSollwert);
Serial.println(sText);
}
} while (true);
}
void AllesAnzeigenMenu()
{
char cKey;
Serial.print("iSollWert=>");
Serial.println(iSollWert);
Serial.println("\n");
Serial.print("CSollwert=>");
Serial.write(cSollWert);
Serial.println("\n");
Serial.print("sSollwert=>");
Serial.println(sSollwert);
Serial.println("\n");
Serial.println("-D eingeben zum Zurückgehen-");
do
{
cKey = oKeypad.getKey();
} while (cKey == NO_KEY);
switch (cKey)
{
case 'D':
TopMenu();
break;
default:
Serial.println("Funktion nicht definiert");
break;
}
}
void TopMenu()
{
char cKey;
Serial.println("Top - Menü");
Serial.println("1 ... Alles anzeigen");
Serial.println("2 ... Ändern");
Serial.println("3 ... Speichern");
Serial.println("-!-bitte wählen-!-");
do
{
cKey = oKeypad.getKey();
} while (cKey == NO_KEY);
switch (cKey)
{
case '1':
AllesAnzeigenMenu();
break;
case '2':
AllesAendernMenu();
break;
default:
Serial.println("Funktion nicht definiert");
break;
}
}
void setup()
{
// put your setup code here, to run once:
Serial.begin(9600);
iSollWert = 10;
cSollWert = '?';
}
void loop()
{
// put your main code here, to run repeatedly:
TopMenu();
}