Skocz do zawartości

Wysyłanie danych w pętli


Jadw1

Pomocna odpowiedź

Cześć!

Robię kurs Arduino i chciałem zrobić "grę" ze zgadywaniem liczby wylosowanej przez obracanie potencjonometru.

Gdy wysyłam jakas liczby za pierwszym razem wszystko jest ok, jednak gdy petla zaczyna sie od nowa w miejscu czytania nowej podanej liczby wysyłana jest liczba podana na początku.

while (true) {
Serial.println("Pozostalo prob: " + String(prob));
while(Serial.available() == 0) {
	if (Serial.available() > 0)
		wartosc = Serial.readStringUntil('\n').toInt();
}
/* ... */
}

W załączniku jest widok z monitora, liczbę wysyłam tylko raz.

Sorry jeżeli napisałem niezrozumiale, dopiero się uczę 😃

Przechwytywanie.thumb.PNG.2266723f00c13a0b14e07769dd8b4715.PNG

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

void loop() {
long int los;
long int wartosc;
int prob = 3;

while (digitalRead(3) == HIGH) {
}
los = analogRead(A0);
Serial.println("Podaj liczbe z zakresu 0 - 1023 (mozesz pomylic sie o 50)");

digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);

while (true) {
	Serial.println("Pozostalo prob: " + String(prob));
	while(Serial.available() == 0) {
		if (Serial.available() > 0)
			wartosc = Serial.readStringUntil('\n').toInt();
	}

	if (wartosc - los < 50 && wartosc - los > -50) {
		digitalWrite(5, HIGH);
		Serial.println("BRAWO");
		Serial.println("Wylosowana liczba to: " + String(los));
		break;
	}

	else if (prob > 0) {
		digitalWrite(6, HIGH);
		Serial.println("Podales zla wartosc! Sprobuj jeszcze raz.");
		prob--;
	}

	else if (prob == 0) {
		digitalWrite(7, HIGH);
		Serial.println("PRZEGRALES!");
		Serial.println("WYlosowana liczba to: " + String(los));
		break;
	}

	digitalWrite(6, LOW);
}
}

jeżeli użytkownik poda złą liczbę, ma mieć możliwość podania innej liczby i tak az mu się próby nie skończą. tylko jak raz podam złą liczbę to pętla pomija to czytanie liczby wiec wykonuje się 3 razy dla tej liczby podanej na początku

Link do komentarza
Share on other sites

To może inaczej. Porównaj sobie warunek w tej drugiej pętli while z warunkiem w instrukcji if wewnątrz i zastanów się czy i kiedy może zaistnieć sytuacja, kiedy oba będą spełnione i kod wewnątrz if się wykona.

EDIT: w kodzie, który teraz wkleiłeś, to jest trzecia pętla while.

Link do komentarza
Share on other sites

to wiem, że oba się nigdy nie spełnia ale rozumowałem w ten sposób że dopóki Arduino nie odbiera żadnych danych do wykonuje się pętla while, która wtedy nic nie robi i w momencie gdy coś wysyłamy wykonuje się instrukcja w if'ie i potem warunek pętli nie jest spełniany więc wychodzi z pętli

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.