#include <Wire.h> // 引入Wire库用于I2C通信
#include <LiquidCrystal_I2C.h> // 引入LiquidCrystal_I2C库用于LCD显示屏
// 初始化LCD库
LiquidCrystal_I2C lcd(0x27, 16, 2); // 设置I2C地址为0x27,LCD显示屏有16个字符,2行
// 定义引脚
const int buttonPin = 2;
const int ledPin = 3; // LED连接到D3引脚
const int buzzerPin = 4; // 蜂鸣器连接到D4引脚
bool displayVoltage = true; // 初始状态为显示电压
const float voltageThreshold = 2.50; // 电压阈值设为2.5V
void setup() {
// 初始化串口通讯
Serial.begin(9600);
// 初始化LCD
lcd.init();
lcd.backlight(); // 打开背光
// 初始化按钮引脚
pinMode(buttonPin, INPUT_PULLUP);
pinMode(ledPin, OUTPUT); // 设置LED引脚为输出模式
pinMode(buzzerPin, OUTPUT); // 设置蜂鸣器引脚为输出模式
}
void loop() {
// 读取按钮状态
bool currentButtonState = digitalRead(buttonPin) == HIGH;
if (currentButtonState != displayVoltage) {
displayVoltage = !displayVoltage; // 切换显示状态
delay(200); // 防抖
}
if (displayVoltage) {
// 读取模拟电压值并显示在LCD上
int sensorValue = analogRead(A0);
float voltage = sensorValue * (5.0 / 1023.0); // 计算电压值
lcd.clear(); // 清除LCD显示内容
lcd.setCursor(0, 0);
lcd.print("Voltage:");
lcd.setCursor(0, 1);
lcd.print(voltage);
lcd.print(" V");
// 检查电压是否超过阈值
if (voltage > voltageThreshold) {
digitalWrite(ledPin, HIGH); // 点亮LED
tone(buzzerPin,1000);//
delay(1000);
} else {
digitalWrite(ledPin, LOW); // 关闭LED
noTone(buzzerPin);
}
} else {
// 隐藏LCD显示内容
lcd.clear();
digitalWrite(ledPin, LOW); // 确保LED关闭
digitalWrite(buzzerPin, LOW); // 确保蜂鸣器关闭
}
delay(100); // 延时以减少LCD刷新频率
}