Witam,
Mam następujący kod, który w pętli loop sprawdza jaka jest wartość zmiennej "flag_menu" i w zależności o tego wywołuje odpowiedni funkcje. Wszystko w programie szło fajnie, aż do momentu chęci dodania funkcji, której działanie mogło by być przerwane przez interwencję użytkownika:
Ta funkcja ma wykonać 4*2592 kroków silnika krokowego i to działa idealnie - nie mam za to pojęcia, jak przerwać działanie tej funkcji poprzez np naciśniecie przycisku. Przykład, który analizowałem (Link) poruszał co prawda ten temat, ale on był wrzucony bezpośrednio w funkcję loop() a ja potrzebuję to realizować wewnątrz własnej. Linijka stepper.rotate(4*2592); musi się najpierw wykonać, a dopiero potem wykonuje się kolejna, tak więc sprawdzanie przycisku w tym miejscu ni ma najmniejszego sensu, a jak próbowałem to sprawdzać w loop() przez to również nie dawało żadnego efektu, instrukcja w funkcji musiała się wykonać "do końca".
Jak powinno się rozwiązywać tego typu zagadnienia? Bo zapewne taki problem będę miał w każdej sytuacji, w której program będzie "w tle" oczekiwał na reakcję użytkownika.
Korzystam ze sterownika (i biblioteki) DRV8825
Mam następujący kod, który w pętli loop sprawdza jaka jest wartość zmiennej "flag_menu" i w zależności o tego wywołuje odpowiedni funkcje. Wszystko w programie szło fajnie, aż do momentu chęci dodania funkcji, której działanie mogło by być przerwane przez interwencję użytkownika:
REKLAMA
Kod: C / C++
Ta funkcja ma wykonać 4*2592 kroków silnika krokowego i to działa idealnie - nie mam za to pojęcia, jak przerwać działanie tej funkcji poprzez np naciśniecie przycisku. Przykład, który analizowałem (Link) poruszał co prawda ten temat, ale on był wrzucony bezpośrednio w funkcję loop() a ja potrzebuję to realizować wewnątrz własnej. Linijka stepper.rotate(4*2592); musi się najpierw wykonać, a dopiero potem wykonuje się kolejna, tak więc sprawdzanie przycisku w tym miejscu ni ma najmniejszego sensu, a jak próbowałem to sprawdzać w loop() przez
if (buttonState == HIGH && flag==1) ...{Jak powinno się rozwiązywać tego typu zagadnienia? Bo zapewne taki problem będę miał w każdej sytuacji, w której program będzie "w tle" oczekiwał na reakcję użytkownika.
Korzystam ze sterownika (i biblioteki) DRV8825