#include <DHT22.h>
#include <Arduino.h>
#include <U8x8lib.h>
#include <HC_SR04.h>
#include "RTCDS1307.h"
U8X8_SSD1306_128X64_ALT0_HW_I2C oled(/* reset=*/ U8X8_PIN_NONE);
//define pin data
RTCDS1307 rtc(0x68);
uint8_t year, month, weekday, day, a, b, c;
bool period = 0;
#define pinDATA 7 // SDA, or almost any other I/O pin
DHT22 dht22(pinDATA);
int ledPin=8;
HC_SR04<10> sensor(9);
void setup() {
Serial.begin(9600); sensor.begin();
Serial.begin(115200); //1bit=10µs
Serial.println("\ntest capteur DTH22");
oled.begin();
oled.setFlipMode(0);
oled.setFont(u8x8_font_chroma48medium8_r);
pinMode(ledPin, OUTPUT);
pinMode(12, OUTPUT);
Serial.begin(115200);
rtc.begin();
rtc.setTime(12, 59, 50);
}
void loop() {
float d;
rtc.getTime(a, b, c, period);
if (a>8&&a<18){
d=0;
}
else{
sensor.startMeasure();
d=sensor.getDist_cm();}
oled.clear();
float t = dht22.getTemperature();
float h = dht22.getHumidity();
oled.print("TEMP:");oled.print(t);oled.print("C");
oled.print("\nRH:");oled.print(h);oled.print("%");
if (t > 30) {
oled.print("\ntoo hot");
tone(12,260,1000);
digitalWrite(ledPin, HIGH);
} if (t < 30) {
// 如果温度不超过45度,关闭蜂鸣器和停止LED闪烁
digitalWrite(12, LOW);
digitalWrite(ledPin, LOW); // 确保LED关闭
}
if (h > 75) {
oled.print("\ntoo wet");
tone(12,260,1000);
digitalWrite(ledPin, HIGH);
} if (h < 75) {
// 如果温度不超过45度,关闭蜂鸣器和停止LED闪烁
digitalWrite(12, LOW);
digitalWrite(ledPin, LOW); // 确保LED关闭
}
if (d > 30) {
oled.print("\ndoor is opened");
tone(12,260,1000);
digitalWrite(ledPin, HIGH);
} if (d < 30) {
// 如果温度不超过45度,关闭蜂鸣器和停止LED闪烁
digitalWrite(12, LOW);
digitalWrite(ledPin, LOW); // 确保LED关闭
}
delay(2000); //Collecting period should be : >1.7 second
}