#include <LiquidCrystal.h>
// 引脚定义
const int red=2, yellow=3, green=4;
const int key1=5, key2=6;
LiquidCrystal lcd(8,9,10,11,12,13);
// 状态变量
bool ledPower = true;
bool mode = true;
bool lastK1=HIGH, lastK2=HIGH;
int count=0;
void setup() {
// 初始化IO
pinMode(red,OUTPUT); pinMode(yellow,OUTPUT); pinMode(green,OUTPUT);
pinMode(key1,INPUT_PULLUP); pinMode(key2,INPUT_PULLUP);
// LCD初始化
lcd.begin(16,2);
// 开机欢迎 + LED自检
lcd.clear();
lcd.print(" WELCOME!");
all(HIGH); delay(800);
all(LOW); delay(200);
}
void loop() {
// 按键1:总开关
int k1 = digitalRead(key1);
if(k1==LOW && lastK1==HIGH){
delay(20);
ledPower = !ledPower;
if(!ledPower) all(LOW);
}
lastK1 = k1;
// 按键2:模式切换
int k2 = digitalRead(key2);
if(k2==LOW && lastK2==HIGH){
delay(20);
mode = !mode;
all(LOW);
}
lastK2 = k2;
// LCD实时显示状态
showStatus();
// LED关闭则退出
if(!ledPower) return;
// LED模式
if(mode) runningLED();
else flashLED();
}
// 显示状态
void showStatus(){
lcd.setCursor(0,0);
lcd.print("Mode:");
lcd.print(mode?"Flow ":"Flash");
lcd.setCursor(9,0);
lcd.print("LED:");
lcd.print(ledPower?"ON ":"OFF");
lcd.setCursor(0,1);
lcd.print("Count:");
lcd.print(count);
count++;
if(count>999)count=0;
delay(100);
}
// 流水灯
void runningLED(){
digitalWrite(red,HIGH); digitalWrite(yellow,LOW); digitalWrite(green,LOW); delay(400);
digitalWrite(red,LOW); digitalWrite(yellow,HIGH); digitalWrite(green,LOW); delay(400);
digitalWrite(red,LOW); digitalWrite(yellow,LOW); digitalWrite(green,HIGH); delay(400);
}
// 闪烁
void flashLED(){
all(HIGH); delay(500);
all(LOW); delay(500);
}
// 全亮/全灭
void all(int s){
digitalWrite(red,s);
digitalWrite(yellow,s);
digitalWrite(green,s);
}