#include <DHT.h>
#include <LiquidCrystal_I2C.h>
#define DHTPIN 2
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd(0x27, 16, 2); //
int trigPin = 11;
int echoPin = 12;
int buzzerPin = 8;
int coldWaterPin = 13;
int warmWaterPin = 9;
void setup() {
lcd.init(); // Initialize the LCD
lcd.backlight(); // light up
lcd.setCursor(0, 1);
lcd.print("Body Health");
lcd.print("Monitoring System");
delay(2000);
pinMode(trigPin, OUTPUT); //测距
pinMode(echoPin, INPUT);
pinMode(buzzerPin, OUTPUT); //蜂鸣器输出模式
pinMode(coldWaterPin, OUTPUT);
pinMode(warmWaterPin, OUTPUT);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Body Temp:");
lcd.setCursor(0, 1);
lcd.print("Sweating:"); //出汗情况
}
void loop() {
float h = dht.readHumidity(); //读取湿度值
float t = dht.readTemperature(); //温度-摄氏度
float f = dht.readTemperature(true); //华氏度
if (isnan(h) || isnan(t) || isnan(f)) {
lcd.setCursor(0, 1);
lcd.print("Sensor error");
return;
} //如果传感器读数异常,报错
lcd.setCursor(10, 0); //LCD光标位置
lcd.print(t, 1); //体温保留1小数
lcd.write(0xDF); //摄氏度符号
lcd.print("C");
long duration, distance; //超声波测距的2变量
digitalWrite(trigPin, LOW); //初始值
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = duration / 58.2;
lcd.setCursor(10, 1);
lcd.print(distance);
lcd.print("cm");
if (distance > 10) {
lcd.setCursor(0, 1);
lcd.print("No sweating ");
digitalWrite(buzzerPin, LOW);
} else {
lcd.setCursor(0, 1);
lcd.print("Sweating ");
digitalWrite(buzzerPin, HIGH);
delay(500);
digitalWrite(buzzerPin, LOW);
}
if (t < 35) {
lcd.setCursor(0, 0);
lcd.print("Temp is low");
} else if (t > 38) {
lcd.setCursor(0, 0);
lcd.print("Temp is high");
} else {
if (distance < 10) {
digitalWrite(coldWaterPin, HIGH); // 冷水开
delay(10000);
digitalWrite(coldWaterPin, LOW); // 冷水关
} else if (distance < 20) {
digitalWrite(warmWaterPin, HIGH); // 热水开
delay(10000);
digitalWrite(warmWaterPin, LOW); // 热水关
}
}
}