#include <ESP32Servo.h> // 引入 ESP32Servo 库
// 引脚定义
#define LDR_DO_PIN 14 // LDR 模块的 DO 连接到 GPIO14
#define SERVO_PIN 13 // 舵机信号线连接到 GPIO13
Servo myServo; // 创建舵机对象
bool lastState = false; // 上一次 LDR 状态(未被覆盖)
unsigned long lastTriggerTime = 0; // 上次触发时间
const unsigned long DEBOUNCE_TIME = 1000; // 防抖时间 1 秒
void setup() {
// 初始化串口
Serial.begin(115200);
Serial.println("ESP32-S3: LDR Module (DO) and Servo Control");
// 配置 DO 引脚
pinMode(LDR_DO_PIN, INPUT);
// 初始化舵机
myServo.attach(SERVO_PIN); // 绑定舵机引脚
myServo.write(0); // 初始位置(0 度,未按下)
}
void loop() {
// 读取 LDR 的 DO 值
int doValue = digitalRead(LDR_DO_PIN);
Serial.print("LDR DO Value: ");
Serial.println(doValue ? "HIGH" : "LOW");
// 判断 LDR 是否被覆盖(假设 LOW 表示被覆盖,需根据测试调整)
bool isCovered = (doValue == LOW);
// 检测状态变化(未被覆盖 -> 被覆盖)
if (isCovered && !lastState && (millis() - lastTriggerTime > DEBOUNCE_TIME)) {
Serial.println("LDR covered! Pressing space key...");
myServo.write(90); // 旋转到 90 度(模拟按下)
delay(200); // 保持按下状态 200ms
myServo.write(0); // 返回初始位置(0 度)
lastTriggerTime = millis(); // 更新触发时间
}
// 更新状态
lastState = isCovered;
// 短暂延时,降低 CPU 占用
delay(100);
}