Skocz do zawartości

Problem z programem. Teleturniej.


Pomocna odpowiedź

Napisano

Witam. Chciałem stworzyć mały układ imitujący grę na zasadzie kto pierwszy wciśnie przycisk gdy zapali się dioda. Wszystko śmiga, lecz nie działa funkcja falstartu, która powinna zapalać czerwoną diodę w przypadku przedwczesnego wciśnięcia przycisku. Ma ktoś jakieś pomysły jak to rozwiązać ? Z góry wybaczcie za brak komentarzy, ale pisałem w ciężkich warunkach 😉

Oto kod programu :

#define zielona1 10
#define zielona2 11
#define czerwona1 8
#define czerwona2 9
#define wskaznik 7
#define przycisk1 12
#define przycisk2 13
#define start 6

boolean falstart = true;
boolean ktoPierwszy = false;

int opoznienie1 = 250;
int opoznienie2 = 500;
int wynik1 = 0;
int wynik2 = 0;
long czas;

void setup() {
pinMode(zielona1, OUTPUT);
pinMode(zielona2, OUTPUT);
pinMode(czerwona1, OUTPUT);
pinMode(czerwona2, OUTPUT);
pinMode(wskaznik, OUTPUT);
pinMode(przycisk1, INPUT_PULLUP);
pinMode(przycisk2, INPUT_PULLUP);
pinMode(start, INPUT_PULLUP);
digitalWrite(zielona1, LOW);
digitalWrite(zielona2, LOW);
digitalWrite(czerwona1, LOW);
digitalWrite(czerwona2, LOW);
digitalWrite(wskaznik, LOW);
randomSeed(analogRead(A0));
}

void check_winner(){
 if(wynik1 >= 5){
   for(int a = 0; a < 10; a++){
     digitalWrite(zielona1, HIGH);
     delay(opoznienie2);
     digitalWrite(zielona1, LOW);
     delay(opoznienie2);
     wynik1=0;
     wynik2=0;

   }
 }
 else if(wynik2 >= 5){
   for(int a = 0; a < 10; a++){
     digitalWrite(zielona2, HIGH);
     delay(opoznienie2);
     digitalWrite(zielona2, LOW);
     delay(opoznienie2);
     wynik1=0;
     wynik2=0;
   }
 }
}

void funkcja_falstart(){
 falstart = true;
 while(falstart == true){
     while(ktoPierwszy == false){
       if(digitalRead(przycisk1) == LOW){
         digitalWrite(czerwona1, HIGH);
         wynik2++;
         delay(opoznienie1);
         digitalWrite(czerwona1, LOW);
         ktoPierwszy = true;
         check_winner();
       }
       else if (digitalRead(przycisk2) == LOW){
         digitalWrite(czerwona2, HIGH);
         wynik1++;
         delay(opoznienie1);
         digitalWrite(czerwona2, LOW);
         ktoPierwszy = true;
         check_winner();
       }
       else {
         ktoPierwszy = true;
       }
     }
     ktoPierwszy = false;
     falstart = false;
   }
}

void loop() {
if(digitalRead(start) == LOW){
 while(wynik1 < 4 || wynik2 < 4){  
   czas = random(500, 3000);
   delay(czas);
   funkcja_falstart();
   delay(50);
   digitalWrite(wskaznik, HIGH);
   while(ktoPierwszy == false){
     if(digitalRead(przycisk1) == LOW){
       digitalWrite(zielona1, HIGH);
       wynik1++;
       delay(opoznienie1);
       digitalWrite(zielona1, LOW);
       ktoPierwszy = true;
       check_winner();
     }
     else if (digitalRead(przycisk2) == LOW){
       digitalWrite(zielona2, HIGH);
       wynik2++;
       delay(opoznienie1);
       digitalWrite(zielona2, LOW);
       ktoPierwszy = true;
       check_winner();
     }
   }
   digitalWrite(wskaznik, LOW);
 }

}

}

Czy naprawdę liczysz, że ktoś będzie analizował Twój kod podany w takiej formie? Skoro sam to napisałeś i nie jesteś w stanie go zrozumieć na tyle by poprawić błąd, to dlaczego ktoś miałby to zrobić za Ciebie?

Możesz potraktować to jak pomysł: masz port szeregowy do wypisywania stanu zmiennych i wszystkie dostępne na Arduino techniki uruchamiania programów. Skoro nie działa niewielki fragment, skup się na nim, zaplanuj testy, wstaw wypisywanie komunikatów kontrolnych i zapuść. Nikomu programy nie działają od razu. Do roboty. Forum nie jest zdalnym debugerem kodu odpowiadającym na pytanie "Co jest źle?". To Twoje zadanie. Uruchamianie programu jest naturalnym etapem jego tworzenia.

Dzięki za radę. Poradziłem sobie dzięki wypisywaniu komunikatów. Gra śmiga aż miło. Jakby ktoś chciał to chętnie podzielę się efektem pracy na forum.

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