• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Dobre zasady programowania w Arduino...
#36
Wracając do wątku...

Mam temat do którego nie bardzo wiem jak się zabrać.
Robię sobie sterownik procesu technologicznego, powiedzmy dla uproszczenia sterownik
zarządzający pieczeniem chleba w piekarniku. To tylko przykład dla zobrazowania.

Problem w każdym razie jest taki, ze proces nie biega w koło jak pętla loop()
tylko są to kroki jeden po drugi, aż do zakończenia i wtedy stop.

Normalnie pisząc cokolwiek na Arduino dla każdego "zjawiska" jak obsługa PID, miganie LEDami,
aktualizacja LCD, zapis na SD etc piszę funkcję do której wpadam co jakiś czas (regulowany
millisami()), robie swoje i wypadam.

Nie bardzo mam pomysł jak biegając w pętli mógłbym zrobić np. taki proces:

- sprawdź czy do piekarnika coś włożono ważąc zawartość,
- jeśli wsad zgadza się z oczekiwanym grzejemy piekarnik (PID),
- po osiągnięciu określonej temp. puszczamy parę wodną żeby chleb nie wysechł,
- mierzymy jak chleb rośnie sprawdzając jego ...wysokość Wink,
- po założonym czasie i gdy chleb jest odpowiednio wysoki wyłączamy grzanie,
- gdy piec ostygnia wzywamy obsługę. koniec.

Przykład od czapy, ale obrazuje problem. Do obsłużenia jest lista zadań następujących
po sobie, nie jednoczesnych, do kolejnego przechodzimy gdy poprzednie jest zakończone.

Oczywiście mogę napisać funkcję robiącą to wszystko po kolei, ale to zablokuje mi
inne funkcje jak przykładowe miganie LEDami Wink Dopóki nie opuszczę funkcji głównej
procesor nie uruchomi kolejnych w pętli.

Pewnie mógłbym zapisywać stan głównej funkcji - gdzie jest i co robi, wyskakiwać z niej
po paru millisach() a następnie wywoływać ją z parametrami opisującymi ostatnie miejsce
procesu... Mam nadzieję, że istnieje lepszy pomysł Wink
Dość łatwo byłoby podzielić proces na minimalne możliwe etapy, ale niewiele to nie da -
etap, żeby był wykonany może trwać np. kilka sekund, jeśli zostanie przerwany musi być
rozpoczęty od początku. Nie mogę zablokować loop() na ten czas...

Liczyłem trochę na RTOS ale coś mi się wydaje, że nie załatwi sprawy za mnie, 
a poza tym pewnie natknę się na wiele problemów których teraz nie znam Wink

Będę wdzięczny za jakiś pomysł jak zabrać się do jeża Smile

PWL
 
Odpowiedź
  


Wiadomości w tym wątku
RE: Dobre zasady programowania w Arduino... - przez PierwszyWolnyLogin - 03-07-2019, 19:27

Skocz do:


Przeglądający: 1 gości