Skocz do zawartości

Pomocna odpowiedź

Napisano

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;

}

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.

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;

 }


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

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