121 lines
2.6 KiB
C++
121 lines
2.6 KiB
C++
#include <dht.h>
|
|
#include <U8g2lib.h>
|
|
#include <Wire.h>
|
|
#include <Arduino.h>
|
|
#define SLAVE_ADDRESS 0x0b
|
|
|
|
dht DHT;
|
|
|
|
#define DHT11_PIN 9
|
|
|
|
const int red = 7;
|
|
const int green = 6;
|
|
const int yellow = 5;
|
|
|
|
// U8G2_SSD1306_128X32_UNIVISION_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE, /* clock=*/ A5, /* data=*/ A4);
|
|
|
|
void setup(){
|
|
|
|
pinMode(red, OUTPUT);
|
|
pinMode(green, OUTPUT);
|
|
pinMode(yellow, OUTPUT);
|
|
Serial.begin(9600);
|
|
// u8g2.begin();
|
|
Wire.begin(SLAVE_ADDRESS);
|
|
Wire.onRequest(sendtemperature);
|
|
}
|
|
|
|
float temperature(uint16_t pin){
|
|
float temp = 0;
|
|
int chk = DHT.read11(pin);
|
|
temp = DHT.temperature;
|
|
return temp;
|
|
}
|
|
|
|
float humidity(uint16_t pin){
|
|
float hum = 0;
|
|
int chk = DHT.read11(pin);
|
|
hum = DHT.humidity;
|
|
return hum;
|
|
}
|
|
void set_state(uint8_t state){
|
|
digitalWrite(green,0);
|
|
digitalWrite(red,0);
|
|
digitalWrite(yellow,0);
|
|
switch (state){
|
|
case 0: digitalWrite(green,1); break;
|
|
case 1: digitalWrite(red,1); break;
|
|
case 2: digitalWrite(yellow,1); break;
|
|
default:;
|
|
}
|
|
|
|
}
|
|
|
|
void print4plotter(float temp,float hum){
|
|
Serial.print("Temperatur:");
|
|
Serial.print(temp);
|
|
Serial.print(", Humidity:");
|
|
Serial.println(hum);
|
|
}
|
|
|
|
/*
|
|
void print_screen_temp(float temp){
|
|
u8g2.clearBuffer();
|
|
u8g2.setFont(u8g2_font_unifont_t_symbols);
|
|
u8g2.setFontRefHeightExtendedText();
|
|
u8g2.setDrawColor(1);
|
|
u8g2.setFontPosTop();
|
|
u8g2.setFontDirection(0);
|
|
u8g2.drawStr( 0, 0, "Temperatur:");
|
|
char buff[6];
|
|
dtostrf(temp, 4, 2, buff);
|
|
u8g2.drawStr( 0, 18, buff);
|
|
u8g2.drawUTF8(40, 18, "°C");
|
|
u8g2.sendBuffer();
|
|
}
|
|
|
|
void print_screen_hum(float hum){
|
|
u8g2.clearBuffer();
|
|
u8g2.setFont(u8g2_font_unifont_t_symbols);
|
|
u8g2.setFontRefHeightExtendedText();
|
|
u8g2.setDrawColor(1);
|
|
u8g2.setFontPosTop();
|
|
u8g2.setFontDirection(0);
|
|
u8g2.drawStr( 0, 0, "Humidity:");
|
|
char buff[6];
|
|
dtostrf(hum, 4, 2, buff);
|
|
u8g2.drawStr( 0, 18, buff);
|
|
u8g2.drawUTF8(40, 18, "%");
|
|
u8g2.sendBuffer();
|
|
}
|
|
*/
|
|
|
|
uint8_t converttemp(float temp){
|
|
temp += 75;
|
|
return round(temp);
|
|
}
|
|
float gtemp = 0;
|
|
|
|
void sendtemperature(){
|
|
uint8_t dat = converttemp(gtemp);
|
|
Wire.write(dat);
|
|
}
|
|
uint32_t d_state = 0;
|
|
uint32_t display_time=10000;
|
|
uint32_t messure_time=100;
|
|
void loop() {
|
|
for (int i=0; i< display_time/messure_time; i++){
|
|
float temp=temperature(DHT11_PIN);
|
|
float hum= humidity(DHT11_PIN);
|
|
print4plotter(temp,hum);
|
|
gtemp = temp;
|
|
if (temp<=0) set_state(0); // green
|
|
else if (temp <=40) set_state(2); // yellow
|
|
else set_state(1); // red
|
|
//if (d_state % 2) print_screen_temp(temp);
|
|
//else print_screen_hum(hum);
|
|
delay(messure_time);
|
|
}
|
|
d_state ++;
|
|
}
|