Cela fonctionne bien sur le MCU ATMega32U4 cependant ..... lorsqu'il est alimenté par batterie, il ne peut pas détecter une déconnexion de l'USB. Il peut détecter une reconnexion (false) et après cela un état vrai, mais pas de déconnexion.AVR-C: la connexion USB peut être détectée avec succès, pas une déconnexion USB
Par exemple:
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
}
Lorsque vous jetez un oeil à la ligne:
Serial1.println(UDADDR & _BV(ADDEN), HEX);
Il imprime:
Connected: 0x80 (function result = true)
Not connected: 0x00 (function result = false)
Il peut détecter le changement de ne pas connecté à connecté mais pas connecté à NON connecté (déconnecté).
Existe-t-il une solution simple à cela?
EDIT 13 okt 2017:
Juste cette figure, cela fonctionne mais pas toujours. Trouvé ici: http://forum.arduino.cc/index.php?topic=28567.0
C'est le registre UDINT, il signale 16 décimal (0x10 hexadécimal) lorsqu'il est connecté.
Version modifiée de la première version de cette fonction ci-dessus:
bool TEnjoyPad::isUSBConnected()
{
#if defined(UDADDR) && defined(_BV) && defined(ADDEN) && defined(UDINT) && defined(USBCON)
return ((UDADDR & _BV(ADDEN)) && (UDINT));
#else
return false;
#endif
}
Il fonctionne cependant que lorsque ces conditions sont remplies:
- Device is connected to computer, phone etc
- Device is disconnected from computer, phone etc
Si vous utilisez un batterypack USB par exemple, rapports vrai et avec quelques batteries, l'état est toujours vrai lorsqu'il est déconnecté. Le bus est confus? Lorsque vous vous connectez à nouveau à l'ordinateur, au téléphone, etc., il signale false, puis true et lorsqu'il est déconnecté, il signale false (comme il se doit).
Des idées? A quelque chose à voir avec la construction USB datalines?
Dans l'exemple, ils utilisent cette ligne. Il ne fait pas de différence pour moi quand je l'ai ajouté:
USBCON = USBCON | B00010000;
EDIT 14 okt 2017:
Merci à @ralph htp, voir ma réponse ci-dessous posté, peut-être qu'il peut aider les autres aussi.
Hai, merci pour la réponse, mais lien n » t travail: 404 l'erreur suivante s'est produite: L'URL demandée n'a pas été trouvée. n ce serveur. Veuillez vérifier l'URL ou contacter le webmaster. – Codebeat
liaison fixe et dans la pile LUFA sont différentes fonctions en mode appareil et hôte ... –
Merci, je le regarde mais ne mène pas à une solution, du moins pas pour moi. Voir aussi mon edit à ma question. – Codebeat