On Sat, 8 Jul 2017 11:28:19 +0200, Janusz <
janu...@o2.pl> wrote:
> > Panowie, dziękuję bardzo - spróbuję najpierw wyeliminować wpływ
opóźnień
> > związanych z obsługą LCD.
> Nic Ci to nie da, nadal będziesz miał przypadkowe
De facto są dwa zadania do realizacji: obserwacja czujnika w czasie
rzeczywistym i pokazywanie przeliczonych wyników na wyświetlaczu.
Pierwsze zadanie wymaga pełnej dyspozycyjności. CPU nie może "na
chwilę zająć się czymś innym".
Drugie jest czasochłonne (LCD jest dość powolne) i może być blokujące
(jeżeli nie wiadomo jak długo trzeba będzie np. czekać na przesłanie
tych danych gdzieś jakoś).
Jest jeden CPU, jeden rdzeń. Jedyna sensowna możliwość to obsługa
czujnika w przerwaniu. Przecież Atmega 328 ma przerwania i nikt nie
broni mieć "gorącą linię" z czujnika wprost do CPU.
Oczywiście w tym momencie program robi się "dwuwątkowy". Czyli trzeba
trochę ogarnąć np. możliwość jednoczesnego dostępu do zmiennej i
takie tam. Nic drastycznie trudnego.
Alternatywą jest najpierw tylko mierzyć, potem pokazać wynik itd.
Dobrze byłoby sprawdzić jak działa biblioteka do LCD - czy np. nie
używa sama przerwań itp.
Nigdzie nie używać delay.
Jeszcze mały drobiazg: Arduino obsługuje transmisję szeregową w
głównej pętli, tj. wywołuje na przemian loop() i coś tam jeszcze.
Czyli pomiędzy kolejnymi wejściami do loop() może upłynąć bliżej
nieokreślony czas. Można się tego pozbyć, ale przestanie np. działać
monitor na porcie szeregowym.