Ich habe ein Problem aufgrund von Random Funktionen und zwar habe ich zwei Random Funktionen geschrieben (als Unteprogramme). Das Problem dabei, wenn ich die Random Funktionen im loop aufrufe, dann wird zwischenzeitlich die andere blockiert und ich komm einfach nicht auf den Fehler
Setze Deinen Code bitte in Codetags (</>-Button oben links im Forumseditor oder [code] davor und [/code] dahinter ohne *).
So ist er auch auf portablen Geräten lesbar. Das kannst Du auch noch nachträglich ändern.
Tommy56:
Setze Deinen Code bitte in Codetags (</>-Button oben links im Forumseditor oder [code] davor und [/code] dahinter ohne *).
So ist er auch auf portablen Geräten lesbar. Das kannst Du auch noch nachträglich ändern.
aber nicht so:
// Hier Dein Programm!
char text *= {"Hallo"};*
*Ich hoffe, Du bermerkst den Unterschied.*
*[/quote]*
*Habs schon die Einstellung gefunden, denke ich bzw. hoffe ich mal :D*
*Danke*
void Random1()
{
randomTime1 = random(2,8);
randomTime1 = randomTime1*1000;
delay(randomTime1); // <-- solange das delay läuft, geht es nicht weiter
Start1();
}
Also delay raus und die Wartezeit mit millis() bauen. Schau Dir dazu BlinkWithoutDelay in den Beispielen Deiner IDE an und verstehe es. Dabei kann Dir die Nachtwächtererklärung helfen.
{
randomTime1 = random(2,8);
randomTime1 = randomTime1*1000;
delay(randomTime1); // <-- solange das delay läuft, geht es nicht weiter
Start1();
}
Also delay raus und die Wartezeit mit millis() bauen. Schau Dir dazu BlinkWithoutDelay in den Beispielen Deiner IDE an und verstehe es. Dabei kann Dir die Nachtwächtererklärung helfen.
Gruß Tommy
Muss ich die "Wartezeit" dann in die Random Funktion anstatt "delay" reintun oder in der "If - Abfrage" im "loop"?
Weil mit diesem BlinkWithoutDelay arbeite ich grad zum ersten Mal
Also bei den 2 Unterfunktionen Start1() und Start2() hab ich was geändert. Ich habs in den beiden Funktionen ohne Random mal gemacht und geschaut, ob es auch so funktioniert, tut es noch nicht...
Also: Ich habe insgesamt 2 Arcade Buttons mit integrierter LED
Das Programm soll genau so funktionieren: die beiden LED's gehen nach einer random Zeit einfach an, von dort weg wird die Zeit gemessen (also seit wann die LED an ist), bis ich den Button gedrückt habe --> dann soll die LED ausgehen und mir die Zeit auf dem Serial Monitor ausgeben. Also es soll, wie so eine Art Reaktionstester sein
Jetzt noch delay() durch millis() ersetzen und es wird.
Ausprobiert, funktioniert nicht trotzdem nicht, muss ich anstatt diesem delay in der Random Funktion einfach dieses "BlinkWithoutDelay" hineinschreiben?
Für 'das erste Erkennen' brauchst Du kein Debounce - wenn gedrückt wurde, ist's egal, ob die nächste Sekunde noch zwölfunddreißig Mal erneut gedrückt wurde.
Mein Ansatz: State - Maschine (Zeit_A/Zeit_B unsigned - mit -1 (maxValue ?? gibt Da ein #define für) initialisieren
Status 1, Wartezeit bestimmen, LEDs anschalten, Status->2
Status 2, Prüfen, ob Wartezeit vorbei ist, JA LEDs aus, Status->3
Status 3 A, Prüfen, ob Taster A betätigt ist -> Wenn Zeit_A noch nicht gesetzt ist -> Zeit_A setzen
Status 3 B, Prüfen, ob Taster B betätigt ist -> Wenn Zeit_B noch nicht gesetzt ist -> Zeit_B setzen
Status 3 C, Prüfen, ob Zeit_A oder Zeit_B gesetzt ist, JA Status->4
Status 4 A, Prüfen ob Zeit_A<Zeit_B -> Gewinner=Spieler A
Status 4 B, Prüfen ob Zeit_B<Zeit_A -> Gewinner=Spieler B
Status 4 C, Prüfen ob Zeit_A==Zeit_B -> Unentschieden
Status 4 D, Status->5
Status 5 Gewinner Blinken lassen, bei totem Rennen langsames Blinken beider Taster, nach frühestens 3 Sekunden durch Button-Druck Neustart zulassen (Zeit_A/_B neu auf -1 setzen, Status=0 setzen)
Vorher kann man noch prüfen, ob nicht schon zu früh 'gebuzzert' wurde - dann hat dieser Spieler natürlich verloren.