它在ATMega32U4 MCU上工作正常,但是.....当电池供电时,它无法检测到与USB断开连接。它可以检测到重新连接(false),并在此之后成为真实状态,但不会断开连接。AVR-C:可以成功检测到USB连接,而不是USB断开连接
例如:
bool TEnjoyPad::isUSBConnected()
{
#if defined(UDADDR) && defined(_BV) && defined(ADDEN)
//setDelay(1000);
Serial1.println("--------");
Serial1.println(UDADDR & _BV(ADDEN), HEX);
//Serial1.println(UDADDR, HEX); // 97 or 98 hex
//Serial1.println(_BV(ADDEN), HEX);
return (UDADDR & _BV(ADDEN));
#else
return false;
#endif
}
当你看看行:
Serial1.println(UDADDR & _BV(ADDEN), HEX);
它打印:
Connected: 0x80 (function result = true)
Not connected: 0x00 (function result = false)
它可以探测到这一变化,从没有连接到连接但未连接到未连接(断开连接)。
有没有简单的解决方案呢?
编辑13十月2017年:
只是弄清楚这一点,它的工作原理却并非总是如此。在这里找到它: http://forum.arduino.cc/index.php?topic=28567.0
它是UDINT寄存器,它连接时报告16十进制(0x10十六进制)。
修改以上这个函数的第一个版本的版本:
bool TEnjoyPad::isUSBConnected()
{
#if defined(UDADDR) && defined(_BV) && defined(ADDEN) && defined(UDINT) && defined(USBCON)
return ((UDADDR & _BV(ADDEN)) && (UDINT));
#else
return false;
#endif
}
它的工作原理但是只有当这些条件都满足:
- Device is connected to computer, phone etc
- Device is disconnected from computer, phone etc
如果使用例如一个USB蓄电池组,它会报告真实的,有些电池组断开时,状态仍然为真。公交车很困惑?当你再次连接到计算机,电话等时,它报告错误,然后是真实的,当断开连接时,它报告错误(它应该)。
任何想法?与建筑USB数据线有什么关系?
在这个例子中,他们使用这一行。它不会有所作为,我当我说的:
USBCON = USBCON | B00010000;
编辑14十月2017年:
感谢@ralph HTP,请参阅下面我发布的答案,也许它可以帮助别人。
海,感谢您的答案,但没有按链接” t工作:404他发生以下错误: 未找到请求的URL o在这台服务器上。 请检查网址或与网站管理员联系。 – Codebeat
固定链接和LUFA堆栈在设备和主机模式下有不同的功能... –
谢谢,我看看它,但没有导致解决方案,至少不适合我。另请参阅我在我的问题编辑。 – Codebeat