Arduino-04 外部中断:关闭开启与延时

对外部中断只响应一次,直到任务执行完,并且在任务中存在延时。如何实现开启关闭中断和延时呢?

如下代码功能,中断后灯改变频率闪烁10次。之后回到初始频率的闪烁。

delay(ms)在中断中不可使用,存在定时器的冲突,可以用delayMicroseconds()来代替。Serial.println()也会受影响。

const byte ledPin = 13;
const byte interruptPin = 2;
volatile byte state = LOW;

void setup() {
  Serial.begin(115200);
  Serial.println('Start:');
  pinMode(ledPin, OUTPUT);
  pinMode(interruptPin, INPUT_PULLUP);
  attachInterrupt(digitalPinToInterrupt(interruptPin), blink, RISING);
}

void loop() {
  digitalWrite(ledPin, HIGH);   // sets the LED on
  delay(1000);                  // waits for a second
  digitalWrite(ledPin, LOW);    // sets the LED off
  delay(1000);   
}

void blink() {
  
  detachInterrupt(digitalPinToInterrupt(interruptPin));
  Serial.println(">>>>");
  //noInterrupts();
  for(int counter = 1;counter <= 10;counter++) {
  state = !state;
  digitalWrite(ledPin, state);
  for(int i=0;i<300;i++){
    delayMicroseconds(1000);}
  //Serial.println(counter);
  }
  //interrupts();
  attachInterrupt(digitalPinToInterrupt(interruptPin), blink, RISING);
}

参考资料:

https://www.arduino.cc/en/Reference.digitalWrite

https://blog.csdn.net/qq_42860728/article/details/88097128

https://www.arduino.cc/reference/en/language/functions/external-interrupts/attachinterrupt/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

银河漫游者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值