Skocz do zawartości

Złożony problem z przyciskami


bear

Pomocna odpowiedź

Cześć wszystkim,

zaczynam swoją przygodę z Arduino UNO, przeczytałem kurs Forbot'a ale mam problem z dość złożonym układem.

1. Potrzebuje sterować dwoma parami wyjść czyli AB i CD za pomocą 4 włączników S1/S2 oraz S3/S4. Problem polega na tym ze w jednej parze może być załączone na raz tylko jedno wyjście czyli w parze AB albo wyjście A albo wyjście B, nigdy oby dwa na raz i tak samo w parze CD.

2. Problem się o tyle komplikuje że wybrane wyjścia z par AB i CD muszą się włączyć w jednym czasie.

Czyli z pary AB wybieramy wyjście A lub B ale nic się nie dzieje dopóki z pary CD nie wybierzemy wyjścia C lub D. Dopiero po wyborze dwóch pojawia się odpowiedni stan na wybranych wyjściach.

Pomożecie w jakiś sposób, podrzucicie chociaż jakiś przykład który dało by się zmodyfikować?

Będę niezmiernie wdzięczny za pomoc.

Link do komentarza
Share on other sites

Twoja konstrukcja to prawie jak mostek H.

muszą się włączyć w jednym czasie

Jak się tak zastanowić to jest to praktycznie niemożliwe. Nawet dwa tranzystory sterowane jednocześnie pewnie będą miały różne czasy przełączania.

Swoją droga poczytaj o podstawowych funktorach logicznych to powinno cie naprowadzić na trop. Pytanie klucz czym jest dla Ciebie odpowiedni stan?

Pozdrawiam,

Link do komentarza
Share on other sites

O ile ja rozumiem, to wymaganie o włączaniu jednocześnie nie dotyczy czasów w pikosekundach i wystarczy, że będą to kolejne instrukcje mikrokontrolera Arduino. Natomiast problem to napisanie programu, który wyjścia wysteruje dopiero po naciśnięciu przycisków z obu par.

Program jest bardzo prosty, więc nie ma się co bać - na początek podpowiem, że warto zadeklarować dwie zmienne - jedną dla pierwszej pary, drugą dla drugiej. Naciskając przycisk ustawiasz wartość zmiennej, ale nie ruszsz wyjścia. Dopiero jak obie zmienne będa ustawione wtedy sterujesz wyjściami.

Link do komentarza
Share on other sites

Albo cztery zmienne jako stan czterech przycisków. I wtedy gdy warunek:

(A ^^ B) && (C ^^ D)

jest spełniony, to przepisujesz wszystkie ABCD na wyjścia. W przeciwnym razie nic nie robisz (tylko jeszcze raz wczytujesz wejścia, sprawdzasz warunek i tak w kółko..).

A gdybyś wczytał stany przycisków do czterech zmiennych A, B, C, D typu uint8_t na ich np. najmłodsze bity, wtedy wyrażenie upraszcza się do postaci:

(A ^ B) & (C ^ D)

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

marek1707, mamy cztery wyjścia (A, B, C, D), i cztery wejścia (S1, S2, S3, S4) - oczywiście da się to opisać równaniami, ale to nie FPGA - jeśli ktoś zaczyna przygodę z programowaniem Arduino, mały if będzie chyba dużo łatwiejszy.

  • Pomogłeś! 1
Link do komentarza
Share on other sites

Przecież nie piszę nic o równaniach wzbudzeń wyjść. Właśnie zaproponowałem "jeden mały if" będący częścią algorytmu procesora a nie czymś co bezpośrednio definiuje stan któregokolwiek wyjścia.

Wczytujesz stany wejść → sprawdzasz warunek i jeśli spełniony → zmieniasz stan wyjść.

