Skocz do zawartości

Złożony problem z przyciskami


bear

Pomocna odpowiedź

Belferek, mamy dużo nieporozumień, bo chyba każdy z nas inaczej rozumie treść tego zadania. Ja widzę co najmniej trzy:

1) czysto kombinacyjne zadanie, czyli mamy 4 przyciski, jeśli naciśniemy dokładnie jeden z pierwszej pary i jeden z drugiej uzyskujemy stan na wyjściu - po ich zwolnieniu wyjście jest wyłączane

2) układ o którym chyba pisał Marek: jeśli naciśniemy dokładnie jeden przycisk z pierwszej pary i jeden z drugiej, ustawiany jest stan wyjścia i jest utrzymywany do momentu gdy oba przyciski zostaną ponownie przyciśnięte

3) moja wersja - użykownik naciska jeden przycisk i to zostaje zapamiętane, gdy przyciśnie drugi układ daje na wyjściu określony stan. Stan jest pamięany, od tego momentu jedno naciśnięcie zmienia wyjście

Jeśli są inne propozycje zrozumienia tego zadania, zapraszam do podzielenia się 🙂 Niesamowite jak proste rzeczy można skomplikować.

Link do komentarza
Share on other sites

Dziękuje za tak obszerne wypowiedzi.

Przechodząc do tematu to czas włączania obu wyjść może być być różny w czasie milisekund i tutaj prędkość pętli jest wystarczająca. Kolega Elvis przetłumaczył to dość czytelnie czyli:

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

Dodam tylko że oby dwa wyjścia z pary AB nie mogą być na raz wysterowane czyli albo A albo B i dalej albo C albo D. Po wysterowaniu wyjść układ się resetuje.

P

Co do przycisków to będą to dokładnie przełączniki kołyskowe stałe o połączeniu 0-1 czyli albo włączone albo wyłączone.

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

Ok - to kolejne pytanie.

Na wejściu jest stan 0110, wtedy na wyjściu jest 0110.

Co się stanie jeśli użytkownik załączy S1, czyli na wejściu będzie: 1110 - ma być poprzeni stan (0110), czyli wyłączenie (0000). To samo jeśli wyłączy S2 - na wejściu 0010 - wracamy do 0000, czy zostaje 0110?

Link do komentarza
Share on other sites

Stan wejść to 0110, użytkownik do momentu wysterowania wyjść może je dowolnie modyfikować czyli z 0110 może zmienić stan wejścia z S2 na S1 co przełoży się na stan 1010. W momencie wysterowania wyjść nie może już nic zmienić.

Powiedzmy że pomiędzy wysterowaniem wejść a wysterowaniem wyjść mamy czas X zwłoki do ewentualnego "zastanowienia się". Tak może będzie to czytelniejsze.

Link do komentarza
Share on other sites

O nie, dodanie zwłoki to kolejny poziom trudności 🙂

Może zostańmy przy wersji, że stan wyjścia ustala się natychmiast.

Mamy więc taki scenariusz:

1. zaczynamy od wszystkich przełączników wyłączonych S1S2S3S4 = 0000, na wyjściach są zera ABCD = 0000

2. użytkownik włącza S2, na wyjściu nic się nie zmienia, czyli wejście 0100, wyjście 0000

3. użytkownik włącza S3, ustawiane są wyjścia B i C, czyli wejście 0110, wyjście 0110

Co będzie jeśli teraz użytkownik coś przestawi?

Link do komentarza
Share on other sites

Nic się nie stanie bo układ już wysteruje wyjścia i się zresetuje czekając na ponowne wysterowanie wyjść.

Jeśli będziemy zmieniać stan wejść z 0110 na 1010 PRZED wysterowaniem wyjść to układ zapamiętuje ostatnią kombinację. Po wysterowaniu wyjść już nic nie można zrobić.

Link do komentarza
Share on other sites

Brzmi jak układ do dopalania rakiet blistycznych, na pewno nie pracujesz dla Kima?

Ale na to chyba nie wpadliśmy, że układ raz ustawiony ma już w tym stanie zostać na zawsze... Chociaż wiadomo co trzeba zrobić 🙂

Link do komentarza
Share on other sites

Dokładnie do rakiet ziemia-zmienia 🤣

