Problem z portem szeregowym w mikrokontrolerach z wbudowanym USB, jakim jest ATMEGA32U4 polega na tym, że jest on w pewnym sensie wirtualny, jest częścią drivera USB w bootloaderze i potem w głównym programie też. Stąd po wgraniu programu, resecie procesora port ten na chwilę znika, pojawia się po chwili, a system po ponownym wykryciu nadaje mu inny numer. Niezbyt wygodne rozwiązanie jeśli używamy portu do debuggowania programu. Z drugiej strony zaletą jest możliwość użycia go do symulacji joysticka lub klawiatury.
O wiele lepszym wyjściem, jakie stosuję w takich wypadkach jest użycie sprzętowego portu szeregowego. ATMEGA32U4 ma właściwie dwa. Jeden dostępny poprzez USB i drugi, "normalny" dostępny poprzez piny TX i RX. W Uno te piny podłączone są do zewnętrznego translatora UART<-->USB.
W Leonardo inicjacja portu przez
Serial.begin(baudrate);uruchamia ten pierwszy port na USB. Dostęp do tego drugiego realizuje się poprzez Serial1, np.:
Serial1.begin(baudrate);Oczywiście, żeby podłączyć drugi port do PC potrzebujemy jeszcze jakiś moduł UART-USB. Przestrzegam przed kupowaniem modułów opartzch na FT232 w Chinach. Jest cała masa podróbek, a jakiś czas temu było ogólne poruszenie gdy f-ma FT wypuściła nowe sterowniki wykrywające podróbki i nawet je uszkadzające. Tanie Arduino z Chin przestawały nagle działać. Oczywiście Chiny zareagowały dość szybko zastępując układ FT własnym, tańszym i działającym równie dobrze (CH340 o ile się nie mylę).
Polecam za to moduły Bluetooth-UART serii HC-06 lub HC-05. Działają w porządku, a do tego z telefonu albo tabletu można zrobić sobie dedykowany terminal.
Serial1 będzie pozbawiony "czkawki" jaką powoduje reset i przeprogramowanie procesora.
Jeszcze innym rozwiązaniem, którego osobiście nie sprawdzałem, ale poleca go strona Arduino jest dodanie podczas inicjalizacji pętli czekającej na otworzenie się portu szeregowego:
Serial.begin(9600);
// while the serial stream is not open, do nothing:
while (!Serial) ;
Mam nadzieję, że moje wypociny wniosły co nieco do tematu. Na codzień zajmuję się mikrokontrolerami, być może będę w stanie pomóc w kilku kwestiach.