Arduino:禁用USB时输入的USB串行数据会输入连接

时间:2013-12-31 21:20:20

标签: arduino usbserial

我正在为Arduino Leonardo撰写草图,偶尔需要通过USB串行进行双向通信,并且还需要节能。为了省电,我想在不需要时禁用USB。我可以成功使用power_usb_disable()和power_usb_enable()来执行此操作,但仅当禁用USB时没有数据发送到Arduino。

以下是如何重现问题:我在Leonardo上运行以下草图,同时它连接到我的计算机上的串行通信程序(我已经尝试过Arduino串行监视器和Linux中的Minicom和Windows中的PuTTY)。它按预期工作,打印出消息,直到我在“禁用USB ...”消息后输入内容。一旦我这样做,我将不会收到狮子座的进一步数据。有趣的是,TX和RX LED继续闪烁,好像一切都很好。使连接再次工作的唯一方法是重置电路板。

现在,我不关心在USB被禁用时丢弃传入的数据,这是可以预期的......但是我希望再次启用USB后串行连接能够继续正常工作。

我不太了解USB串行如何解决这个问题。

#include <avr/power.h>

void setup() {
  Serial.begin(9600);
  delay(3000);
}

void loop() {
  Serial.println("USB is enabled!");
  delay(1000);

  // If I send characters here, everything is fine.

  Serial.println("Disabling USB...");
  delay(25);
  power_usb_disable();
  delay(1000);

  // If I send characters here, it hoses the USB connection somehow.

  power_usb_enable();
  delay(25);
}

1 个答案:

答案 0 :(得分:0)

我想现在这个问题的最佳答案是“不要那样做”。如果连接打开,我可以安排不使用“if(Serial)”来禁用USB。因此,如果有人打开一个串行监视器,看起来好像要打字,我会启用USB。似乎工作正常,虽然它没有解决如何从任何状态强大地禁用和重新启用USB的基本一般问题。我仍然希望听到专家建议。