bh3a-Icetruck-Challenge-1-3/Arduino/Challenge1_sensors/Challenge1_sensors.ino
2024-06-27 11:51:06 +02:00

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 ++;
}