#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
int upTaster = 53;
int downTaster = 51;
int selectTaster = 49;
int rechtsTaster = 47;
int linksTaster = 45;
int backTaster = 43;
int menu = 1;
int ah = 1;
int al = 1;
int bh = 1;
int bl = 1;
int pattern = 0b10101010;
int save = 1;
const int dataPin = 2; /* DS */
const int clockPin = 3; /* SHCP */
const int latchPin = 4; /* STCP */
void setup()
{
lcd.begin(16, 2);
lcd.backlight();
lcd.print("Group UMPH");
lcd.setCursor(0,1);
lcd.print("--Willkommen--");
delay(1000);
pinMode(upTaster, INPUT_PULLUP);
pinMode(downTaster, INPUT_PULLUP);
pinMode(selectTaster, INPUT_PULLUP);
pinMode(rechtsTaster, INPUT_PULLUP);
pinMode(linksTaster, INPUT_PULLUP);
pinMode(backTaster, INPUT_PULLUP);
updateMenu();
pinMode(dataPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(latchPin, OUTPUT);
}
void loop()
{
if (!digitalRead(downTaster))
{
menu++;
updateMenu();
delay(100);
while (!digitalRead(downTaster)); //scrollen wird dadurch verhindert
}
if (!digitalRead(upTaster))
{
menu--;
updateMenu();
delay(100);
while (!digitalRead(upTaster)); //scrollen wird dadurch verhindert
}
if (!digitalRead(selectTaster))
{
executeAction();
updateMenu();
}
}
void updateMenu()
{
switch (menu)
{
case 0:
menu = 1;
break;
case 1:
lcd.clear();
lcd.print(">Config A High");
lcd.setCursor(0,1);
lcd.print(" Config A LOW");
break;
case 2:
lcd.clear();
lcd.print(" Config A High");
lcd.setCursor(0,1);
lcd.print(">Config A LOW");
break;
case 3:
lcd.clear();
lcd.print(">Config B High");
lcd.setCursor(0,1);
lcd.print(" Config B LOW");
break;
case 4:
lcd.clear();
lcd.print(" Config B High");
lcd.setCursor(0,1);
lcd.print(">Config B LOW");
break;
case 5:
lcd.clear();
lcd.print(" Configuration ");
lcd.setCursor(0,1);
lcd.print("AH");
lcd.print(ah);
lcd.print("|AL");
lcd.print(al);
lcd.print("|BH");
lcd.print(bh);
lcd.print("|BL");
lcd.print(bl);
break;
case 6:
menu = 5;
break;
}
}
void executeAction(){
switch (menu){
case 1:
action1();
break;
case 2:
action2();
break;
case 3:
action3();
break;
case 4:
action4();
break;
case 5:
action5();
break;
}
}
void action1(){
lcd.clear();
lcd.print(" Set A High to:");
lcd.setCursor(0,1);
lcd.print(ah);
delay(1500);
while (digitalRead(backTaster)){
if (!digitalRead(rechtsTaster)){
lcd.clear();
lcd.print(" Set A High to:");
lcd.setCursor(0,1);
ah++;
if (ah>10){
ah=10;
}
lcd.print(">");
lcd.print(ah);
delay(200);
}
if (!digitalRead(linksTaster)){
lcd.clear();
lcd.print(" Set A High to:");
lcd.setCursor(0,1);
ah--;
if (ah<0){
ah=0;
}
lcd.print(">");
lcd.print(ah);
delay(200);
}
if (!digitalRead(selectTaster)){
updatePortah();
delay(2000);
break;
}
}
}
void action2(){
lcd.clear();
lcd.print(" Set A Low to:");
lcd.setCursor(0,1);
lcd.print(al);
delay(1500);
while (digitalRead(backTaster)){
if (!digitalRead(rechtsTaster)){
lcd.clear();
lcd.print(" Set A Low to:");
lcd.setCursor(0,1);
al++;
if (al>10){
al=10;
}
if (al==ah || al==bh || al==bl){
al++;
}
lcd.print(">");
lcd.print(al);
delay(200);
}
if (!digitalRead(linksTaster)){
lcd.clear();
lcd.print(" Set A Low to:");
lcd.setCursor(0,1);
al--;
if (al<0){
al=0;
}
if (al==ah || al==bh || al==bl){
al--;
}
lcd.print(">");
lcd.print(al);
delay(200);
}
if (!digitalRead(selectTaster)){
updatePortal();
delay(2000);
break;
}
}
}
void action3(){
lcd.clear();
lcd.print(" Set B High to:");
lcd.setCursor(0,1);
lcd.print(bh);
delay(1500);
while (digitalRead(backTaster)){
if (!digitalRead(rechtsTaster)){
lcd.clear();
lcd.print(" Set B High to:");
lcd.setCursor(0,1);
bh++;
if (bh>10){
bh=10;
}
if (bh==ah || bh==al || bh==bl){
bh++;
}
lcd.print(">");
lcd.print(bh);
delay(200);
}
if (!digitalRead(linksTaster)){
lcd.clear();
lcd.print(" Set B High to:");
lcd.setCursor(0,1);
bh--;
if (bh<0){
bh=0;
}
if (bh==ah || bh==al || bh==bl){
bh--;
}
lcd.print(">");
lcd.print(bh);
delay(200);
}
if (!digitalRead(selectTaster)){
updatePortbh();
delay(2000);
break;
}
}
}
void action4(){
lcd.clear();
lcd.print(" Set B Low to:");
lcd.setCursor(0,1);
lcd.print(bl);
delay(1500);
while (digitalRead(backTaster)){
if (!digitalRead(rechtsTaster)){
lcd.clear();
lcd.print(" Set B Low to:");
lcd.setCursor(0,1);
bl++;
if (bl>10){
bl=10;
}
if (bl==ah || bl==bh || bl==al){
bl++;
}
lcd.print(">");
lcd.print(bl);
delay(200);
}
if (!digitalRead(linksTaster)){
lcd.clear();
lcd.print(" Set B Low to:");
lcd.setCursor(0,1);
bl--;
if (bl<0){
bl=0;
}
if (bl==ah || bl==bh || bl==al){
bl--;
}
lcd.print(">");
lcd.print(bl);
delay(200);
}
if (!digitalRead(selectTaster)){
updatePortbl();
delay(2000);
break;
}
}
}
void action5(){
lcd.clear();
lcd.print("Set Config to");
lcd.setCursor(0,1);
lcd.print("Relais? YES NO");
save = 0;
delay(1000);
while (digitalRead(backTaster)){
if (!digitalRead(rechtsTaster)){
lcd.clear();
lcd.print("Set Config to");
lcd.setCursor(0,1);
lcd.print("Relais? YES >NO");
save = 0;
}
if (!digitalRead(linksTaster)){
lcd.clear();
lcd.print("Set Config to");
lcd.setCursor(0,1);
lcd.print("Relais? >YES NO");
save = 1;
}
if (!digitalRead(selectTaster)){
if (save==1){
setRelais();
break;
}
if (save==0){
backtomenu();
break;
}
}
}
}
void backtomenu(){
delay(1000);
}
void setRelais(){
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, LSBFIRST, pattern);
digitalWrite(latchPin, HIGH);
delay(500);
pattern = ~pattern; // Invert the pattern
}
void updatePortah(){
lcd.clear();
lcd.print(" Port A High");
lcd.setCursor(0,1);
lcd.print(" Set to: ");
lcd.print(ah);
}
void updatePortal(){
lcd.clear();
lcd.print(" Port A Low");
lcd.setCursor(0,1);
lcd.print(" Set to: ");
lcd.print(al);
}
void updatePortbh(){
lcd.clear();
lcd.print(" Port B High");
lcd.setCursor(0,1);
lcd.print(" Set to: ");
lcd.print(al);
}
void updatePortbl(){
lcd.clear();
lcd.print(" Port B Low");
lcd.setCursor(0,1);
lcd.print(" Set to: ");
lcd.print(bl);
}