#include <LiquidCrystal_I2C.h>
#define I2C_ADDR 0x27
#define LCD_COLUMNS 20
#define LCD_LINES 4
#define LED_Pin 2
#define PIR_Pin 14
#define NTC_Pin 12
const float BETA = 3950;
LiquidCrystal_I2C lcd(I2C_ADDR, LCD_COLUMNS, LCD_LINES);
void lcdprintnum(float temperature, int cursor){
lcd.setCursor(8, cursor); // 设置光标位置
lcd.print(temperature); // 显示温度
}
// 在LCD的指定位置显示文本信息
void lcdprinttext(String s, int cursor){
lcd.setCursor(7, cursor); // 设置光标位置
lcd.print(s); // 显示文本
}
void setup() {
Serial.begin(115200); // 启动串口通信
pinMode(LED_Pin, OUTPUT); // 设置LED引脚为输出模式
pinMode(PIR_Pin, INPUT); // 设置PIR传感器引脚为输入模式
pinMode(NTC_Pin, INPUT); // 设置NTC温度传感器引脚为输入模式
lcd.init(); // 初始化LCD显示屏
lcd.backlight(); // 打开LCD背光
}
void loop() {
// 读取温度传感器的模拟值并计算温度
int analogValue = analogRead(NTC_Pin);
float celsius = 1 / (log(1 / (4095. / analogValue - 1)) / BETA + 1.0 / 298.15) - 273.15;
// 读取PIR传感器的状态
int pirState = digitalRead(PIR_Pin);
// 如果检测到运动
if(pirState == HIGH){
lcdprintnum(celsius, 0); // 在第0行显示温度
if(celsius < 10){ // 如果温度低于10度
digitalWrite(LED_Pin, HIGH); // 打开LED
lcdprinttext("LED On", 1); // 在第1行显示LEDOn
}
} else {
// 如果没有检测到运动
lcd.clear(); // 清空LCD显示
digitalWrite(LED_Pin, LOW); // 关闭LED
}
}