Skocz do zawartości

Gra na refleks


spwr

Pomocna odpowiedź

Witam, zrobiłem układ skladajacy sie z 5 diod i 5 przycisków. Gra ma polegac na tym, ze zapala sie losowa dioda i jesli nacisne przycisk odpowiadajacy za daną diode to ona ma zgasnac i zapalic sie inna itd. Mój problem polega na tym, ze nie wiem jak zrobic zeby funkcja "generowanie_liczby()" zwracała wygenerowana liczbe do loopa.

Oto kod:

void setup()
{

 pinMode(5, OUTPUT);
 pinMode(6, OUTPUT);
 pinMode(7, OUTPUT);
 pinMode(8, OUTPUT);
 pinMode(9, OUTPUT);
 pinMode(0, INPUT_PULLUP);
 pinMode(1, INPUT_PULLUP);
 pinMode(2, INPUT_PULLUP);
 pinMode(3, INPUT_PULLUP);
 pinMode(4, INPUT_PULLUP);
}

void loop() {
generowanie_liczby();


digitalWrite(x, HIGH);     

delay(3000);
if ((x==5) && (digitalRead(0)==0))
digitalWrite(5, LOW);


else if ((x==6) && (digitalRead(1)==0))
digitalWrite(5, LOW);


else if ((x==7) && (digitalRead(2)==0))
digitalWrite(5, LOW);


else if ((x==8) && (digitalRead(3)==0))
digitalWrite(5, LOW);


else if ((x==9) && (digitalRead(4)==0))
digitalWrite(5, LOW);
}





int generowanie_liczby()
{

int x = random(5,10); // generowanie pinu z zakresu <5,9>            
return x;

}

Link do komentarza
Share on other sites

Niestety nie domyślimy się bez Twojego wsparcia. Używanie wartości oddawanych przez funkcję własnie tak się robi - a o to pytałeś, ale nawet w tak prostym programie może być więcej kwiatków. Pierwsze to to, że w każdym if-ie włączasz tę samą diodę. Może zamiast takich zagnieżdżonych instrukcji warunkowych spróbuj użyć switch-a. Zapis jest bardziej czytelny, od razu każdy widzi, że masz wykluczające się warunki.

EDIT: Poza tym gra jest głupia: jeśli wcisnę wszystko na raz i będę tak trzymał, zawsze będzie zaliczana dobra odpowiedź. Musisz a) sprawdzać zdarzenie wciśnięcia przycisku a nie stan jego zwarcia, b) zjawisko musi zajść po zapaleniu diody.

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

Zamieszczam poprawiony kod, ale nadal niestety jest lipa. Funkcja nie zwraca wartości wygenerowaanej "x" do loop'a.

void setup()
{

 pinMode(5, OUTPUT);
 pinMode(6, OUTPUT);
 pinMode(7, OUTPUT);
 pinMode(8, OUTPUT);
 pinMode(9, OUTPUT);
 pinMode(0, INPUT_PULLUP);
 pinMode(1, INPUT_PULLUP);
 pinMode(2, INPUT_PULLUP);
 pinMode(3, INPUT_PULLUP);
 pinMode(4, INPUT_PULLUP);
}

void loop() {
x = generowanie_liczby();
if ((x==5) && (digitalRead(0)==0))
digitalWrite(5, LOW);


else if ((x==6) && (digitalRead(1)==0))
digitalWrite(6, LOW);


else if ((x==7) && (digitalRead(2)==0))
digitalWrite(7, LOW);


else if ((x==8) && (digitalRead(3)==0))
digitalWrite(8, LOW);


else if ((x==9) && (digitalRead(4)==0))
digitalWrite(9, LOW);
}




int generowanie_liczby()
{

int x = random(5,10);            
digitalWrite(x, HIGH);     // generowanie pinu z zakresu <5,9>


}


Spróbowałem zrobic to na switchu tak jak mówiłeś ale nie wiem jak i gdzie dodac przyciski :/

switch(x)
{
 case 5:
 digitalWrite(5, LOW);
 break;

 case 6:
 digitalWrite(6, LOW);
 break;

 case 7:
 digitalWrite(7, LOW);
 break;

 case 8:
 digitalWrite(8, LOW);
 break;

 case 9:
 digitalWrite(9, LOW);
 break;

 }


Link do komentarza
Share on other sites

Żeby funkcja oddawała wartość, musi wracać przez return. To akurat było dobrze, po co w niej grzebałeś? Chyba powinieneś wrócić do podręcznika języka C i powoli przeczytać go raz jeszcze. Odnoszę wrażenie, że szamoczesz się po omacku nie rozumiejąc do końca co robisz.

Link do komentarza
Share on other sites

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.