(23-04-2024, 17:01)MadMrQ napisał(a): Zauważ, że pisząc w taki sposób:
funkcja setDisplay() zmieniająca symbol z iksa na satelitę ma szansę wykonać się tylko w przypadku, gdy funkcja gps.encode zwróci wartość (będziesz miał dane z GPS). W przypadku gdy danych nie masz nie dojdzie do zmiany na ekranie.Kod:if (gps.encode(Serial1.read())){
setDisplay();
}
Tutaj program aż się prosi o dodanie else'a, ale z tym też uważnie - przy utracie pojedynczego pakietu danych z GPS iks może "wskoczyć" na ekran tylko na moment i przy większej częstotliwości utraty pakietów będziesz miał iksosatelitę na ekranie.
Możesz spróbować dodać np. zmienną counter, która będzie w else zwiększana i dopiero po osiągnięciu np. wartości 10 wywoła zmianę na ekranie i reset countera.
Ta funkcja 'encode' pobiera pojedynczy znak i sygnalizuje, gdy udało jej się skompletować dane z GPS'a - kompletną odpowiednią sekwencję. Ona dziesiątki lub setki razy zwraca false i raz zwróci true. Z logicznego punktu widzenia powinna zwracać 3 wartości - MAM_DANE, BRAK_FIXA, JESZCZE_NIE_WIEM.
Dla kompletności programu należałoby wykrywać też dłuższy brak danych na porcie GPS'a - praktycznie kilkusekundowa 'cisza' sugeruje jakiś problem sprzętowy - najpewniej coś się odpięło, normalnie GPS wysyła dane co najmniej raz na sekundę.