无法在Arduino Due上获得当前输出引脚状态

时间:2013-02-26 22:21:01

标签: toggle arduino

我有一个简单的任务,即使用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始终保持高电平。我做错了什么?

2 个答案:

答案 0 :(得分: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上的帖子。

编辑:对不起我以前的可怕答案。

答案 1 :(得分:0)

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

解决方案:拥有发送到存储在变量中的引脚13的逻辑电平的副本。 这个变量我在下面的代码中命名为mem。您无需读取引脚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)
}