如何修复此arduino代码?(详情如下)

时间:2014-07-22 21:23:27

标签: arduino

我有一个Arduino Mega 2560.我有一个LED接地并通过面包板连接到引脚12,开关通过面包板连接到引脚7和引脚2。我编写了这个程序,按下按钮可以改变LED在打开和关闭之间的状态。所有组件似乎都在工作,所以我认为这是一个编码问题。这是我的代码:

boolean running = false;
boolean ledon = true;
void statechange() {
  if(running == false) {
    running = true;
    ledon = !ledon;
    if(led on) {
      digitalWrite(12, HIGH);
    } else {
      digitalWrite(12, LOW);
    }
    delay(1000);
    running = false;
  }
}

void setup() {
  pinMode(12, OUTPUT);
  pinMode(7, OUTPUT);
  digitalWrite(7, HIGH);
}

void loop() {
  attachInterrupt(0,statechange,CHANGE);
}

我没有收到任何错误,它只是不起作用,LED无论如何都会停止。

2 个答案:

答案 0 :(得分:0)

你确定这是对的吗?

if(ledon)
    {
      digitalWrite(12, HIGH);
    }
    else
    {
      digitalWrite(12, LOW);
    }

看起来像#34;如果LED亮起,请将其打开,否则,如果LED熄灭,请将其关闭。"

不应该是:

if(ledon)
    {
      digitalWrite(12, LOW);
      ledon = false;
    }
    else
    {
      digitalWrite(12, HIGH);
      ledon = true;
    }

如果您使用ledon来跟踪状态,但是独立于if语句更改状态,那么这两者可能会变得不同步。特别是如果其他地方的代码可以更改ledon的状态。

困扰我的另一件事是这一行:if(running == false)

如果确实如此(例如你的硬件?没有运行),那么当时尝试更改I / O状态的重点是什么?

答案 1 :(得分:0)

boolean ledon = true;

void statechange()
{
    ledon = !ledon;
    digitalWrite(12, ledon ? HIGH : LOW);
}

void setup()
{
  pinMode(12, OUTPUT);
  pinMode(7, OUTPUT);
  digitalWrite(7, HIGH);

}

void loop()
{
    attachInterrupt(0,statechange,CHANGE);
}