Hej, to mój pierwszy projekt, który wklejam, także chciałem się przywitać 😉
Na początku chciałbym podziękować za kurs, bo jest cholernie wciągający i czas przy nim leci jak szalony.
A teraz chciałbym się pochwalić działającym zadaniem 4.5.
Dodałem kilka ulepszeń od siebie. Przede wszystkim sygnalizację na 3 dodatkowych diodach gasnących w miarę utraty żyć. Zrobiłem też zabezpieczenie przed resetowaniem gry w jej czasie (co dodawało u mnie extra szanse), no i kilka pierdółek świetlnych dla efekciarstwa 😃 Jak ogarnę obsługę głośniczka, to może jeszcze dorzucę jakieś efekty dźwiękowe 🙂
Mam natomiast problem którego nie mogę rozwiązać: jak program oczekuje jeszcze na wciśnięcie przycisku, to wszystkie znaki jakie wtedy wpiszę, po wciśnięciu przycisku wychodzą na monitor i odbierają jedną szansę :/ Jest na to jakieś rozwiązanie?
//4.5
//wskazniki
#define red 8 //fail
#define orange 9 //utrata życia
#define green 10 //wygranko
//życia
#define life1 2
#define life2 3
#define life3 4
//przycisk
#define button 6
int proby = 0; //ilosc żyć
int wartosc = 0; //wartosc na dzielniku
int konwersja = 0; //konwerter odpowiedzi String do konwersja int
String odpowiedz = ""; //odpowiedz
//pamięci
boolean loose = ""; // pamietaj ze przegrana/wygrana
boolean reset = ""; //pamietaj że układ był resetowany
void setup() {
//sygnalizacja stanu
pinMode(red, OUTPUT);
pinMode(orange, OUTPUT);
pinMode(green, OUTPUT);
//przycisk
pinMode(button, INPUT_PULLUP);
//życia
pinMode(life1, OUTPUT);
pinMode(life2, OUTPUT);
pinMode(life3, OUTPUT);
//sterowanie wyświetlaczem i komunikacją
Serial.begin(9600);
Serial.println("Ustaw pozycję potencjometru i zatwierdź przyciskiem");
proby = 0; //pozostałe proby
reset = true; //pozwolenie na użycie przycisku
}
void loop() {
if (digitalRead(button) == LOW && reset == true) { //jeśli przycisk wciśnięty a układ ma pozwolenie na reset
digitalWrite(red, HIGH); //zamrugaj na powitanie
delay(100);
digitalWrite(red, LOW);
delay(100);
digitalWrite(orange, HIGH);
delay(100);
digitalWrite(orange, LOW);
delay(100);
digitalWrite(green, HIGH);
delay(100);
digitalWrite(green, LOW);
delay(100);
//załaduj życia
digitalWrite(life1, HIGH);
delay(300);
digitalWrite(life2, HIGH);
delay(300);
digitalWrite(life3, HIGH);
delay(300);
//początek gry
Serial.println("Podaj liczbę!"); //wyślietl pytanie
wartosc = analogRead(A5); //zczytaj wartość
//Serial.println(wartosc); //TEST: wyswietl wartosc odczytu żeby sprawdzic poprawnosc działania
reset = false; //wyłącz pozwolenie na reset
if (loose == true) //dodatkowo jeżeli poniesiono porażkę/wygranko
proby = 0; //resetuj proby
proby = proby + 3; //dodaj 3 życia
}
if (Serial.available() > 0 && reset == false) { //sprawdź, czy pozwolenie na reset nie jest aktywowane
odpowiedz = Serial.readStringUntil('\n'); //odpowiedz z odczytu
konwersja = odpowiedz.toInt(); //konwertuj (odpowiedz)string do (odpowiedz)int
if (konwersja <= wartosc - 51 || konwersja >= wartosc + 51) { //jeżeli wpisana liczba pomniejszona o 50 jest mniejsza od potencjometrowej
proby = proby - 1;
Serial.println ("Błędna odpowiedź!");
Serial.println ("pozostałe proby:");
Serial.println (proby);
digitalWrite(orange, HIGH); //mrugnij diodą pomarańczową
delay(500);
digitalWrite(orange, LOW);
delay(50);
}
else if (konwersja >= wartosc + 50 || konwersja <= wartosc + 50) { //gdy wpisalem wartosc poprawną
Serial.println ("Wybrałeś liczbę: " + odpowiedz + ""); //jak jest bez "" to wcina ilosc liter którą wpisuję
Serial.println("Gratulacje! Prawidłowa odpowiedź!");
Serial.println ("Wylosowana liczba to:");
Serial.println (wartosc);
Serial.println("Ustaw potencjometr i naciśnij przycisk, aby rozpocząć ponownie grę!");
digitalWrite(green, HIGH);
loose = true;
reset = true;
}
if (proby == 0) { //błąd był- średnik
Serial.println("Przegraleś!");
digitalWrite(red, HIGH);
loose = true; //zapamiętaj, że przegrana
if (loose == true) //a dodatkowo jeżeli przegrana
Serial.println ("Wylosowana liczba to: "); //wyświetl to
Serial.println (wartosc);
Serial.println("Naciśnij przycisk, aby rozpocząć ponownie grę!");
}
if (proby == 2) { //sterowanie LEDami żyć3
digitalWrite(life3, LOW);
delay(50);
digitalWrite(life3, HIGH);
delay(50);
digitalWrite(life3, LOW);
delay(50);
digitalWrite(life3, HIGH);
delay(50);
digitalWrite(life3, LOW);
}
if (proby == 1) {//sterowanie LEDami żyć2
digitalWrite(life2, LOW);
delay(50);
digitalWrite(life2, HIGH);
delay(50);
digitalWrite(life2, LOW);
delay(50);
digitalWrite(life2, HIGH);
delay(50);
digitalWrite(life2, LOW);
}
if (proby == 0) {//sterowanie LEDami żyć1
digitalWrite(life1, LOW);
delay(50);
digitalWrite(life1, HIGH);
delay(50);
digitalWrite(life1, LOW);
delay(50);
digitalWrite(life1, HIGH);
delay(50);
digitalWrite(life1, LOW);
reset = true; //dopiero teraz możesz zrestetowac gre
}
}
}