【问题标题】:arduino uno interruption code 2 leds 1 switcharduino uno 中断代码 2 LED 1 开关
【发布时间】:2014-08-01 01:13:05
【问题描述】:

我试图中断我的 arduino uno 板,有线连接正确,但我不知道代码有什么问题。我想要的是 led1 在默认情况下运行,当我按下switchbutton 它停止了 led1 的工作并开始为 led2 制作一个循环 .. 我已经检查了几次代码,但我仍然不知道代码中的错误

int led1 = 13;
int led2 = 12;
int button=0;
boolean x = false ;


void setup() 
{
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
  pinMode(button, INPUT);
  attachInterrupt(button, ledchange , CHANGE);
}

void loop() 
{
  digitalWrite(led1, HIGH);   // turn the LED on (HIGH is the voltage level)
  //delay(1000);               // wait for 1000 melli-second

}

void ledchange()
{
  x=true;
  digitalWrite(led1,LOW);
  for ( int i=0 ; i<=5 ; i++)
  {
    digitalWrite(led2,HIGH);
    delay(1000);
    digitalWrite(led2,LOW);
    delay(1000);
  }

}

有什么建议吗?

【问题讨论】:

  • 不要在 ISR 中使用 delay()
  • 你使用的是 D2 而不是 D0?
  • 作为一般原则,不要在 ISR 中做冗长的事情。最好只设置/清除那里的标志,然后检查主循环中的标志。

标签: arduino arduino-uno interruptions


【解决方案1】:

@TOMATO 是正确的,延迟不会在 ISR 中增加,因为所有中断都被禁用。因此它不会退出。

除非您重新启用中断。

void ledchange()
{
  interrupts(); // re-enable interrupts so that ms may increase for following delay()
  x=true;
  digitalWrite(led1,LOW);
  for ( int i=0 ; i<=5 ; i++)
  {
    digitalWrite(led2,HIGH);
    delay(1000);
    digitalWrite(led2,LOW);
    delay(1000);
  }

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多