You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
209 lines
4.0 KiB
209 lines
4.0 KiB
5 months ago
|
/*
|
||
|
LiquidCrystal Library - Hello World
|
||
|
|
||
|
Demonstrates the use a 16x2 LCD display. The LiquidCrystal
|
||
|
library works with all LCD displays that are compatible with the
|
||
|
Hitachi HD44780 driver. There are many of them out there, and you
|
||
|
can usually tell them by the 16-pin interface.
|
||
|
|
||
|
This sketch prints "Hello World!" to the LCD
|
||
|
and shows the time.
|
||
|
|
||
|
The circuit:
|
||
|
* LCD RS pin to digital pin 12
|
||
|
* LCD Enable pin to digital pin 11
|
||
|
* LCD D4 pin to digital pin 5
|
||
|
* LCD D5 pin to digital pin 4
|
||
|
* LCD D6 pin to digital pin 3
|
||
|
* LCD D7 pin to digital pin 2
|
||
|
* LCD R/W pin to ground
|
||
|
* LCD VSS pin to ground
|
||
|
* LCD VCC pin to 5V
|
||
|
* 10K resistor:
|
||
|
* ends to +5V and ground
|
||
|
* wiper to LCD VO pin (pin 3)
|
||
|
|
||
|
Library originally added 18 Apr 2008
|
||
|
by David A. Mellis
|
||
|
library modified 5 Jul 2009
|
||
|
by Limor Fried (http://www.ladyada.net)
|
||
|
example added 9 Jul 2009
|
||
|
by Tom Igoe
|
||
|
modified 22 Nov 2010
|
||
|
by Tom Igoe
|
||
|
modified 7 Nov 2016
|
||
|
by Arturo Guadalupi
|
||
|
|
||
|
This example code is in the public domain.
|
||
|
|
||
|
http://www.arduino.cc/en/Tutorial/LiquidCrystalHelloWorld
|
||
|
|
||
|
*/
|
||
|
|
||
|
// include the library code:
|
||
|
#include <LiquidCrystal.h>
|
||
|
#include <DHT22.h>
|
||
|
|
||
|
int pinDHT22a = A1;
|
||
|
DHT22 dht22a(pinDHT22a);
|
||
|
int status1 = 0;
|
||
|
|
||
|
int pinDHT22b = A0;
|
||
|
DHT22 dht22b(pinDHT22b);
|
||
|
int status2 = 0;
|
||
|
|
||
|
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
|
||
|
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
|
||
|
|
||
|
double sum_diff_temp = 0;
|
||
|
double sum_diff_humi = 0;
|
||
|
float temp1 = 0, temp2 = 0, humi1 = 0, humi2 = 0;
|
||
|
long count = 0;
|
||
|
|
||
|
byte degree[8] = {
|
||
|
0b00010,
|
||
|
0b00101,
|
||
|
0b00010,
|
||
|
0b00000,
|
||
|
0b00000,
|
||
|
0b00000,
|
||
|
0b00000,
|
||
|
0b00000
|
||
|
};
|
||
|
|
||
|
byte tau[8] = {
|
||
|
0b00000,
|
||
|
0b00000,
|
||
|
0b11110,
|
||
|
0b01000,
|
||
|
0b01000,
|
||
|
0b01001,
|
||
|
0b00110,
|
||
|
0b00000
|
||
|
};
|
||
|
|
||
|
|
||
|
void setup() {
|
||
|
// set up the LCD's number of columns and rows:
|
||
|
lcd.begin(16, 4);
|
||
|
lcd.createChar(0, degree);
|
||
|
lcd.createChar(1, tau);
|
||
|
// Print a message to the LCD.
|
||
|
pinMode(6,OUTPUT);
|
||
|
digitalWrite(6,LOW);
|
||
|
|
||
|
lcd.setCursor(0,0);
|
||
|
lcd.print("Initializing...");
|
||
|
}
|
||
|
|
||
|
void relayOff(){
|
||
|
|
||
|
}
|
||
|
|
||
|
void fehler(String tx){
|
||
|
lcd.setCursor(0,2);
|
||
|
lcd.print(tx);
|
||
|
lcd.print(" failed!");
|
||
|
relayOff();
|
||
|
}
|
||
|
|
||
|
float taupunkt(float t, float r) {
|
||
|
float a, b;
|
||
|
|
||
|
if (t >= 0) {
|
||
|
a = 7.5;
|
||
|
b = 237.3;
|
||
|
} else if (t < 0) {
|
||
|
a = 7.6;
|
||
|
b = 240.7;
|
||
|
}
|
||
|
|
||
|
// Sättigungsdampfdruck in hPa
|
||
|
float sdd = 6.1078 * pow(10, (a*t)/(b+t));
|
||
|
|
||
|
// Dampfdruck in hPa
|
||
|
float dd = sdd * (r/100);
|
||
|
|
||
|
// v-Parameter
|
||
|
float v = log10(dd/6.1078);
|
||
|
|
||
|
// Taupunkttemperatur (°C)
|
||
|
return (b*v) / (a-v);
|
||
|
}
|
||
|
|
||
|
void loop() {
|
||
|
delay(2500);
|
||
|
temp1 = dht22a.getTemperature();
|
||
|
humi1 = dht22a.getHumidity();
|
||
|
status1 = dht22a.getLastError();
|
||
|
temp2 = dht22b.getTemperature();
|
||
|
humi2 = dht22b.getHumidity();
|
||
|
status2 = dht22b.getLastError();
|
||
|
|
||
|
lcd.setCursor(0, 0);
|
||
|
if (status1 != dht22a.OK || isnan(temp1)||isnan(humi1)) {
|
||
|
lcd.print("Sensor 1");
|
||
|
lcd.setCursor(0,1);
|
||
|
lcd.print("Error: ");
|
||
|
lcd.print(status1);
|
||
|
temp1 = 0;
|
||
|
} else {
|
||
|
lcd.print(temp1);
|
||
|
lcd.write((int)0);
|
||
|
lcd.print("C ");
|
||
|
lcd.setCursor(0,1);
|
||
|
lcd.print(humi1);
|
||
|
lcd.print(" % ");
|
||
|
}
|
||
|
|
||
|
lcd.setCursor(9, 0);
|
||
|
if (status2 != dht22b.OK) {
|
||
|
lcd.setCursor(8, 0);
|
||
|
lcd.print("Sensor 2");
|
||
|
lcd.setCursor(8,1);
|
||
|
lcd.print(status2);
|
||
|
temp2 = 0;
|
||
|
} else {
|
||
|
lcd.setCursor(9, 0);
|
||
|
lcd.print(temp2);
|
||
|
lcd.write((int)0);
|
||
|
lcd.print("C");
|
||
|
lcd.setCursor(9,1);
|
||
|
lcd.print(humi2);
|
||
|
lcd.print(" %");
|
||
|
}
|
||
|
|
||
|
if (humi1<0 || humi1>100){
|
||
|
fehler("Humi 1");
|
||
|
return;
|
||
|
}
|
||
|
if (temp1<-40 || temp1>80){
|
||
|
fehler("Temp 1");
|
||
|
return;
|
||
|
}
|
||
|
if (humi2<0 || humi2>100){
|
||
|
fehler("Humi 2");
|
||
|
return;
|
||
|
}
|
||
|
if (temp2<-40 || temp2>80){
|
||
|
fehler("Temp 2");
|
||
|
return;
|
||
|
}
|
||
|
if (status1 == dht22a.OK && status2 == dht22b.OK){
|
||
|
float tau1 = taupunkt(temp1,humi1);
|
||
|
float tau2 = taupunkt(temp2,humi2);
|
||
|
lcd.setCursor(0,2);
|
||
|
lcd.write((int)1);
|
||
|
lcd.print("1: ");
|
||
|
lcd.print(tau1);
|
||
|
lcd.setCursor(0,3);
|
||
|
lcd.write((int)1);
|
||
|
lcd.print("2: ");
|
||
|
lcd.print(tau2);
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
}
|