-1

我试图中断我的 arduino uno 板,有线连接正确,但我不知道代码有什么问题。我想要的是 led1 默认运行,当我按下开关按钮时它停止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);
  }

}

有什么建议么 ?

4

1 回答 1

0

@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);
  }

}
于 2014-08-01T13:25:27.617 回答