0

我有一个简单的任务是使用 Arduino IDE 1.5.2 在 Arduino Due 上切换输出引脚状态。我试过这样的代码:

int pinnum = 13;
void setup() {
  pinMode(pinnum, OUTPUT);  // use on-board LED
} 

void loop() {
  digitalWrite(pinnum, !digitalRead(pinnum));
  delay(1000);  // wait around for 1 sec (1000 ms)
}

这无济于事。引脚 13 一直保持高电平。我究竟做错了什么?

4

2 回答 2

4

读取设置为 OUTPUT 的引脚状态时存在错误。作为一种临时解决方法,如果您的电路允许,请先将引脚设置为输入,然后再将其设置为输出,如下所示:

int pinnum = 13;
void setup() {
  pinMode(pinnum, INPUT);   // Work around bug
  pinMode(pinnum, OUTPUT);  // use on-board LED
} 

void loop() {
  digitalWrite(pinnum, !digitalRead(pinnum));
  delay(1000);  // wait around for 1 sec (1000 ms)
}

有关更多详细信息,请参阅我在http://forum.arduino.cc/index.php?topic=185291.0上的帖子。

编辑:对不起我之前糟糕的回答。

于 2013-09-12T18:56:16.420 回答
0

我认为您的问题是您无法读取先前发送到引脚 13 的数字值。由于 LED 接地,您总是读取低电平。

解决方案:将发送到引脚 13 的逻辑电平的副本存储在变量中。mem我在下面的代码中命名了这个变量。你不需要阅读 pin 13,因为现在你有一个副本mem。正如您在代码示例中所做的那样,您在将其发送到引脚 13 之前反转此副本。

在端口引脚上执行读-修改-写操作时,您的问题通常被描述为警告——请参阅从微控制器制造商处获取的数据表。

int pinnum = 13;
int mem = 0;
void setup() {
  pinMode(pinnum, OUTPUT);  // use on-board LED
} 

void loop() {
  digitalWrite(pinnum, mem);
  mem=!mem;
  delay(1000);  // wait around for 1 sec (1000 ms)
}
于 2013-09-06T19:28:24.983 回答