Имеете дело с отключением USB?

Следующий код отлаживает собственный порт SerialUSB, подключенный к ПК и подключенный через монитор терминала (например, Termite, с любым bps, 8N1, RTS/CTS).

При запуске порты ищут связь, и вы видите быстрые мигания.

Если SerialUSBподключен и подключен, происходит связь, она же медленное мигание.

Но если USB отключен после SerialUSB, даже если вы отключили его раньше, код переходит в состояние остановки, т. е. не мигает.

Если вы снова подключите USB, он вернется в !SerialUSB, поэтому, если вы отключите (если он был подключен) и снова подключите терминал, он восстановит состояние SerialUSB, не без реакции линии reset (). Похоже, то же самое происходит и с сериалом.

Есть какие-нибудь подсказки о том, почему Arduino переходит в такое состояние остановки после отключения USB?

Как мы должны с этим бороться? Как можно предотвратить это состояние?

Большинство людей утверждают, что это проблема с источником питания. Это происходит как с источником питания 5 В, так и без него.

// ARDUINO DUE BLINK LED
void setup(){
  pinMode(13,OUTPUT);
  Serial.begin(115200);
  SerialUSB.begin(115200);
  while(!Serial){
    digitalWrite(13,HIGH);delay(500);
    digitalWrite(13,LOW);delay(500);
  }
  Serial.println("System Reset");
}    
void loop(){  
  int n=0;
  while(!SerialUSB){
    Serial.println("USB Unplugged or Terminal Disconnected");
    digitalWrite(13,HIGH);delay(50);
    digitalWrite(13,LOW);delay(450);
    n=n+1;
    if (n>=5){
      Serial.println("Resetting to Connect if Disconnected");
      digitalWrite(13,HIGH);delay(450);
      digitalWrite(13,LOW);delay(50);
      rstc_start_software_reset(RSTC);
    }
  }
  SerialUSB.println("USB Plugged and Terminal Connected");
  Serial.println("USB Plugged and Terminal Connected");
  digitalWrite(13,HIGH);delay(50);
  digitalWrite(13,LOW);delay(50);
}

, 👍1


1 ответ


1

Это невозможно сделать, потому что протокол CDC/ACM не отправляет информацию такого типа, поэтому вы не можете определить, подключен Arduino или нет, поэтому он останавливается. (Вы могли бы создать функцию поддержания жизни, но я не знаю, возможно ли это с тем, что вы делаете)

,