我有一个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无论如何都会停止。
答案 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);
}