Skocz do zawartości

Zagadka zręcznościowa z ograniczonym czasem na reakcję


stasiu140

Pomocna odpowiedź

Hej, mam problem.  Kombinuje już trzeci dzień i nic nie idzie tak jak powinno. Będzie to mój pierwszy wpis także proszę o wyrozumiałość bo jestem samoukiem. Chodzi to żeby magnes na końcu wyłączył się po wykonaniu ustalonej kombinacji ruchów ( w tym przypadku wciśnięcie po kolei trzech guzików). Ale chce żeby czas na wciśnięcie każdego guzika był ograniczony. Czyli po wciśnięciu pierwszego mamy np 2 sekundy na naciśnięcie drugiego. Jak uda się wcisnąć drugi w wyznaczonym czasie to mamy kolejne 2 sekundy na wciśnięcie trzeciego. Jeżeli nie zdążymy wcisnąć któregoś guzika w czasie to wracamy do punktu początkowego. Światełko LED jest przyczepione obok swojego guzika i sygnalizuje który guzik należy teraz nacisnąć. Najlepiej by było żeby guzik drugi i trzeci były nieaktywne, a aktywowały się dopiero po wciśnięciu guzika poprzedzającego. Ma to być zagadka zręcznościowa. W późniejszym etapie guziki będę zastępował np odbiornikami podczerwieni ale zasada działania pozostaje ta sama. Proszę o pomoc i nakierowanie mnie w jaki sposób mogłoby to wyglądać. W moim przypadku wymyśliłem że w momencie kiedy wszystkie ledy zgasną to jest końcowy efekt ale może istnieje jeszcze prostsze rozwiązanie. 

void setup()
{
  pinMode(13, INPUT);
  pinMode(12, INPUT);
  pinMode(2, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(11, INPUT);
  pinMode(3, OUTPUT);
  
  digitalWrite(13, HIGH);
  digitalWrite(12, HIGH);
  digitalWrite(2, HIGH);
  digitalWrite(4, LOW);
  digitalWrite(5, HIGH);
  digitalWrite(3, LOW);
  digitalWrite(11, HIGH);
}

void loop()
{
 
  if (digitalRead(13)==LOW) //pierwszy guzik
  { 
    digitalWrite(5, LOW); //led1 gaśnie
    digitalWrite(4, HIGH); //led2 zapala się
  }
  
   
  if (digitalRead(12)==LOW) //drugi guzik
   {
      digitalWrite(4, LOW); //led2 gaśnie
      digitalWrite(3, HIGH); //led3 zapala się
  }
     
  
  if (digitalRead(11)==LOW) //trzeci guzik
     {
       digitalWrite(3, LOW); //led3 gaśnie
       }
 
  
  if ((digitalRead(5)==LOW)&&(digitalRead(4)==LOW)&&(digitalRead(3)==LOW)) //kiedy wszystkie ledy są zgaszone 
  
    
  {
        digitalWrite(2, LOW); //zwora magnetyczna wyłacza się
  }
}

t

Link do komentarza
Share on other sites

pinMode(13, INPUT);
  pinMode(12, INPUT);
  pinMode(2, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(11, INPUT);
  pinMode(3, OUTPUT);
  
  digitalWrite(13, HIGH);
  digitalWrite(12, HIGH);
  digitalWrite(2, HIGH);
  digitalWrite(4, LOW);
  digitalWrite(5, HIGH);
  digitalWrite(3, LOW);
  digitalWrite(11, HIGH

Jeżeli ustawiasz jakieś piny na input to nie możesz ustawiać na nich stanów diflgital'em...użyj przy pinMode INPUT_PULLUP, wtedy piny te będą podciągnięte do plusa i będzie to czego chciałeś...

Druga sprawa..jak ma być ustalona sekwencja guzików? 

Link do komentarza
Share on other sites

47 minut temu, farmaceuta napisał:

Jeżeli ustawiasz jakieś piny na input to nie możesz ustawiać na nich stanów diflgital'em.

Nieprawda.

Możesz - to stary sposób ustawienia INPUT_PULLUP

  • Lubię! 1
Link do komentarza
Share on other sites

@farmaceuta najpierw klikamy guzik1 po kliknięciu gaśnie led1 i zapala się led2. W tym momencie mamy 2 sekundy żeby nacisnąć guzik2, jeśli zdążymy to gaśnie led2 i zapala się led3 i mamy kolejne 2 sekundy żeby wcisnąć guzik3. Po wciśnięciu guzika3 gaśnie led3 i wyłącza się zwora magnetyczna. Jeżeli w którymkolwiek momencie nie zdążymy wcisnąć guzika w odpowiednim czasie to cała sekwencja wraca do początkowej czyli znowu pali się tylko led1 i musimy od nowa wcisnąć guzik1. Dobrze by było gdyby guzik2 aktywował się dopiero po wciśnięciu guzika1, a guzik3 dopiero po wciśnięciu guzika2.

 

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

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • 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.