```// 定义引脚号
#define CRASH_SWITCH 6
#define TOUCH_SENSOR 4
#define BUZZER 10
#define LED_PIN 8
// 定义状态常量
const int INITIAL_STATE = 0;
const int CRASH_PRESSED = 1;
const int TOUCH_PRESSED = 2;
const int SECOND_CRASH_PRESSED = 3;
// 定义LED状态常量
const int LED_OFF = 0;
const int LED_GREEN = 1;
const int LED_RED = 2;
// 初始化状态
int state = INITIAL_STATE;
int ledState = LED_OFF;
void setup() {
// 初始化引脚模式
pinMode(CRASH_SWITCH, INPUT_PULLUP);
pinMode(TOUCH_SENSOR, INPUT);
pinMode(BUZZER, OUTPUT);
pinMode(LED_PIN, OUTPUT);
}
void loop() {
// 检测 crash 开关是否被按下
if (digitalRead(CRASH_SWITCH) == LOW) {
delay(50); // 延迟一段时间以消除抖动
if (digitalRead(CRASH_SWITCH) == LOW) {
switch (state) {
case INITIAL_STATE:
// 第一次按下 crash 开关
state = CRASH_PRESSED;
ledState = LED_GREEN;
tone(BUZZER, 600);
break;
case CRASH_PRESSED:
// 第二次按下 crash 开关
state = SECOND_CRASH_PRESSED;
ledState = LED_OFF;
noTone(BUZZER);
break;
case TOUCH_PRESSED:
// 第二次按下 crash 开关
state = SECOND_CRASH_PRESSED;
ledState = LED_OFF;
noTone(BUZZER);
break;
case SECOND_CRASH_PRESSED:
// 重置状态
state = INITIAL_STATE;
break;
}
}
}
// 检测触摸传感器是否被触摸
int touchValue = analogRead(TOUCH_SENSOR);
if (touchValue < 800) {
switch (state) {
case CRASH_PRESSED:
case SECOND_CRASH_PRESSED:
// 触摸传感器被触摸
state = TOUCH_PRESSED;
ledState = LED_RED;
tone(BUZZER, random(700, 1200));
break;
case TOUCH_PRESSED:
// 不需要做任何事情
break;
case INITIAL_STATE:
// 触摸传感器无效
break;
}
} else {
if (state == TOUCH_PRESSED) {
// 触摸传感器没有被触摸
state = CRASH_PRESSED;
ledState = LED_GREEN;
tone(BUZZER, 600);
}
}
// 更新LED状态
switch (ledState) {
case LED_OFF:
digitalWrite(LED_PIN, LOW);
break;
case LED_GREEN:
digitalWrite(LED_PIN, HIGH);
break;
case LED_RED:
digitalWrite(LED_PIN, (millis() / 100) % 2 == 0 ? HIGH : LOW); // 闪烁
break;
}
}
**
```