下面是一个使用Arduino的PIR运动传感器的代码示例,它不使用delay()
函数来实现延迟:
// 定义PIR传感器引脚
const int pirPin = 2;
// 定义LED引脚
const int ledPin = 13;
// 定义变量来存储传感器状态和LED状态
int pirState = LOW;
int ledState = LOW;
// 定义变量来存储上一次检测到运动的时间和运动的延迟时间
unsigned long lastMotionTime = 0;
unsigned long motionDelay = 5000; // 5秒
void setup() {
// 初始化串口通信
Serial.begin(9600);
// 设置PIR传感器引脚为输入
pinMode(pirPin, INPUT);
// 设置LED引脚为输出
pinMode(ledPin, OUTPUT);
}
void loop() {
// 读取传感器状态
int sensorValue = digitalRead(pirPin);
// 如果传感器检测到运动
if (sensorValue == HIGH) {
// 更新传感器状态为高
pirState = HIGH;
// 记录当前时间
unsigned long currentTime = millis();
// 检查是否超过了运动的延迟时间
if (currentTime - lastMotionTime >= motionDelay) {
// 更新LED状态为高
ledState = HIGH;
// 更新上一次检测到运动的时间
lastMotionTime = currentTime;
}
} else {
// 如果传感器没有检测到运动,更新传感器状态为低
pirState = LOW;
}
// 更新LED引脚的状态
digitalWrite(ledPin, ledState);
// 打印传感器状态和LED状态
Serial.print("PIR状态: ");
Serial.println(pirState);
Serial.print("LED状态: ");
Serial.println(ledState);
// 延迟100毫秒
delay(100);
}
这个代码示例使用digitalRead()
函数来读取PIR传感器的状态,并使用millis()
函数来获取当前时间。通过比较当前时间和上一次检测到运动的时间,可以实现延迟功能。当传感器检测到运动且超过了延迟时间时,LED灯会亮起。关于这个示例,你可以根据需要进行修改和扩展。