Skocz do zawartości

Problem z programem. Teleturniej.


Aronkiewny

Pomocna odpowiedź

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);
 }

}

}
Link do komentarza
Share on other sites

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.

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

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