Witam.
Na początku opisze mój problem.
Układ z Arduino Mega + wyświetlacz Nextion
Mam 3 podstawowe funkcje sterujące :
1. Funkcja 1 – steruje pozycją elementu A za pomocą dwóch siłowników elektrycznych. Jeden odpowiada za podnoszenie i opuszczanie w pionie, a drugi za wsuwanie i wysuwanie w poziomie. Pozycjonowanie odbywa się za pomocą odczytu aktualnego położenia każdego z siłowników (sygnał 0-10V) i porównanie z wartością zadaną wprowadzaną z wyświetlacza. Sygnały sterujące wyprowadzane są na przekaźniki. Funkcja załączana przyciskami na wyświetlaczu Nextion.
2. Funkcja 2 – steruje podnoszeniem i opuszczaniem elementu B poprzez obroty silnika prawo / lewo – element może przyjąć tylko dwa skrajne położenia, albo całkowicie podniesiony, albo całkowicie opuszczony. Sterowanie poprzez przekaźniki. Sygnał sterujący przekaźnikami trwa przez zadany okres czasu (zmierzony doświadczalnie). Funkcja załączana przyciskami na wyświetlaczu Nextion.
Ważne. Funkcja 1 i 2 są powiązane ze sobą. Urządzenie B (funkcja 2) może działać tylko wtedy gdy urządzenie A (funkcja 1) osiągnęło umowną pozycję 0 w poziomie
3. Funkcja 3 – sterowanie zmianami efektów świetlnych dla taśmy z adresowalnymi diodami RGBW. Na chwilę obecną jest 10 efektów. Funkcja skonstruowana jest w oparciu o maszynę stanów. Z wyświetlacza wybierany i załączany jest konkretny efekt świetlny. Po jego załączeniu powinien on pracować aż do momentu wyłączenia lub zmiany na inny.
W funkcjach nie używam instrukcji delay. Każda z funkcji niezależnie działa poprawnie.
Problemy zaczynają się gdy chce używać wszystkich funkcji równocześnie w jednym programie. Wtedy albo taśma LED przestaje działać poprawnie i generować efekty świetlne (szczególnie te gdzie są zależności czasowe w sterowaniu poszczególnymi diodami), albo "rozjeżdża" się sterowanie elementami A i B.
Zależy mi na tym, aby gdy załączę sterowanie taśmami LED to uruchomienie sterowania elementami A i B nie miało wpływu na świecenie taśm i odwrotnie, praca taśm nie powinna wpływać na sterowanie elementami A i B (szczególnie na zależności czasu podnoszenia / opuszczania elementu B)
Próbowałem już timerów i funkcji mils, ale wydaje mi się że to nie jest właściwa droga (być może robię gdzieś błąd) bo te metody zakładają że funkcje są wykonywane co zadany okres czasu, a tutaj chyba potrzebne jest rozwiązanie z jednej strony działające ciągle (funkcja 3 - taśma LED + komunikacja z Nextion), a z drugiej aktywujące wybrane funkcje (funkcja 1 i 2) w przypadku wywołania ich z poziomu wyświetlacza.
Zastanawiam się czy nie powinienem użyć Arduino FreeRTOS, ale nie wiem czy to jest rozwiązanie mojego problemu.
Na chwilę obecną zabrakło mi pomysłów.
Prosiłbym o naprowadzenie mnie na rozwiązanie jakiego powinienem użyć. Będę wdzięczny za wszelkie podpowiedzi.
Zaakceptuję również odpowiedź, że Arduino jest za słabe do realizacji takiego zadania szczególnie, że w przyszłości przewiduję rozbudowę o dodatkowe elementy.
Na początku opisze mój problem.
Układ z Arduino Mega + wyświetlacz Nextion
Mam 3 podstawowe funkcje sterujące :
1. Funkcja 1 – steruje pozycją elementu A za pomocą dwóch siłowników elektrycznych. Jeden odpowiada za podnoszenie i opuszczanie w pionie, a drugi za wsuwanie i wysuwanie w poziomie. Pozycjonowanie odbywa się za pomocą odczytu aktualnego położenia każdego z siłowników (sygnał 0-10V) i porównanie z wartością zadaną wprowadzaną z wyświetlacza. Sygnały sterujące wyprowadzane są na przekaźniki. Funkcja załączana przyciskami na wyświetlaczu Nextion.
2. Funkcja 2 – steruje podnoszeniem i opuszczaniem elementu B poprzez obroty silnika prawo / lewo – element może przyjąć tylko dwa skrajne położenia, albo całkowicie podniesiony, albo całkowicie opuszczony. Sterowanie poprzez przekaźniki. Sygnał sterujący przekaźnikami trwa przez zadany okres czasu (zmierzony doświadczalnie). Funkcja załączana przyciskami na wyświetlaczu Nextion.
Ważne. Funkcja 1 i 2 są powiązane ze sobą. Urządzenie B (funkcja 2) może działać tylko wtedy gdy urządzenie A (funkcja 1) osiągnęło umowną pozycję 0 w poziomie
3. Funkcja 3 – sterowanie zmianami efektów świetlnych dla taśmy z adresowalnymi diodami RGBW. Na chwilę obecną jest 10 efektów. Funkcja skonstruowana jest w oparciu o maszynę stanów. Z wyświetlacza wybierany i załączany jest konkretny efekt świetlny. Po jego załączeniu powinien on pracować aż do momentu wyłączenia lub zmiany na inny.
W funkcjach nie używam instrukcji delay. Każda z funkcji niezależnie działa poprawnie.
Problemy zaczynają się gdy chce używać wszystkich funkcji równocześnie w jednym programie. Wtedy albo taśma LED przestaje działać poprawnie i generować efekty świetlne (szczególnie te gdzie są zależności czasowe w sterowaniu poszczególnymi diodami), albo "rozjeżdża" się sterowanie elementami A i B.
Zależy mi na tym, aby gdy załączę sterowanie taśmami LED to uruchomienie sterowania elementami A i B nie miało wpływu na świecenie taśm i odwrotnie, praca taśm nie powinna wpływać na sterowanie elementami A i B (szczególnie na zależności czasu podnoszenia / opuszczania elementu B)
Próbowałem już timerów i funkcji mils, ale wydaje mi się że to nie jest właściwa droga (być może robię gdzieś błąd) bo te metody zakładają że funkcje są wykonywane co zadany okres czasu, a tutaj chyba potrzebne jest rozwiązanie z jednej strony działające ciągle (funkcja 3 - taśma LED + komunikacja z Nextion), a z drugiej aktywujące wybrane funkcje (funkcja 1 i 2) w przypadku wywołania ich z poziomu wyświetlacza.
Zastanawiam się czy nie powinienem użyć Arduino FreeRTOS, ale nie wiem czy to jest rozwiązanie mojego problemu.
Na chwilę obecną zabrakło mi pomysłów.
Prosiłbym o naprowadzenie mnie na rozwiązanie jakiego powinienem użyć. Będę wdzięczny za wszelkie podpowiedzi.
Zaakceptuję również odpowiedź, że Arduino jest za słabe do realizacji takiego zadania szczególnie, że w przyszłości przewiduję rozbudowę o dodatkowe elementy.