Elektroda.pl
Elektroda.pl
X
BotlandBotland
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Arduino - jeden przycisk różne czynności w zależności od czasu przytrzymania

20 Lut 2015 19:29 2157 5
  • Poziom 8  
    Witam. Nie mogą sobie poradzić z następującym problemem. Chciałbym aby mając jeden przycisk wykonywały się następujące czynności tzn. naciskam przycisk - servo obraca się na pozycję 30 stopni, naciskam przycisk przez powiedzmy 5sekund - servo obraca się na pozycję 120 stopni.

    Znalazłem taki kod, jednakże nie wiem jak go przekształcić na moje potrzeby(w którym miejscu zdefiniować daną czynność).
    Spoiler:
    Kod: c
    Zaloguj się, aby zobaczyć kod


    Dodam na koniec że posiadam Arduino Mega 2560, a serwo to Tower Pro SG90
    Darmowe szkolenie: Ethernet w przemyśle dziś i jutro. Zarejestruj się za darmo.
  • BotlandBotland
  • Poziom 9  
    Nie programuje w arduino, ale pisałem program w C, w którym używam 3 przycisków, przy czym za pomocą każdego z nich mogę wykonać 3 różne akcje.

    Ustaw przerwanie od wybranego timera np.co 10[ms], następnie sprawdzaj stan przycisku, jeżeli wykryjesz naciśniecie przycisku to zwiększaj jakąś zmienną będącą licznikiem. Gdy przycisk zostanie zwolniony, to na podstawie wartości licznika, ustawiasz odpowiednią flagę np. po 300[ms] ustawiasz flagę krótkiego przytrzymania przycisku, która powoduje obrócenie serwa o 30[deg], a po 1000[ms] flagę dłuższego przytrzymania przycisku itp.

    Jest to nietrudne do napisania, w moim przypadku się sprawdza, jakiś większych nieprawidłowości w działaniu nie zauważyłem.
  • BotlandBotland
  • Poziom 8  
    Mógłbyś wstawić twój kod będzie mi trochę łatwiej, ponieważ Arduino zajmuję się od stycznia więc jeszcze do końca nie wiem co i jak, a z przekształceniem twojego kodu z C na Arduino raczej nie będę miał większych problemów(mam nadzieję).
  • Poziom 11  
    Nie musisz wynajdywać koła na nowo. Poszukaj w necie odpowiedniej biblioteki do twojego rodzaju klawiatury. Niektóre oferują bardzo ciekawe ficzery, jak np. non-blocking, kilka eventów pod jednym przyciskiem, w zależności od czasu przytrzymania itp. Jest ich sporo, musisz potestować.
  • Poziom 9  
    pp190897 napisał:
    Mógłbyś wstawić twój kod będzie mi trochę łatwiej, ponieważ Arduino zajmuję się od stycznia więc jeszcze do końca nie wiem co i jak, a z przekształceniem twojego kodu z C na Arduino raczej nie będę miał większych problemów(mam nadzieję).


    W najprostszej wersji podglądowej, dla obsługi przerwania:

    Kod: c_loadrunner
    Zaloguj się, aby zobaczyć kod


    a w pliku main:

    Kod: c_loadrunner
    Zaloguj się, aby zobaczyć kod


    Jest to tylko kod podglądowy, resztę musisz sam dopisać, ale o idee działania chodzi przecież. Ustaw częstotliwość przerwań wybranego timera na ok. 100[Hz], dopisz resztę, powinno działać.