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