logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Arduino wykonywanie różnych poleceń jednym klawiszem

matix6582 02 Gru 2017 00:42 1275 10
REKLAMA
  • #1 16862191
    matix6582
    Poziom 10  
    Posty: 35
    Ocena: 4
    Witam
    Mam pytanie ponieważ dopiero zaczynam z arduino nie miałem z nim wcześniej za bardzo do czynienia jeżeli chodzi o elektronikę mam dość duże doświadczenie lecz akurat nie wiem jak coś niby tak prostego zrealizować przy użyciu Arduino. Opiszę krótko mój problem posiadam pilot bezprzewodowy 4 kanałowy do arduino chciał bym za pomocą niego uruchamiać 8 lini programu a nie 4. Krótko mówiąc jak zrealizować aby przetrzymaniem klawisza realizować co innego, a pojedynczym kliknięciem co innego. Czy da rade zrealizować to w Ardublock ??? Z góry dziękuję za pomoc mam nadzieje że ktoś się popisze :)
  • REKLAMA
  • #2 16862243
    rb401
    Poziom 39  
    Posty: 3002
    Pomógł: 750
    Ocena: 984
    matix6582 napisał:
    Krótko mówiąc jak zrealizować aby przetrzymaniem klawisza realizować co innego, a pojedynczym kliknięciem co innego.


    Jeśli tylko z odbiornika dostajesz stabilne sygnały o czasie trwania takim jak faktyczne przyciśnięcie przycisków, to się da bez problemu. Po prostu trzeba oprócz detekcji naciśnięcia klawisza, liczyć czas naciśnięcia i rozbudować część warunkową (zależną od tego który klawisz naciśnięty) o kryterium czasowe (krótko, długo).


    matix6582 napisał:
    Czy da rade zrealizować to w Ardublock ???


    Tu masz taką luźną propozycję, tylko stanowczo zastrzegam że nie było to testowane i mogłem się pomylić, a przede wszystkim nie jestem biegły w Ardublock .
    Również przyjąłem że np. aktywny stan z odbiornika na pin Arduino to wysoki, że odbiornik jest podłączony do konkretnych pinów (4,5,6,7) i że różnicowanie krótki, długi to pół sekundy. Nie wpisałem też konkretów obsługi poszczególnych sytuacji. Ale to wszystko sobie zmienisz na takie warunki jakie potrzebujesz.

    Dlatego opiszę też Ci ogólną koncepcję byś mógł samemu już na Twoje realia sobie samemu to ułożyć.


    Arduino wykonywanie różnych poleceń jednym klawiszem

    W głównej pętli programu (loop) znajduje się przepisanie stanu pinów do pomocniczych zmiennych (potrzebnych później) i instrukcja if, sprawdzająca czy którykolwiek sygnał jest aktywny. Jeśli żaden nie jest aktywny to pętla loop idzie sobie jałowo w kółko.

    Jeśli któryś sygnał stanie się aktywny tzn. warunek instrukcji if będzie prawdziwy, to do zmiennej t_przycisniecia zostanie wpisany millis, czyli taki sytemowy zegarek (liczący w milisekundach) a następnie program wpadnie w pustą instrukcję while, wykonywaną w kółko dopóki co najmniej jeden sygnał z odbiornika pilota jest aktywny. Jeśli przycisk zostanie puszczony to program wyjdzie z while.
    I w tym momencie od zmiennej millis (która już tutaj będzie miała inną wartość niż przedtem) zostanie odjęta jej poprzednia wartość w momencie wykrycia naciśnięcia przycisku i wpisana do zmiennej t_przycisniecia.
    W konsekwencji mamy w tym miejscu zapamiętany stan przycisków w zmiennych A,B,C,D i czas naciśnięcia w milisekundach w zmiennej t_przycisniecia.

    No i później wystarczą tylko trochę rozbudowane instrukcje if, które rozdzielają stan tych zmiennych na poszczególne przypadki, które Cię interesują.
  • REKLAMA
  • #3 16862405
    Peter134
    Poziom 18  
    Posty: 263
    Pomógł: 25
    Ocena: 65
    @rb401 co to za program?
  • REKLAMA
  • #4 16862535
    Freddy
    Poziom 43  
    Posty: 19997
    Pomógł: 1394
    Ocena: 2810
    Visuino, jeśli chodzi o to z obrazka :)
  • #5 16862800
    matix6582
    Poziom 10  
    Posty: 35
    Ocena: 4
    Dzięki za podpowiedź niestety dalej stanąłem i prosił bym o pomoc w rozwinięciu tych instrukcji If uzupełniłem sobie piny i chciał bym na początek zrealizować jednym klawiszem tak:
    jedno kliknięcie- miganie diody
    przetrzymanie klawisza- zaświecenie się diody
    I pytanie czy mógł byś mi dokonczyć to aby wszystko było na cacy hehe :)
    Potem już sobie reszte komend wpisze co ma się dziać po kliknięciu tego przetrzymaniu tego itp. Arduino wykonywanie różnych poleceń jednym klawiszemArduino wykonywanie różnych poleceń jednym klawiszem
  • #6 16862904
    Freddy
    Poziom 43  
    Posty: 19997
    Pomógł: 1394
    Ocena: 2810
    matix6582 napisał:
    pytanie czy mógł byś mi dokonczyć to aby wszystko było na cacy hehe
    ... i co jeszcze? Zaprogramowac i przynieść do domu? Regulamin - 3.1.17.
    Tu gotowców nie ma, zrób sam i poproś o pomoc, a nie wychodź z założenia, że Ci się należy.
  • #7 16862921
    matix6582
    Poziom 10  
    Posty: 35
    Ocena: 4
    Dobrze rozumiem ale to nie jest gotowiec chce tylko wiedziec jak wykonać tą zależność o to było pytanie kolega podpowiedział ale nie dokończył jak rozbudować instrukcje If widze że potrafi chciał bym aby dokończył swoją myśl. A ty kolego jeżeli chcesz mi przeszkodzić, nie potrafisz mi pomóc to mi nie utrudniaj życia. Dzięki
  • REKLAMA
  • #8 16862966
    Freddy
    Poziom 43  
    Posty: 19997
    Pomógł: 1394
    Ocena: 2810
    Był na forum temat dotyczący rozpoznawania krótkiego i długiego naciśnięcia klawisza.
  • #9 16862983
    matix6582
    Poziom 10  
    Posty: 35
    Ocena: 4
    Najwidoczniej czegoś brakowało w tych postach skoro nie znalazłem do tej pory odpowiedzi. Daj spokój dobrze ?
  • Pomocny post
    #10 16864407
    rb401
    Poziom 39  
    Posty: 3002
    Pomógł: 750
    Ocena: 984
    matix6582 napisał:
    uzupełniłem sobie piny i chciał bym na początek zrealizować jednym klawiszem tak:
    jedno kliknięcie- miganie diody
    przetrzymanie klawisza- zaświecenie się diody


    Tak jak Ty to robisz to jest nie bardzo poprawnie. Zauważ że kiedy robisz te delay to program tkwi tam jakiś czas i nie podgląda sygnałów wejściowych. Również tym sposobem możesz robić tylko krótkie sekwencje migania a wydaje mi się że chodzi Ci o miganie ciągłe.
    Jeszcze dochodzi do tego kłopot że nie można w Ardublock (jak też w klasycznym Arduino) użyć w prosty sposób przerwań zegarowych do wywoływania swoich funkcji.
    Dlatego trzeba trochę się pogimnastykować i podejrzewam że nie dał byś sobie rady.

    Tak że niestety dam Ci jednak gotowca (sorki kolego Freddy), którego sprawdziłem praktycznie na Arduino by wychwycić błędy i nie wprowadzać Cię w błąd:

    Arduino wykonywanie różnych poleceń jednym klawiszem


    pętla główna programu wykonuje się szybko w kółko i nie ma tam żadnych delay.
    A sterowaniem ledem zajmuje się osobna funkcja akt_led wywoływana gęsto w programie i ustalająca każdorazowo na podstawie wartości zmiennej stan_led1, w jaki stan ustawić pin ledy (11). Jeśli potrzebne by były następne ledy to wystarczy dorzucić następną zmienną np. stan_led2 a w funkcji akt_led powielić treść zmieniając tylko numer pinu i nazwę zmiennej.

    I teraz sterowanie Led z pętli głównej (tych ifów na dole) wygląda tak że modyfikuje się tylko wartość zmiennej stan_led gdzie 0-nie świeci, 1-miga, 2-świeci ciągle. A resztę w sposób automagiczny załatwia funkcja akt_led.

    Jeśli będziesz wprowadzał poprawki do tego co masz napisane, to zwróć uwagę
    na dwukrotne wstawienie wywołania akt_led, na brak klocka "not" w warunku pętli while (mój błąd), i Twój błąd w tym dolnym if/else "t_przycisniecia>=500" bo masz błednie "!=".

    Na wszelki wypadek dam tu też źródła (w zipie) test.zip (3.04 kB)Musisz być zalogowany, aby pobrać ten załącznik. ale nie wiem czy u Ciebie zadziałają bo mam jakąś bardzo starą wersję Ardublock.
  • #11 16865426
    matix6582
    Poziom 10  
    Posty: 35
    Ocena: 4
    Dziękuję ci kolego rb401 program działa idealnie pouzupełniałem sobie tak jak chciałem i działa bez zająknięcia :) Jest nawet lepiej niż idealnie. Dzięki bardzo oczywiście klikam pomógł mi.

Podsumowanie tematu

✨ Użytkownik zadał pytanie dotyczące wykorzystania pilota bezprzewodowego 4-kanałowego do Arduino w celu uruchamiania 8 linii programu. Chciałby, aby jedno kliknięcie przycisku powodowało miganie diody, a przytrzymanie klawisza - jej zaświecenie. Odpowiedzi sugerowały, że można to zrealizować poprzez detekcję czasu naciśnięcia klawisza oraz odpowiednie rozbudowanie instrukcji warunkowych. Użytkownik otrzymał pomoc w postaci gotowego kodu, który działał poprawnie, co pozwoliło mu na dalsze modyfikacje i rozwój projektu.
Wygenerowane przez model językowy.
REKLAMA