Skocz do zawartości

bear

Użytkownicy
  • Zawartość

    9
  • Rejestracja

  • Ostatnio

Informacje

  • Płeć
    Mężczyzna

Osiągnięcia użytkownika bear

Odkrywca

Odkrywca (4/19)

  • Za 5 postów
  • Młodszy Juror
  • To już rok!
  • To już 5 lat!

Odznaki

0

Reputacja

  1. bear

    Złożony problem z przyciskami

    Dziękuje Ci bardzo za odpowiedź, na początku chcę zrobić to tak aby mi to chodziło pod każdym aspektem. Oczywiście twoja propozycja jest dobra co do przycisków ale problem leży w tym że to ja muszę się "dostosować" do chociażby przełączników a nie one do mnie stąd 4 a nie dwa. W każdym razie rozszerzyłem swój kod o dalszą funkcję ale mam mały problem z którym nie mogę sobie poradzić. Cóż, dalsza część kodu sprawdza którą kombinację przycisków wybraliśmy i zależnie od tego załącza wybrane wyjścia jednoczenie blokując możliwość wyboru np. dwóch wyjść z jednej pary. To wszystko wrzuciłem w pętle while oraz dodałem element "Wyjscie" który jest odpowiedzialny za odliczanie czasu, wyłączenie wyjść po X czasie i wrócenie na początek pętli oczekując na kombinację. Problem leży w tym że po wyborze kombinacji, załączeniu wyjść i ich wyłączeniu po ustalonych 5s program prawdopodobnie zapamiętuje stan wejść i powtarza kod w kółko czyli sam załącza od nowa te same wyjście, odczekuje X czasu, wyłącza je i od nowa załącza i tak w kółko. W czym leży problem? int przekaznik1 = 2; //przekaznik1 podĹ‚Ä…czamy do pinu 2 int przekaznik2 = 3; //przekaznik2 podĹ‚Ä…czamy do pinu 3 int przekaznik3 = 4; //przekaznik1 podĹ‚Ä…czamy do pinu 4 int przekaznik4 = 5; //przekaznik1 podĹ‚Ä…czamy do pinu 5 int przekaznik5 = 6; //przekaznik1 podĹ‚Ä…czamy do pinu 6 int przekaznik6 = 7; //przekaznik1 podĹ‚Ä…czamy do pinu 7 int przycisk1 = 8; //przycisk1 podĹ‚Ä…czamy do pinu 8 int przycisk2 = 9; //przycisk2 podĹ‚Ä…czamy do pinu 9 int przycisk3 = 10; //przycisk1 podĹ‚Ä…czamy do pinu 10 int przycisk4 = 11; //przycisk1 podĹ‚Ä…czamy do pinu 11 int przycisk5 = 12; //przycisk1 podĹ‚Ä…czamy do pinu 12 int przycisk6 = 13; //przycisk1 podĹ‚Ä…czamy do pinu 13 boolean Stan1; boolean Stan2; boolean Stan3; boolean Stan4; boolean Wyjscie; boolean End; void setup() { pinMode(przekaznik1, OUTPUT); //przekaznik1 jako wyjĹ›cie pinMode(przekaznik2, OUTPUT); //przekaznik2 jako wyjĹ›cie pinMode(przekaznik3, OUTPUT); //przekaznik3 jako wyjĹ›cie pinMode(przekaznik4, OUTPUT); //przekaznik4 jako wyjĹ›cie pinMode(przekaznik5, OUTPUT); //przekaznik5 jako wyjĹ›cie pinMode(przekaznik6, OUTPUT); //przekaznik6 jako wyjĹ›cie pinMode(przycisk1, INPUT_PULLUP); //przycisk1 jako wejĹ›cie pinMode(przycisk2, INPUT_PULLUP); //przycisk2 jako wejĹ›cie pinMode(przycisk3, INPUT_PULLUP); //przycisk3 jako wejĹ›cie pinMode(przycisk4, INPUT_PULLUP); //przycisk4 jako wejĹ›cie pinMode(przycisk5, INPUT_PULLUP); //przycisk5 jako wejĹ›cie pinMode(przycisk6, INPUT_PULLUP); //przycisk6 jako wejĹ›cie digitalWrite(przekaznik1, LOW); //stan poczÄ…tkowy przekaznika1 niski digitalWrite(przekaznik2, LOW); //stan poczÄ…tkowy przekaznika2 niski digitalWrite(przekaznik3, LOW); //stan poczÄ…tkowy przekaznika3 niski digitalWrite(przekaznik4, LOW); //stan poczÄ…tkowy przekaznika4 niski digitalWrite(przekaznik5, LOW); //stan poczÄ…tkowy przekaznika5 niski digitalWrite(przekaznik6, LOW); //stan poczÄ…tkowy przekaznika6 niski Wyjscie = false; Serial.begin(9600); //PrÄ™dkość komunikacji z portem } void loop() { Serial.println(F("loop")); while(Wyjscie = true) { int przycisk1 = digitalRead(8); //Odczytuje stan wejscia 1 int przycisk2 = digitalRead(9); //Odczytuje stan wejscia 2 int przycisk3 = digitalRead(10); //Odczytuje stan wejscia 3 int przycisk4 = digitalRead(11); //Odczytuje stan wejscia 4 delay(1000); if(przycisk1 == LOW && przycisk2 == HIGH) { Stan1 = true; Stan2 = false; Serial.println(F("Stan1")); } else if(przycisk2 == LOW && przycisk1 == HIGH) { Stan2 = true; Stan1 = false; Serial.println(F("Stan2")); } if(przycisk3 == LOW && przycisk4 == HIGH) { Stan3 = true; Stan4 = false; Serial.println(F("Stan3")); } else if(przycisk4 == LOW && przycisk3 == HIGH) { Stan4 = true; Stan3 = false; Serial.println(F("Stan4")); } if(Stan1 == true && Stan2 == false && Stan3 == true && Stan4 == false) { Serial.println(F("Wysterowanie wyjĹ›cia 1 i 3")); digitalWrite(przekaznik1, HIGH); digitalWrite(przekaznik2, LOW); digitalWrite(przekaznik3, HIGH); digitalWrite(przekaznik4, LOW); Wyjscie = false; } if(Stan1 == true && Stan2 == false && Stan3 == false && Stan4 == true) { Serial.println(F("Wysterowanie wyjĹ›cia 1 i 4")); digitalWrite(przekaznik1, HIGH); digitalWrite(przekaznik2, LOW); digitalWrite(przekaznik3, LOW); digitalWrite(przekaznik4, HIGH); } if(Stan1 == false && Stan2 == true && Stan3 == true && Stan4 == false) { Serial.println(F("Wysterowanie wyjĹ›cia 2 i 4")); digitalWrite(przekaznik1, LOW); digitalWrite(przekaznik2, HIGH); digitalWrite(przekaznik3, HIGH); digitalWrite(przekaznik4, LOW); } if(Stan1 == false && Stan2 == true && Stan3 == false && Stan4 == true) { Serial.println(F("Wysterowanie wyjĹ›cia 2 i 4")); digitalWrite(przekaznik1, LOW); digitalWrite(przekaznik2, HIGH); digitalWrite(przekaznik3, LOW); digitalWrite(przekaznik4, HIGH); } if(Wyjscie == false) { Serial.println(F("Wyjscie")); delay(5000); digitalWrite(przekaznik1, LOW); digitalWrite(przekaznik3, LOW); break; } delay (1000); } }
  2. bear

    Złożony problem z przyciskami

    Już się słucham. Tak wygląda zależność, przy próbie wysterowania dwóch wyjść nic się nie dzieje. Tutaj cały kod, jest to dopiero poczatek. StanX służy do określenia stanu który ma później posłużyć do załączania odpowiedniego wyjścia. Tak sobie to wymyśliłem ale nie wiem czy dobrze. int przekaznik1 = 2; //przekaznik1 podĹ‚Ä…czamy do pinu 2 int przekaznik2 = 3; //przekaznik2 podĹ‚Ä…czamy do pinu 3 int przekaznik3 = 4; //przekaznik1 podĹ‚Ä…czamy do pinu 4 int przekaznik4 = 5; //przekaznik1 podĹ‚Ä…czamy do pinu 5 int przekaznik5 = 6; //przekaznik1 podĹ‚Ä…czamy do pinu 6 int przekaznik6 = 7; //przekaznik1 podĹ‚Ä…czamy do pinu 7 int przycisk1 = 8; //przycisk1 podĹ‚Ä…czamy do pinu 8 int przycisk2 = 9; //przycisk2 podĹ‚Ä…czamy do pinu 9 int przycisk3 = 10; //przycisk1 podĹ‚Ä…czamy do pinu 10 int przycisk4 = 11; //przycisk1 podĹ‚Ä…czamy do pinu 11 int przycisk5 = 12; //przycisk1 podĹ‚Ä…czamy do pinu 12 int przycisk6 = 13; //przycisk1 podĹ‚Ä…czamy do pinu 13 boolean Stan1; boolean Stan2; boolean Stan3; boolean Stan4; void setup() { pinMode(przekaznik1, OUTPUT); //przekaznik1 jako wyjĹ›cie pinMode(przekaznik2, OUTPUT); //przekaznik2 jako wyjĹ›cie pinMode(przekaznik3, OUTPUT); //przekaznik3 jako wyjĹ›cie pinMode(przekaznik4, OUTPUT); //przekaznik4 jako wyjĹ›cie pinMode(przekaznik5, OUTPUT); //przekaznik5 jako wyjĹ›cie pinMode(przekaznik6, OUTPUT); //przekaznik6 jako wyjĹ›cie pinMode(przycisk1, INPUT_PULLUP); //przycisk1 jako wejĹ›cie pinMode(przycisk2, INPUT_PULLUP); //przycisk2 jako wejĹ›cie pinMode(przycisk3, INPUT_PULLUP); //przycisk3 jako wejĹ›cie pinMode(przycisk4, INPUT_PULLUP); //przycisk4 jako wejĹ›cie pinMode(przycisk5, INPUT_PULLUP); //przycisk5 jako wejĹ›cie pinMode(przycisk6, INPUT_PULLUP); //przycisk6 jako wejĹ›cie digitalWrite(przekaznik1, LOW); //stan poczÄ…tkowy przekaznika1 niski digitalWrite(przekaznik2, LOW); //stan poczÄ…tkowy przekaznika2 niski digitalWrite(przekaznik3, LOW); //stan poczÄ…tkowy przekaznika3 niski digitalWrite(przekaznik4, LOW); //stan poczÄ…tkowy przekaznika4 niski digitalWrite(przekaznik5, LOW); //stan poczÄ…tkowy przekaznika5 niski digitalWrite(przekaznik6, LOW); //stan poczÄ…tkowy przekaznika6 niski Serial.begin(9600); //PrÄ™dkość komunikacji z portem } void loop() { int przycisk1 = digitalRead(8); //Odczytuje stan wejscia 1 int przycisk2 = digitalRead(9); //Odczytuje stan wejscia 2 int przycisk3 = digitalRead(10); //Odczytuje stan wejscia 3 int przycisk4 = digitalRead(11); //Odczytuje stan wejscia 4 if(przycisk1 == LOW && przycisk2 == HIGH) { Stan1 = true; Stan2 = false; Serial.println(F("Stan1")); } else if(przycisk2 == LOW && przycisk1 == HIGH) { Stan2 = true; Stan1 = false; Serial.println(F("Stan2")); } if(przycisk3 == LOW && przycisk4 == HIGH) { Stan3 = true; Stan4 = false; Serial.println(F("Stan3")); } else if(przycisk4 == LOW && przycisk3 == HIGH) { Stan4 = true; Stan3 = false; Serial.println(F("Stan4")); } delay(1000); }
  3. bear

    Złożony problem z przyciskami

    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")); }
  4. bear

    Złożony problem z przyciskami

    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ł
  5. bear

    Złożony problem z przyciskami

    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ć.
  6. bear

    Złożony problem z przyciskami

    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.
  7. bear

    Złożony problem z przyciskami

    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.
  8. 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.
×
×
  • 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.