#include <Arduino.h>
#include "menu.h"
#include <IRremote.h>
#include <LiquidCrystal.h>
#define LCD_ZEILEN 2
#define LCD_SPALTEN 16
int pin_receiver = 13;
LiquidCrystal lcd(12, 11, 10, 9, 8, 7);
#define USE_DEFAULT_FEEDBACK_LED_PIN true
#define ENABLE_LED_FEEDBACK false
multiplexedDigitDisplay disp;
//struct ShiftRegisterPinDefintions SRPin = { 2, 4, 7 };
int DigitLowDriverPin[4] = { 6, 5, 9, 10 };
multiplexedDigitDisplay::EMenuLayer layer;
/* Defintion des Menu-Objektes mit der Callbackfunktion als Argument */
void updateDisplay(String[]);
Menu menu(updateDisplay);
void updateDisplay(String zeilen[2]) {
static String currentlyDisplayed[2];
bool needupdate = false;
if (currentlyDisplayed[0] != zeilen[0])
needupdate = true;
if (currentlyDisplayed[1] != zeilen[1])
needupdate = true;
if (needupdate) {
currentlyDisplayed[0] = zeilen[0];
currentlyDisplayed[1] = zeilen[1];
lcd.setCursor(0, 0);
lcd.print(zeilen[0]);
lcd.print(F(" "));
lcd.setCursor(0, 1);
lcd.print(zeilen[1]);
lcd.print(F(" "));
needupdate = false;
}
}
//static long long remoteTimer;
Menu::EControl readCommandFromIR() {
if (IrReceiver.decode()) {
// if (millis() - remoteTimer > 25) {
IrReceiver.resume(); // Enable receiving of the next value
// remoteTimer = millis();}
if (IrReceiver.decodedIRData.protocol == UNKNOWN) {
return Menu::NOP;
}
uint16_t IRBefehl = IrReceiver.decodedIRData.command;
uint8_t flags = IrReceiver.decodedIRData.flags;
bool isRepeat = (flags & IRDATA_FLAGS_IS_REPEAT);
if (IRBefehl == 2) { // Pfeil oben
return Menu::UP;
} else if (IRBefehl == 152) { // Pfeil unten
return Menu::DOWN;
} else if (IRBefehl == 168) { // Play/Pause
return Menu::SELECT;
} else if (IRBefehl == 194) { //on/off
return Menu::BACK;
}
else if (IRBefehl == 104) { // 0
return Menu::NUL;
} else if (IRBefehl == 48) { // 1
return Menu::EINS;
} else if (IRBefehl == 24) { // 2
return Menu::ZWEI;
} else if (IRBefehl == 122) { // 3
return Menu::DREI;
} else if (IRBefehl == 16) { // 4
return Menu::VIER;
} else if (IRBefehl == 56) { // 5
return Menu::FUENF;
} else if (IRBefehl == 90) { // 6
return Menu::SECHS;
} else if (IRBefehl == 66) { // 7
return Menu::SIEBEN;
} else if (IRBefehl == 74) { // 8
return Menu::ACHT;
} else if (IRBefehl == 82) { // 9
return Menu::NEUN;
}
} else {
return Menu::NOP;
}
return Menu::NOP;
}
void layout() {
Serial.print("Celsius: ");
Serial.println(" C");
Serial.print("Humdity: ");
Serial.println(" %");
}
uint64_t timestamp;
void setup() {
Serial.begin(115200); //Setup der Serial.print-Ausgabe
lcd.begin(LCD_SPALTEN, LCD_ZEILEN); //setup LCD Display
IrReceiver.begin(pin_receiver, ENABLE_LED_FEEDBACK, USE_DEFAULT_FEEDBACK_LED_PIN); //setup Remote Controll
menu.setup();
menu.loop(Menu::NOP, &disp, &layer);
}
void loop() {
menu.loop(readCommandFromIR(), &disp, &layer);
//DHTSensor.loop(&disp, &DHT);
//DHTSensor.mittelwertszeit(10, &DHT);
//disp.loop(&layer);
}