Wpis z mikrobloga

Używam biblioteki c++ do komunikacji z arduino stąd: https://playground.arduino.cc/Interfacing/CPPWindows
Mój problem: podejrzewam, że metoda IsConnected() do sprawdzania, czy mamy połączenie z urządzeniem, nie działa.
Jak doszedłem do takiego wniosku? Po prostu wyjmuję kabel USB, a ona dalej zwraca true. Miał ktoś podobny problem?
#cpp #arduino #elektronika #programowanie #informatyka #diy
  • 11
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

może być tak, że weryfikuje tylko jakąś flagę systemową/wewnętrzną? To jest usb z emulacją portu szeregowego? Czy przed podłączeniem zwraca false? Czy windows dalej widzi to urządzenie? Czy dalej tak działa po jakimś timeout, np: 5+ minut? Masz link do dokumentacji konkretnie tej metody? Do jej źródła?
Nie znam się ani na cpp ani arduino, ale to są pytania, które mi się nasuwają.
  • Odpowiedz
@cypo: przed podłączeniem jest na false, po podłączeniu już zawsze na true. Timeoutu nie sprawdzałem, ale nie sądzę - dla pewności zaraz sprawdzę. Kod źródłowy jest pod linkiem.
  • Odpowiedz
@mikson123: Hehe działać to działa (tak jak ją zaprogramowali) ale to nic nie sprawdza, a jedynie informuje czy udało się połączyć z arduino w momencie tworzenia instancji tej klasy. Potem sobie możesz odpinać kable do woli i ta flaga się nie zmienia aż usuniesz obiekt - ale wtedy to i tak nie masz na czym sprawdzać.
bool Serial::IsConnected()
{
//Simply return the connection status
return
  • Odpowiedz
No racja, wklejone w artykuł. Nie ma żadnej logiki, sprawdza tylko, czy wcześniej z powodzeniem udało się połączyć, a nie weryfikuje połączenia w trakcie. To, co byś chciał uzyskać, to metoda testConnection(), która by coś wysłała i zobaczyła, czy cel jest odpowiedzialny. Niestety nikt jej jeszcze tam nie dopisał.
  • Odpowiedz
@atehxx: okej, rozumiem, dzięki za wyczerpującą odpowiedź. Ale to jak w takim razie wykryć moment wypięcia z usb? Z pustego portu danych przecież nie odbiorę ( ͡° ͜ʖ ͡°)( ͡° ͜ʖ ͡°)
  • Odpowiedz
@mikson123: Szukaj coś pod "c++ serial port check status" czy coś w ten deseń - nie ma potrzeby szukać konkretnie pod arduino bo z perspektywy kompa nie ma znaczenia co tam wpiąłeś.
  • Odpowiedz
@mikson123: może zadziała, jak napiszesz metodę, która robi read/write jakieś NOPy, czyli coś, co nic nie zrobi. jak read/write zwróci false, to znaczy, że coś jest nie tak.
  • Odpowiedz
@mikson123: Jak chcesz rozwiązanie profesjonalne to musisz się pobawić w łapanie eventów z systemu o podłączaniu i odłączaniu urządzeń :P O ile z Menedżerze urządzeń port znika po odpięciu USB (może też być sytuacja że urządzenie jest wpięte i nie znika, ale po prostu padło i zlewa komunikacje z kompem) to w ten sposób się dowiesz że jest odpięte i kiedy wróciło (wtedy możesz zrobić reconnect).
  • Odpowiedz