Jak rozwiązać problem z odliczaniem?

Masz problem z Arduino? Tutaj możesz szukać pomocy.
ODPOWIEDZ
Vytatas
Młodszy majsterkowicz
Posty: 2
Rejestracja: 2 lut 2018, 11:39

Jak rozwiązać problem z odliczaniem?

Post autor: Vytatas » 2 lut 2018, 12:39

Witajcie,

Jako że jestem nowy na tym forum, pozdrawiam wszystkich i wszystkiego dobrego :)

Przechodząc do tematu wątku. Chcę zrobić coś takiego:
Mam kamerkę Canona (model mało istotny). Odczytałem sobie za pomocą Arduino kody z pilota IR do tej kamerki, złożyłem układ do wysyłania kodów do kamerki i działa, wysyłając kody kamerka na nie reaguje tak jak powinna. Teraz chcę zrobić dwa przyciski, które będą służyły do zmiany barwy w kamerze, nie da się tego jednak zrobić pojedynczym przyciskiem/kodem więc muszę wysłać sekwencję kodów(wykorzystuje dwa przyciski do tych sekwencji, SET(S) i RIGHT(R) ) i dla przykładu żeby zmniejszyć temperaturę barwy muszę wysłać do kamery sekwencję:
S S R R R R S S R R S R R R S
Menu kamery przechodzi wtedy do ustawienia temp. barwy zmniejsza ją o najmniejszy możliwy ruch i wraca do ekranu początkowego. Napisałem programik do tego i działa tylko jest jeden problem. Gdy po sekwencji kamera wraca do ekranu początkowego to jeszcze przez jakieś 4 sekundy jest podświetlony na ekranie przycisk ostatnio używany i żeby w ciągu tych 4 sekund zanim on zgaśnie ponownie wykonać zmianę temp. barwy muszę wykonać inną sekwencję (bez pierwszego S) czyli:
S R R R R S S R R S R R R S

Podpowiedzcie proszę jak to rozwiązać żeby:

Wciskam przycisk, wykonuje się sekwencja 1 jeżeli w danym czasie wcisnę go ponownie to wykona się sekwencja 2, jeżeli wcisnę go po tym określonym czasie to wykona się normalnie sekwencja 1.

Kombinowałem coś na delay'ach ale nie jest za dobrze wstawiać tyle opóźnień tym bardziej że i tak mam delay'e w sekwencjach pomiędzy wysyłanymi kodami bo bez opóźnień nie wszystkie kody docierały do kamery.

Co miesiąc do wygrania nagrody o wartości ponad 1600 zł!


Awatar użytkownika
Marhef
Złota rączka
Posty: 1140
Rejestracja: 18 lis 2011, 02:18

Re: Jak rozwiązać problem z odliczaniem?

Post autor: Marhef » 2 lut 2018, 16:40

Słyszałeś o funkcji millis()? Zwraca ilość milisekund od podłączenia zasilania.
Po wysłaniu pierwszej sekwencji do zmiennej przypisujesz czas:

Kod: Zaznacz cały

start=millis();
Po wciśnięciu po raz kolejny przycisku najpierw sprawdzasz, czy

Kod: Zaznacz cały

millis()-start < czas_drugiej_sekwencji;
Jeśli tak jest, to wysyłasz drugą sekwencję. Jeśli nie (czyli upłynął dłuższy czas), wysyłasz znowu pierwszą sekwencję.
Spróbuj wstawić to do kodu, jeśli będziesz miał problem, napisz. Ale wtedy wstaw już swój kod, bez niego trudno będzie pomóc
Vytatas
Młodszy majsterkowicz
Posty: 2
Rejestracja: 2 lut 2018, 11:39

Re: Jak rozwiązać problem z odliczaniem?

Post autor: Vytatas » 3 lut 2018, 13:11

Dzięki za podpowiedź, udało mi się w między czasie to ogarnąć przy użyciu biblioteki Timers, Pana Łukasza Tretyna(niestety jako nowy użytkownik nie mam możliwości wkleić linku). Dopasowałem czasy odliczania i działa jak chciałem. Ale wielkie dzięki za zainteresowanie.

P.S. O funkcji millis() słyszałem, aczkolwiek nigdy nie używałem.
ODPOWIEDZ

Strony partnerskie: