Skocz do zawartości

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


Pomocna odpowiedź

Napisano

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

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? 

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

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

 

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