#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#define L 13
#define R 12
#define S 14
#define L_LED 26
#define R_LED 27
#define FMQ 25
LiquidCrystal_I2C lcd(0x27, 16, 2);
bool leftTurnState = false;
bool rightTurnState = false;
bool hazardState = false;
unsigned long previousMillis = 0;
const long interval = 500;
void setup()
{
pinMode(L, INPUT_PULLUP);
pinMode(R, INPUT_PULLUP);
pinMode(S, INPUT_PULLUP);
pinMode(L_LED, OUTPUT);
pinMode(R_LED, OUTPUT);
pinMode(FMQ, OUTPUT);
lcd.init();
lcd.backlight();
}
void loop()
{
bool leftTurnButton = !digitalRead(L);
bool rightTurnButton = !digitalRead(R);
bool hazardButton = !digitalRead(S);
if (leftTurnButton) {
leftTurnState = !leftTurnState;
rightTurnState = false;
hazardState = false;
delay(300);
}
// 处理右转按钮
if (rightTurnButton)
{
rightTurnState = !rightTurnState;
leftTurnState = false;
hazardState = false;
delay(300);
}
if (hazardButton)
{
hazardState = !hazardState;
leftTurnState = false;
rightTurnState = false;
delay(300);
}
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval)
{
previousMillis = currentMillis;
if (leftTurnState) {
digitalWrite(L_LED, !digitalRead(L_LED));
digitalWrite(FMQ, !digitalRead(FMQ));
digitalWrite(R_LED, LOW);
displayOnLCD("L");
} else if (rightTurnState) {
digitalWrite(R_LED, !digitalRead(R_LED));
digitalWrite(FMQ, !digitalRead(FMQ));
digitalWrite(L_LED, LOW);
displayOnLCD("R");
} else if (hazardState) {
digitalWrite(L_LED, !digitalRead(L_LED));
digitalWrite(R_LED, !digitalRead(R_LED));
digitalWrite(FMQ, !digitalRead(FMQ));
displayOnLCD("S");
} else {
digitalWrite(L_LED, LOW);
digitalWrite(R_LED, LOW);
digitalWrite(FMQ, LOW);
displayOnLCD("");
}
}
}
void displayOnLCD(const char* message)
{
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Signal: ");
lcd.setCursor(8, 0);
lcd.print(message);
}