#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);
}
$abcdeabcde151015202530354045505560fghijfghij