用外部中断去控制3种流水灯花样。
时间: 2023-06-18 07:05:24 浏览: 189
首先,我们需要定义三种流水灯花样,可以使用一个计数器来控制流水灯的移动。然后,我们需要使用外部中断来触发计数器的增加和减少,从而控制流水灯的移动。
以下是一个示例代码,其中使用了Arduino Uno的外部中断功能,控制了三种不同的流水灯花样:
```c
const int LED1 = 2;
const int LED2 = 3;
const int LED3 = 4;
volatile int pattern = 0; // 计数器,用于控制流水灯的移动
void setup() {
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
pinMode(LED3, OUTPUT);
attachInterrupt(digitalPinToInterrupt(5), increasePattern, RISING); // 外部中断0,触发计数器增加
attachInterrupt(digitalPinToInterrupt(6), decreasePattern, RISING); // 外部中断1,触发计数器减少
}
void loop() {
switch (pattern) {
case 0: // 第一种流水灯花样
digitalWrite(LED1, HIGH);
delay(100);
digitalWrite(LED1, LOW);
digitalWrite(LED2, HIGH);
delay(100);
digitalWrite(LED2, LOW);
digitalWrite(LED3, HIGH);
delay(100);
digitalWrite(LED3, LOW);
break;
case 1: // 第二种流水灯花样
digitalWrite(LED1, HIGH);
delay(100);
digitalWrite(LED1, LOW);
digitalWrite(LED3, HIGH);
delay(100);
digitalWrite(LED3, LOW);
digitalWrite(LED2, HIGH);
delay(100);
digitalWrite(LED2, LOW);
break;
case 2: // 第三种流水灯花样
digitalWrite(LED3, HIGH);
delay(100);
digitalWrite(LED3, LOW);
digitalWrite(LED2, HIGH);
delay(100);
digitalWrite(LED2, LOW);
digitalWrite(LED1, HIGH);
delay(100);
digitalWrite(LED1, LOW);
break;
}
}
void increasePattern() {
pattern = (pattern + 1) % 3; // 计数器增加
}
void decreasePattern() {
pattern = (pattern + 2) % 3; // 计数器减少
}
```
在上面的代码中,我们使用了三个LED灯(LED1,LED2和LED3)来控制三种不同的流水灯花样。在setup函数中,我们将这些LED灯设置为输出模式,并使用attachInterrupt函数将外部中断0和1分别连接到引脚5和6。这样,当这些引脚检测到一个上升沿(从低电平到高电平的变化)时,就会调用increasePattern和decreasePattern函数,从而增加或减少计数器的值。
在loop函数中,我们使用switch语句根据计数器的值来选择不同的流水灯花样。每个流水灯花样都是通过在不同的LED灯之间循环地切换来实现的。在每个LED灯上等待一段时间后,我们会将其关闭,并将下一个LED灯打开。
最后,increasePattern和decreasePattern函数分别将计数器增加1或减少1,通过取模运算来确保计数器的值始终保持在0到2之间。这样,我们就可以使用外部中断来控制三种不同的流水灯花样。
阅读全文