Źle coś? Przecież na końcu i tak masz uaktualnić wszystkie wyjścia lub żadne, więc musisz mieć globalną decyzję o poprawności wszystkich wejść. Tego dotyczył mój warunek, bo to kluczowa decyzja w kodzie: wejścia A i B muszą być różne i jednocześnie wejścia C i D także różne.

Mam pojedynczymi if-ami sprawdzać kombinacje stanów czy jak? To może zaproponuj koledze jakieś jedynie poprawne rozwiązanie nie używające rzecz jasna wyrażeń logicznych, śmierdzących na odległość FPGA.

Link do komentarza
Share on other sites

Marku nie złość się od razu - może trochę inaczej zrozumieliśmy to zadanie. Pierwsza sprawa to nazwy wejść i wyjść. W opisie ABCD to wyjścia, S1-S4 to wejścia, chociaż to nieistotne. Chodzi o sposób wyboru - nie jestem pewien, ale ja zrozumiałem to tak:

1) użytkownik wybiera powiedzmy dla pary AB wyjście aktywne B naciskając S2

2) po jakimś czasie naciska S3 i wybiera aktywne wyjście C z pary CD

Dopiero teraz następuje wysterowanie wyjść, czyli ABCD powinno mieć stan 0110

Oczywiście można zmienić zadanie i przyjąć że przyciski S1/S2 oraz S3/S4 muszą być naciśnięte jednocześnie - wtedy jest łatwiej i faktycznie zmienne nie są potrzebne.

Link do komentarza
Share on other sites

To swego rodzaju zgadywanka o co chodzi pytającemu. Jeśli bear poczytałeś o sugerowanych przeze mnie podstawowych funktorach logicznych to z pewnością zauważyłeś, że ich działanie można opisać tzw. tabelą stanów. W Twoim przypadku mogłaby ona wyglądać tak:

Rozpisz w takiej tabeli to czego oczekujesz. Kiedy, na jakim wyjściu i co się ma pojawić. Nie będziemy musieli zgadywać jak Twoje urządzenie ma działać i o co Ci chodzi. Taka tabela mówi wszystko.

Link do komentarza
Share on other sites

Elvis: Tak, masz rację. Jeśli będą to zwykłe przyciski chwilowe a nie przełączniki dwustanowe to trzeba jeszcze dodać na wejściu analizator zapamiętujący ostatnie decyzje użytkownika. No ale wtedy potrzebna jest też sygnalizacja stanu tego co komputer uznaje za obecnie obowiązujący wybór. Być może stan wyjść jest właśnie taką sygnalizacją.

Jeszcze jednym rozwiązaniem jest nakazanie wciśnięcia dwóch na raz, po jednym z obu grup. Po puszczeniu choćby jednego, aktualy stan wyjść zostaje utrzymany do następnego razu tj. ponownego wykrycia poprawnego wciśnięcia dwóch na raz. Ale to chyba jest to, co opisałem na początku: wczytanie stanu, test poprawności i przesłanie wejść na wyjścia.

Belferek: Nie, bo nie uwzględnia stanów i historii, np. w przypadku przycisków chwilowych nie pokaże działania urządzenia a tylko jego mały fragment.

Do siebie: Ciekawe czy takie bajdy w ogóle komuś pomagają?

Link do komentarza
Share on other sites

Możesz kupić przyciski które są monostabilne (chwilowe), które zwierają tylko na czas wciśnięcia i takie, które zostają zwarte do czasu ponownego przyduszenia. Nie wiemy których che użyć Autor. W przypadku tych pierwszych komputer musi rozpoznawać sytuację, w której właśnie widzi na wejściu odpowiednią kombinację, ustawiać wyjścia i zapamiętywać ten stan mimo, iż stan wejść stał się już (wg Twojej tablicy) niepoprawny.

Link do komentarza
Share on other sites

Rozumiem - do tej pory posługiwałem się pojęciami przycisków mono i bistabilnych. Myślałem, że to jakieś inne 🙂

