Liczba postów: 34
Liczba wątków: 7
Dołączył: Dec 2019
Reputacja:
0
Prędkość portu mam ustawioną na 9600. Ale mi chodzi o transmisję pomiędzy Arduino a Nrf. Port szeregowy ma coś z tym wspólnego?
Liczba postów: 34
Liczba wątków: 7
Dołączył: Dec 2019
Reputacja:
0
A trwa znacznie dłużej. Tutaj przykład z monitora portu:
13:34:26.895 -> przed
13:34:26.928 -> po
Ten czas już pominąłem bo uznałem, że nie można wykrzesać na arduino i NRF szybszą transmisję, albo biblioteka na to nie pozwala. Ale nawet gdyby już to tyle trwało to jak zabezpieczyć się przed brakiem wysyłki z jakiegoś powodu która notorycznie się powtarza.
Macie tutaj przykład z monitora portu. Na samym końcu monitor portu sugeruje jakby operacja wysłania się nie wykonała:
13:34:23.673 -> przed
13:34:23.708 -> po
13:34:23.775 -> przed
13:34:23.775 -> po
13:34:23.842 -> przed
13:34:23.875 -> po
13:34:23.909 -> przed
13:34:23.943 -> po
13:34:24.010 -> przed
13:34:24.043 -> po
13:34:24.077 -> przed
13:34:24.110 -> po
13:34:24.178 -> przed
13:34:24.212 -> po
13:34:24.246 -> przed
13:34:24.280 -> po
13:34:24.347 -> przed
13:34:24.382 -> po
13:34:24.415 -> przed
13:34:24.449 -> po
13:34:24.516 -> przed
13:34:24.516 -> po
Liczba postów: 868
Liczba wątków: 19
Dołączył: Jun 2018
Reputacja:
42
30-06-2020, 15:27
(Ten post był ostatnio modyfikowany: 30-06-2020, 15:31 przez Jarewa0606.)
(30-06-2020, 07:33)leoj napisał(a): Nie jest pusty. Po prostu nie załączyłem tego fragmentu kodu na forum. Kompilator przecież pokazałby błąd. A nawet gdyby wartości były zerem to też są bajty do wysłania.
A czemu miał by pokazać błąd?? przecież to zmienna która jest w programie zapewnię modyfikowana, wysłanie jednego znaku "0" moze nie być zauważalne a kilkanaście, kilkadziesiąt juz tak..
Proponował bym przed wysłaniem nrf wysłać to samo na monitor portu..
Arduino zostało wymyślone po to, by robić dobrze jedną prostą rzecz – migać diodą.
Liczba postów: 34
Liczba wątków: 7
Dołączył: Dec 2019
Reputacja:
0
30-06-2020, 21:05
(Ten post był ostatnio modyfikowany: 01-07-2020, 12:13 przez leoj.)
Sprawdziłem millis() przed i po wysyłce w momencie kiedy monitor portu pokazuje ten sam czas. I okazuje się że monitor portu wprowadza zamieszanie - w millis() zawsze jest różnica około 35 milisekund. Ale czy wysyłka musi aż tyle trwać? Przecież jakbym miał wysłać jakieś większe ilości danych to by to strasznie dużo czasu zabrało.
A jeśli chodzi o tak długi czas wysyłania to było to spowodowane domyślnym włączeniem potwierdzeń. Dopiero jak napisałem radio.setAutoAck (false); to czas wysyłania przy prędkości transmisji 250kbps trwa około 2 milisekundy. Jak nie wyłączyłem potwierdzeń to automatycznie próbował ponawiać domyślną ilość razy wysyłkę bo nie otrzymywał potwierdzenia (bo w odbiorniku nie napisałem warunku który by to robił). Dopiero jak próbował wysyłać ileś razy to się poddawał i przechodził dalej do wykonywania kolejnych operacji.