#include <DHT.h>
#include <LiquidCrystal_I2C.h>
//#include <Wire.h>
#include <IRremote.h>
#define DHTPIN 12 // 8Pin an dem das OUT Signal angeschlossen ist.
#define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321
#define BUTTON_PIN 8//9
#define BUTTON_PIN_2 9//10
#define BUTTON_PIN_3 10//11
#define BUTTON_PIN_1 11//12
#define Relay_Pin A0
#define Relay_Pin_2 A1
#define Relay_Pin_3 A2
#define Relay_Pin_4 A3
#define Relay_Pin_5 A4
#define Relay_Pin_6 A5
DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd_1(0x27,20,4);
#define RemConPIN 13 //Pin an dem das INPUT Signal angeschlossen ist.
IRrecv IR(RemConPIN);
decode_results results;
unsigned long timeStart;
unsigned long timeNow;
unsigned long timeStart_1;
unsigned long timeNow_1;
unsigned long timeStart_2;
unsigned long timeNow_2;
unsigned long timeStart_3;
unsigned long timeNow_3;
unsigned long timeStart_4;
unsigned long timeNow_4;
int Drehzahl_Am_Abluefter = 0;
float Ist_Temp = 0.00;
float Ist_Feuchte = 0.00;
float Soll_Temp = 25.00;
float Soll_Feuchte = 50.00;
int Max_Drehzahl = 100;
int Min_Drehzahl = 20;
int Hysterese = 6;
/*
//Input & Button Logic
const int numOfInputs = 4;
const int inputPins[numOfInputs] = {9,10,11,12};
int inputState[numOfInputs];
int lastInputState[numOfInputs] = {LOW,LOW,LOW,LOW};
bool inputFlags[numOfInputs] = {LOW,LOW,LOW,LOW};
long lastDebounceTime[numOfInputs] = {0,0,0,0};
long debounceDelay = 5;
//LCD Menu Logic
const int numOfScreens = 7;
int currentScreen = 0;
String screens[numOfScreens][2] = {{"Soll_Temp:","\337C"}, {"Soll_Feuchte:", "%"},
{"Max_Drehzahl:","%"}, {"Min_Drehzahl", "%"}, {"Hysterese:","\3377C"},
{"Lampen_An:","Uhr"}, {"Lampen_Aus","Uhr"}};
//,{"Ventilator_An:","Status"}, {"Ventilator_Aus:", "Status"}};
float parameters[numOfScreens]= {24.5,50.0,100.0,20.0,8.5,10.0,22.0};
*/
int interval = 1000;
float BT_Count = 24.50;
int Menu = 0;
int Licht = 0;
void setup() {
Serial.begin(9600);//115200
Serial.println("DHT22 example!");
dht.begin();
lcd_1.init(); // initialize the lcd
lcd_1.backlight(); // turn on LCD Backlight
lcd_1.setCursor(3,0); // set the cursor on Spalte 4 von Zeile 1
lcd_1.print("Moinsen, Peter!"); // Print a message to the LCD.
lcd_1.setCursor(1,1);
lcd_1.print("Ich bins Arduino!");
lcd_1.setCursor(1,2);
lcd_1.print("LCD mit 20X4 I2C");
lcd_1.setCursor(1,3);
lcd_1.print("Power By Witucki!");
delay(3000);
lcd_1.clear();
pinMode(BUTTON_PIN, INPUT_PULLUP);
pinMode(BUTTON_PIN_1, INPUT_PULLUP);
pinMode(BUTTON_PIN_2, INPUT_PULLUP);
pinMode(BUTTON_PIN_3, INPUT_PULLUP);
/*for(int i = 0; i < numOfInputs; i++) {
pinMode(inputPins[i], INPUT_PULLUP);
//digitalWrite(inputPins[i], HIGH); // pull-up 20k
}*/
pinMode(Relay_Pin, OUTPUT);
pinMode(Relay_Pin_2, OUTPUT);
pinMode(Relay_Pin_3, OUTPUT);
pinMode(Relay_Pin_4, OUTPUT);
pinMode(Relay_Pin_5, OUTPUT);
IR.enableIRIn();
timeStart = millis(); // Set timeStart to millis(); Zeit ab rechner start.
timeStart_1 = millis(); // Set timeStart to millis(); Zeit ab rechner start.
timeStart_2 = millis(); // Set timeStart to millis(); Zeit ab rechner start.
timeStart_3 = millis(); // Set timeStart to millis(); Zeit ab rechner start.
//timeStart_4 = millis(); // Set timeStart to millis(); Zeit ab rechner start.
}
int lastState = HIGH;
int lastState_1 = HIGH;
int lastState_2 = HIGH;
int lastState_3 = HIGH;
void loop() {
//setInputFlags();
//resolveInputFlags();
// Taster PIN 6
timeNow_1 = millis(); // _4
if ((timeNow_1-timeStart_1)>=100){
int value_1 = digitalRead((BUTTON_PIN_3));
if (lastState_1 != value_1) {
lastState_1 = value_1;
if (value_1 == HIGH) {
Serial.println(" nicht Gedrueckt");
}
if (value_1 == LOW) {
Serial.println(" Gedrueckt");
Menu++;
if (Menu >= 6){
Menu = 0;
}
Serial.println(Menu);
}
}
timeStart_1 = timeNow_1;
}
// Taster PIN 4
timeNow_2 = millis();
if ((timeNow_2-timeStart_2)>=100){
int value_2 = digitalRead((BUTTON_PIN));
if (lastState_2 != value_2) {
lastState_2 = value_2;
if (value_2 == HIGH) {
Serial.println(" nicht Gedrueckt");
}
if (value_2 == LOW) {
Serial.println(" Gedrueckt");
BT_Count=BT_Count+0.1;
Serial.println(BT_Count);
}
}
timeStart_2 = timeNow_2;
}
// Taster PIN 5
timeNow_2 = millis();
if ((timeNow_2-timeStart_2)>=100){
int value_2 = digitalRead((BUTTON_PIN_2));
if (lastState_2 != value_2) {
lastState_2 = value_2;
if (value_2 == HIGH) {
Serial.println(" nicht Gedrueckt");
}
if (value_2 == LOW) {
Serial.println(" Gedrueckt");
BT_Count=BT_Count-0.1;
Serial.println(BT_Count);
}
}
timeStart_2 = timeNow_2;
}
// Taster PIN 7
timeNow_3 = millis();
if ((timeNow_3-timeStart_3)>=100){
int value_3 = digitalRead((BUTTON_PIN_1));
if (lastState_3 != value_3) {
lastState_3 = value_3;
if (value_3 == HIGH) {
Serial.println(" nicht Gedrueckt");
}
if (value_3 == LOW) {
Serial.println(" Gedrueckt");
//Licht=Licht+1;
if (Licht == 0){
Licht = 1;
lcd_1.noBacklight();
} else if (Licht == 1){
Licht = 0;
lcd_1.backlight();
}
}
}
timeStart_3 = timeNow_3;
}
if (Menu == 0){
timeNow = millis();
if ((timeNow-timeStart)>=interval)
{
Ist_Feuchte = dht.readHumidity();
Ist_Temp = dht.readTemperature();
delay(50);
// Check if any reads failed and exit early (to try again).
if (isnan(Ist_Temp) || isnan(Ist_Feuchte)) {
Serial.println(F("Failed to read from DHT sensor!"));
return;
}
lcd_1.clear();
lcd_1.setCursor(0, 0);
lcd_1.print("Lueftersteuerung: ");
lcd_1.setCursor(0, 1);
lcd_1.print("Feuchtigkeit: ");
lcd_1.print(String(Ist_Feuchte)); //analogRead(0)
lcd_1.print("%");
lcd_1.setCursor(0, 2);
lcd_1.print("Temperatur: ");
lcd_1.print(String(Ist_Temp)); //analogRead(0)
lcd_1.print("\337C"); //lcd_1.print(\337); // \337 für °
Drehzahl_Am_Abluefter = ((Max_Drehzahl - Min_Drehzahl) / Hysterese) * (Ist_Temp - Soll_Temp) + Min_Drehzahl;
//Serial.println( String(Drehzahl_Am_Abluefter));
if (Drehzahl_Am_Abluefter > Max_Drehzahl) {
Drehzahl_Am_Abluefter = Max_Drehzahl;
}
else if (Drehzahl_Am_Abluefter < Min_Drehzahl) {
Drehzahl_Am_Abluefter = Min_Drehzahl;
}
lcd_1.setCursor(0,3);
lcd_1.print("Drehzahl: ");
lcd_1.print(Drehzahl_Am_Abluefter);
lcd_1.print("% LBF");
if (Soll_Feuchte - Ist_Feuchte >= 0) {
Serial.println("Luftbefeuchter: ");
Serial.println(String("AN"));
lcd_1.print("AN");
digitalWrite(Relay_Pin,HIGH);
}
else if (Soll_Feuchte - Ist_Feuchte < 0) {
Serial.println("Luftbefeuchter: ");
Serial.println(String("AUS"));
lcd_1.print("AUS");
digitalWrite(Relay_Pin,LOW);
}
Serial.print("Luftfeuchte: ");
Serial.print(Ist_Feuchte);
Serial.print("% Temperature: ");
Serial.print(Ist_Temp);
Serial.println("°C ");
timeStart = timeNow;
}
} else if (Menu == 1) {
lcd_1.setCursor(0,3);
lcd_1.print(Menu);
Ausgabe();
} else if (Menu == 2) {
lcd_1.clear();
} else if (Menu == 3) {
lcd_1.clear();
} else if (Menu == 4) {
lcd_1.clear();
} else if (Menu == 5) {
lcd_1.clear();
}
unsigned long val;
if(IR.decode()){
//Serial.println(IR.decodedIRData.decodedRawData,DEC);
val =IR.decodedIRData.decodedRawData,DEC;
IR_RC_INPUT(val);
IR.resume();
val=0;
}
}
void Ausgabe(){
Ist_Feuchte = dht.readHumidity();
Ist_Temp = dht.readTemperature();
delay(50);
// Check if any reads failed and exit early (to try again).
if (isnan(Ist_Temp) || isnan(Ist_Feuchte)) {
Serial.println(F("Failed to read from DHT sensor!"));
return;
}
timeNow = millis();
if ((timeNow-timeStart)>=interval)
{
lcd_1.clear();
lcd_1.setCursor(0,0); // set the cursor on Spalte 4 von Zeile 1
lcd_1.print("Feuchte: "); // Print a message to the LCD.
lcd_1.print(String(dht.readHumidity()));
lcd_1.print("%");
lcd_1.print("");
lcd_1.setCursor(0,1); // set the cursor on Spalte 4 von Zeile 1
lcd_1.print("Temperatur: "); // Print a message to the LCD.
lcd_1.print(String(dht.readTemperature()));
lcd_1.print("\337C");
lcd_1.print("");
Serial.print("Feuchte: ");
Serial.print(String(dht.readHumidity()));
Serial.print("% Temperatur: ");
Serial.print(String(dht.readTemperature()));
Serial.print("°C");
lcd_1.setCursor(0,2);
lcd_1.print(BT_Count);
lcd_1.print("\337C");
lcd_1.setCursor(0,3);
lcd_1.print(Menu);
timeStart = timeNow;
}
}
void IR_RC_INPUT(unsigned long val){
if((val) == 1570963200)
{
//Serial.println(IR.decodedIRData.decodedRawData,DEC);
Serial.println("ON/OFF");
lcd_1.noBacklight();
}
if((val) == 3710058240)
{
//Serial.println(IR.decodedIRData.decodedRawData,DEC);
Serial.println("TEST");
lcd_1.backlight();
}
if((val) == 4244832000)
{
//Serial.println(IR.decodedIRData.decodedRawData,DEC);
Serial.println("+");
}
if((val) == 1738080000)
{
//Serial.println(IR.decodedIRData.decodedRawData,DEC);
Serial.println("-");
}
if((val) == 501415680)
{
//Serial.println(IR.decodedIRData.decodedRawData,DEC);
Serial.println("Menu");
Menu++;
if (Menu >= 6){
Menu = 0;
}
Serial.println(Menu);
Ausgabe();
lcd_1.clear();
}
if((val) == 1036189440)
{
//Serial.println(IR.decodedIRData.decodedRawData,DEC);
Serial.println("Zurueck");
}
if((val) == 534839040)
{
//Serial.println(IR.decodedIRData.decodedRawData,DEC);
Serial.println("Rueck");
Menu=Menu-1;
Ausgabe();
}
if((val) == 1871773440)
{
//Serial.println(IR.decodedIRData.decodedRawData,DEC);
Serial.println("vor");
Menu=Menu+1;
Ausgabe();
}
if((val) == 1470693120)
{
//Serial.println(IR.decodedIRData.decodedRawData,DEC);
Serial.println("PLAY");
}
if((val) == 2540240640)
{
//Serial.println(IR.decodedIRData.decodedRawData,DEC);
Serial.println("0");
}
if((val) == 1336999680)
{
//Serial.println(IR.decodedIRData.decodedRawData,DEC);
Serial.println("C");
}
if((val) == 3476094720)
{
//Serial.println(IR.decodedIRData.decodedRawData,DEC);
Serial.println("1");
}
if((val) == 3877175040)
{
//Serial.println(IR.decodedIRData.decodedRawData,DEC);
Serial.println("2");
}
if((val) == 2239430400)
{
//Serial.println(IR.decodedIRData.decodedRawData,DEC);
Serial.println("3");
}
if((val) == 4010868480)
{
//Serial.println(IR.decodedIRData.decodedRawData,DEC);
Serial.println("4");
}
if((val) == 3342401280)
{
//Serial.println(IR.decodedIRData.decodedRawData,DEC);
Serial.println("5");
}
if((val) == 2774204160)
{
//Serial.println(IR.decodedIRData.decodedRawData,DEC);
Serial.println("6");
}
if((val) == 3175284480)
{
//Serial.println(IR.decodedIRData.decodedRawData,DEC);
Serial.println("7");
}
if((val) == 3041591040)
{
//Serial.println(IR.decodedIRData.decodedRawData,DEC);
Serial.println("8");
}
if((val) == 2907897600)
{
//Serial.println(IR.decodedIRData.decodedRawData,DEC);
Serial.println("9");
}
}
/*ON/OFF 1570963200
Menu 501415680
Test 3710058240
+ 4244832000
zurück 1036189440
rückspuhlen 534839040
vorwärts 1871773440
0 2540240640
- 1738080000
C 1336999680
1 3476094720
2 3877175040
3 2239430400
4 4010868480
5 3342401280
6 2774204160
7 3175284480
8 3041591040
9 2907897600
*/
/*
void setInputFlags() {
for(int i = 0; i < numOfInputs; i++) {
int reading = digitalRead(inputPins[i]);
if (reading != lastInputState[i]) {
lastDebounceTime[i] = millis();
}
if ((millis() - lastDebounceTime[i]) > debounceDelay) {
if (reading != inputState[i]) {
inputState[i] = reading;
if (inputState[i] == HIGH) {
inputFlags[i] = HIGH;
}
}
}
lastInputState[i] = reading;
}
}*/
/*
void resolveInputFlags() {
for(int i = 0; i < numOfInputs; i++) {
if(inputFlags[i] == HIGH) {
inputAction(i);
inputFlags[i] = LOW;
printScreen();
}
}
}
void inputAction(int input) {
if(input == 0) {
if (currentScreen == 0) {
currentScreen = numOfScreens-1;
}else{
currentScreen--;
}
}else if(input == 1) {
if (currentScreen == numOfScreens-1) {
currentScreen = 0;
}else{
currentScreen++;
}
}else if(input == 2) {
parameterChange(0);
}else if(input == 3) {
parameterChange(1);
}
}
void parameterChange(int key) {
if(key == 0) {
parameters[currentScreen]++;
}else if(key == 1) {
parameters[currentScreen]--;
}
}
void printScreen() {
lcd_1.clear();
lcd_1.print(screens[currentScreen][0]);
lcd_1.setCursor(0,1);
lcd_1.print(parameters[currentScreen]);
lcd_1.print(" ");
lcd_1.print(screens[currentScreen][1]);
Serial.println(screens[currentScreen][0]);
Serial.println(parameters[currentScreen]);
}
*/