Skocz do zawartości

KapitanBomba

Użytkownicy
  • Zawartość

    1
  • Rejestracja

  • Ostatnio

Informacje

  • Płeć
    Mężczyzna

Osiągnięcia użytkownika KapitanBomba

Debiutant

Debiutant (1/19)

  • To już rok!

Odznaki

0

Reputacja

  1. Hej, niestety: odebraneDane = Serial.readStringUntil('\n'); nie działa poprawnie, tzn. nie zapisuje do znaku końca linii. Czy coś się pozmieniało w Arduinach? Funkcja ta działa poprawnie dopiero jak dodamy jakieś opóźnienie w kodzie w innym przypadku wyświetla to co uda jej się "złapać", a przecież powinna omijać odbiór jeśli nie wykryła końca linii. Z opóźnieniem jest ten problem że musi być mniejsze od opóźnienia w Arduinie nadającym dane. Wiem że można poczekać aż w buforze znajdzie się więcej danych przez zwiększenie zera w ifie: Serial.available() > 0, ale przy zmiennej długości przesyłanego komunikatu robi się choinka. Dla przykładu Serial.parseInt działa poprawnie nawet jak w kodzie nie ma ani jednego delay czy millis(). Ewidentnie Serial.setTimeout przyjmujący domyślną wartość 1000ms robi robotę bo jak zmniejszę na zero to tylko szczątkowe dane zbiera co jakiś czas. Jak już jesteśmy przy Serial.setTimeout() to jestem załamany tym jak Arduino wolno te dane mieli - widać gołym okiem że odbieranie danych przez UART spowalnia cały kod, a jak setTimeout damy na zero to znowu choinka. Świetną wydała mi się funkcja void serialEvent(), ale to już w ogóle zamula wszystko. Po co jest ten bufor w Arduino skoro bez opóźnienia nie chce działać? Ja to tak rozumiem że dane do bufora powinny być zapisane jednocześnie w trakcie wykonywania się pętli głównej, a w dowolnej chwili zaglądam do bufora i jak są dane to zapisuje do zmiennej/ robię z nimi co chce. Czy jest jakiś sposób przesyłania danych o zmiennej długości bez użycia jakichkolwiek opóźnień w kodzie odbiornika? Po odebraniu chciał bym te dane jeszcze jakoś podzielić na dwie zmienne int więc muszę mieć zawsze komplet w nowej linii 🙂 Musi być jakiś sposób skoro ludzie na tych prockach autopiloty do modeli RC robią, które są w stanie odbierać na bieżąco całą sieczkę z GPS i przeliczać to robiąc jeszcze setki innych obliczeń w ułamku sekundy. Pomóżcie coś bo już czacha mi dymi, od rana nad tym siedzę... EDYTA: Mam wrażenie że w dokumentacji https://www.arduino.cc/en/Serial/SetTimeout jest bzdura, na Serial.parseInt() owszem działa tak jak tam opisali. Jeśli Serial.setTimeout() jest mniejsza niż częstotliwość wysyłania danych do seriala to zaczyna pluć zerami między pomiarami, ale już Serial.parseFloat() nic sobie nie robi z Serial.setTimeout() czy jest 500 czy 2500ms odczytuje prawidłowo dane gdy tylko się pojawią, mało tego nie blokując pętli 🙄 PS. Wybaczcie że wcześniej tak ciurkiem napisałem, ale myślałem że piszę komentarz, a nie post na forum...
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.