不用延时实现汽车转向灯
时间: 2024-03-16 10:43:26 浏览: 17
使用非阻塞延迟可以实现不用延时的汽车转向灯效果。以下是一个使用非阻塞延迟实现汽车转向灯的示例:
```
int leftPin = 2; // 定义左转灯的引脚
int rightPin = 3; // 定义右转灯的引脚
volatile int state = LOW; // LED 灯的状态变量
volatile unsigned long previousMillis = 0; // 上一次 LED 灯状态改变的时间
const long interval = 500; // LED 灯状态改变的时间间隔
void setup() {
pinMode(leftPin, INPUT_PULLUP); // 将左转灯的引脚设置为上拉输入模式
pinMode(rightPin, INPUT_PULLUP); // 将右转灯的引脚设置为上拉输入模式
attachInterrupt(digitalPinToInterrupt(leftPin), leftBlink, FALLING); // 绑定左转灯的中断函数
attachInterrupt(digitalPinToInterrupt(rightPin), rightBlink, FALLING); // 绑定右转灯的中断函数
}
void loop() {
unsigned long currentMillis = millis(); // 获取当前时间
if (currentMillis - previousMillis >= interval) { // 如果时间间隔达到设定值
previousMillis = currentMillis; // 更新上一次 LED 灯状态改变的时间
digitalWrite(leftPin, state); // 改变左转灯的状态
digitalWrite(rightPin, state); // 改变右转灯的状态
state = !state; // 更新 LED 灯的状态变量
}
// 这里可以添加其他需要同时执行的任务
}
void leftBlink() { // 左转灯的中断函数
state = HIGH; // 改变 LED 灯的状态为高电平
previousMillis = millis(); // 更新上一次 LED 灯状态改变的时间
detachInterrupt(digitalPinToInterrupt(leftPin)); // 解除左转灯的中断绑定
attachInterrupt(digitalPinToInterrupt(leftPin), leftOff, RISING); // 绑定左转灯关闭的中断函数
}
void leftOff() { // 左转灯关闭的中断函数
state = LOW; // 改变 LED 灯的状态为低电平
detachInterrupt(digitalPinToInterrupt(leftPin)); // 解除左转灯关闭的中断绑定
attachInterrupt(digitalPinToInterrupt(leftPin), leftBlink, FALLING); // 绑定左转灯的中断函数
}
void rightBlink() { // 右转灯的中断函数
state = HIGH; // 改变 LED 灯的状态为高电平
previousMillis = millis(); // 更新上一次 LED 灯状态改变的时间
detachInterrupt(digitalPinToInterrupt(rightPin)); // 解除右转灯的中断绑定
attachInterrupt(digitalPinToInterrupt(rightPin), rightOff, RISING); // 绑定右转灯关闭的中断函数
}
void rightOff() { // 右转灯关闭的中断函数
state = LOW; // 改变 LED 灯的状态为低电平
detachInterrupt(digitalPinToInterrupt(rightPin)); // 解除右转灯关闭的中断绑定
attachInterrupt(digitalPinToInterrupt(rightPin), rightBlink, FALLING); // 绑定右转灯的中断函数
}
```
以上程序中,我们使用 `millis()` 函数获取当前时间,然后判断是否达到设定的时间间隔,如果达到就改变 LED 灯的状态。使用非阻塞延迟可以实现不用延时的汽车转向灯效果。
相关推荐
![](https://img-home.csdnimg.cn/images/20210720083646.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)