W przypadku tych pierwszych komputer musi rozpoznawać sytuację, w której właśnie widzi na wejściu odpowiednią kombinację, ustawiać wyjścia i zapamiętywać ten stan mimo, iż stan wejść stał się już (wg Twojej tablicy) niepoprawny.

Troszeczkę moim zdaniem zaciemniasz sytuację wchodząc w szczegóły programu w sytuacji gdy nie wiemy jakich przycisków chce autor użyć. Wystarczy powiedzieć, że w zależności od rodzaju zastosowanego przycisku inaczej wygląda jego obsługa programowa. Mimo, iż mówimy przycisk monostabilny to dla programu istotne są dwa stany tego przycisku WCIŚNIĘTY i ZWOLNIONY. Podłączając dowolny przycisk do Arduino mówimy więc o stanie 1 lub 0 na porcie, do którego został on podłączony. Taką sytuację bardzo ładnie można przedstawić w tabeli stanów. Jak natomiast program Arduino zrealizuje pokazane w tej tabeli zależności to inna kwestia, której rozwiązanie zależy chociażby od rodzaju przycisków - mono czy bistabilne i od założeń autora - jak szybko odczytywać przyciski, co w sytuacji zakleszczenia przycisku, czy historia jest potrzebna czy nie itd. Dlatego będę się upierał, że doprecyzowanie postu przez bear podając rodzaj przycisków i tabelę stanów jaką proponuję rozwieje wątpliwości o co autorowi chodzi.

Link do komentarza
Share on other sites

Belferek, tabela którą podajesz ma sens tylko jeśli jest to układ czysto kombinacyjny. Natomiast jeśli chcemy mieć możliwość wyboru wyjść w różnych momentach (czyli gdy naciskamy przycisk z drugiej pary, pierwszy jest już zwolniony), wtedy taka tabela nie wystarczy. Można oczywiście wszystko opisać za pomocą tabel i siatek Karnaugh, ale to chyba komplikowanie banalnego problemu (stąd była moja uwaga o FPGA, ale wynikała ze złego zrozumienia, więc ja wycofuję).

Ogólnie jestem pod wielkim wrażeniem tematu - problem jest banalny i słowo "złożony" wyglądało na mocno przesadzone. Ale wywiązała się taka dyskusja, że temat faktycznie zaczyna być skomplikowany. Internet to jednak przedziwne medium - na trudne pytania można uzyskać odpowiedź w kilka minut, a banalne tematy wywołują *burze ciągnące się w nieskończoność.

Chyba nie ma sensu dyskutowanie rozwiązań dopóki autor wątku nie sprecyzuje co chce uzyskać.

[ Dodano: 10-02-2018, 13:29 ]

Właśnie do mnie dotarło, że ta tabelka nie ma sensu nawet jeśli zakładamy zmianę tylko przy jednoczesnym przyciśnięciu obu przycisków. W każdym razie - musimy chyba poczekać na sprecyzowanie zadania.

Link do komentarza
Share on other sites

Natomiast jeśli chcemy mieć możliwość wyboru wyjść w różnych momentach (czyli gdy naciskamy przycisk z drugiej pary, pierwszy jest już zwolniony), wtedy taka tabela nie wystarczy.

No i tu znowu wracamy do pytania jakich przycisków BEAR chce użyć? Nawet dla monostabilnych można to pokazać tak:

Taka tabela nie przedstawia w czytelny sposób założeń jak sterować wyjściami w zależności od kombinacji czterech przycisków?

Link do komentarza
Share on other sites

Jeśli S1-S4 to nie stan tylko wejścia przycisków, to niestety ta tabelka nie wystarczy do opisania układu.

[ Dodano: 10-02-2018, 13:38 ]

Ok, jak napisałem - wystarczy, o ile to układ kombinacyjny. Ale to wydaje mi się zbytnim uproszczeniem. Musimy więcej wiedzieć o samym zadaniu, żeby je rozwiązać.

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.