Widzę że w programowaniu bardziej ogranicza człowieka wyobraźnia bo osobiście nie potrafię tego przełożyć na kod.

Sam zamysł rozumiem i z wysterowaniem nie powinno być aż takich problemów bo wystarczy czekać na spełnienie dwóch warunków ale za piernika nie mogę dojść jak rozgryźć temat z odczytywaniem stanów wejść i sprawdzać który był "ostatni". Będę walczył

Link do komentarza
Share on other sites

Stany wejść? To chyba zwykłe piny na arduino, więc coś jak digitalRead(). Odczytujesz 4 piny i już masz stan wejść.

Musisz po pierwsze pamiętać, czy już odpaliłeś rakiety - jeśli tak, to nawet nie ma co pinów odczytywać.

Więc jedna zmianne bool - czy już odpalone, do tego odczyt 4 pinów i ułożenie warunków dla układu czysto kombinacyjnego. Prosta sprawa.

[ Dodano: 10-02-2018, 14:27 ]

Możesz na kartce rozpisać wszystkie przypadki, kiedy chcesz dopalać rakiety.

Tabelka to dobre rozwiązanie, ale ja jestem leniwy, więc napiszę w skrócie:

S1S2S3S4 ABCD

1 0 1 0 1010

0 1 1 0 0110

1 0 0 1 1001

0 1 0 1 0101

Możesz z tego zrobić 4 if-y, lub jednego if-a i wyrażenie dla każdego wyjścia - jak chcesz.

Link do komentarza
Share on other sites

sprawdzać który był "ostatni"

A po co to sprawdzać skoro wyjścia według tego co piszesz mają się uaktywaniać po ustaleniu stanu dwóch przycisków? Moim zdaniem tu sekwencja S1S2==S2S1

Tabelka to dobre rozwiązanie, ale ja jestem leniwy, więc napiszę w skrócie:

S1S2S3S4 ABCD

Czyżbym widział tabelę stanów, która była taka zła?

Link do komentarza
Share on other sites

Belferek, tabelka którą proponowałeś nie uwzględniała pamiętania że po "odpaleniu" układu jego stan jest stały i niezmienny. Dlatego była "zła". Ale to oczywiście bardzo dobre narzędzie, chociaż nie zawsze idealne - tutaj ma sens dla fragmentu kombinacyjnego, ale opisywanie nią całego układu byłoby skompliowane.

Link do komentarza
Share on other sites

Skleciłem takie coś i o dziwo działa, po wysterowaniu dwóch wejść na raz nic się nie dzieje i można by to wstępnie przyjąć. Bardzo słabo to wygląda?

if(przycisk1 == LOW && przycisk2 == HIGH)  
 {
   Stan1 = true;
   Serial.println(F("Stan1"));
 } 
 else if(przycisk2 == LOW && przycisk1 == HIGH)  
 {
   Stan2 = true;
   Serial.println(F("Stan2"));
 }

 if(przycisk3 == LOW && przycisk4 == HIGH)  
 {
   Stan3 = true;
   Serial.println(F("Stan3"));
 } 
 else if(przycisk4 == LOW && przycisk3 == HIGH) 
 {
   Stan4 = true;
   Serial.println(F("Stan4"));
 }
Link do komentarza
Share on other sites

bear może ja nie jestem programistą guru ale kilka programów już popełniłem i muszę powiedzieć, że mimo chęci zrozumienia Twoich myśli nie jestem w stanie. Już dwukrotnie Ci proponowano byś przedstawił w postaci tabeli zależności jakie ma spełnić Twój program w odniesieniu do stanów S1-S4, a ty po swojemu.

Piszesz, że "popełniłeś" program , który działa i chcesz odpowiedzi czy jest OK czy SŁABO lecz pokazujesz jakiś fragment i każesz zgadywać co się kryje np. pod F("Stan1") - tylko Ty wiesz. Jeśli program działa i spełnia Twoje oczekiwania to chyba o to Ci chodziło więc program jest OK.

Oczywiście masz idealne przyciski, które "nie drgają" i nie spodziewasz się przypadkowych ich stanów tak jak to często bywa w rzeczywistości,. Przy ich naciskaniu użytkownik się nigdy nie pomyli i nie ma potrzeby anulowania wyboru bądź jego zatwierdzania itd.

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.