arduino uno interruption code 2 leds 1 switch

时间:2014-08-01 01:13:06

标签: arduino arduino-uno interruptions

我试图在我的arduino uno board中断,有线连接正确,但我不知道代码有什么问题..我想要的是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);
  }

}

有什么建议吗?

1 个答案:

答案 0 :(得分: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);
  }

}