[zu beginn möchte ich anmerken, dass ich schon mal etwas in dieses Forum gepostet habe was diesem post ähnlich sieht, jedoch befasst sich dieser post mit einem komplett anderen Problem als der letzte
Hey Leute,
ich will ein kleine Spiel bauen bei dem es um Reaktiongeschwindigkeit geht aber ich hab nun einen punkt erreicht an dem ich total stucked bin und nicht mehr weiter weis
Um was geht es ?:
also ich habe insgesamt 8 LED's ( 4 Rote = R; 4 Grüne = G )
und einen Joystick.
( Jede LED hat ihren eignen Vorwiderstand )
Das Spielfeld von oben:
G
R
G R R G
R
G
Was ist das Ziel ?:
Wenn eine grüne LED leuchtet muss man schnell mit dem Joystick die dazugehörige rote zum leuchten bringen, also bevor die grüne halt wieder aus geht.
Und so geht das ganz immer weiter bin man es einmal nicht schaffen sollte rechtzeitig zu navigieren.
Was funktioniert bisher ?:
Ich kann mittlerweile alle roten LED's über den JoyStick ansteuern.
Meine grünen LEDs blinken auch schon zufällig.
Ich kann meine roten LEDs unabhängig von meinen Grünen ansteuern.
Was funktioniert nicht ?:
Nunja, es funktioniert eig alles einwandfrei, bis auf die tastache das der eigendliche sinn des Spiels noch nicht gegeben ist.
Kann mir vllt jmd erklären wie ich eine funktion schreibe welche:
überprüfen kann ob ich schnell genug war? Sprich ob ich es rechtzeitig geschafft habe mit dem JoyStick die rote LED zum leuchten zu bringen die zur momentan leuchtenden grünen LED passt?
Ich sehe zwar kein neues Problem, sondern immer noch das Alte, aber egal.
Du musst doch für jede LED-Kombination nur schauen:
Du musst Dir doch nur merken, welche LED-Gruppe gewählt war und sobald die zugehörige rote LED an geht, schauen, ob die grüne noch an ist. Fertig.
Das geht natürlich leichter, wenn man jede LED-Gruppe in einem Struct und die LED-Gruppen im einem Array davon verwaltet. Dann kannst Du das problemlos über den Index machen.
Das hatte ich Dir wohl auch so ähnlich schon geschrieben. Ich suche jetzt den anderen Thread nicht.
Anmerkung am Rande bei 5 Post's wäre das Auffinden des anderen Thread keine Leistung, für Die man einen Doktor-Titel zugesprochen bekäme - ok, Das hoffe ich zumindest!
Da du ja hier schon im Forum gepostet hast und auch Antworten bekommen hast, solltest du schon Wissen, das es besser ist, den Sketch direkt und in Code-Tags zu posten.
Also bitte mach das noch.
//----------| Variablen deklaratien für die äußeren LEDs und deren funktion |----------//
byte LED_PIN_UP_O = 8;
bool LED_STATE_UP_O = LOW; //LED ist standardmäßig aus
byte LED_PIN_RIGHT_O = 9;
bool LED_STATE_RIGHT_O = LOW; //LED ist standardmäßig aus
byte LED_PIN_DOWN_O = 10;
bool LED_STATE_DOWN_O = LOW; //LED ist standardmäßig aus
byte LED_PIN_LEFT_O = 11;
bool LED_STATE_LEFT_O = LOW; //LED ist standardmäßig aus
unsigned long prevTime_UP_O = 0; //zu beginn hat diese Variable den Wert 0 (betrifft State-Machine Zeitabfrage)
unsigned long prevTime_RIGHT_O = 0; //zu beginn hat diese Variable den Wert 0 (betrifft State-Machine Zeitabfrage)
unsigned long prevTime_DOWN_O = 0; //zu beginn hat diese Variable den Wert 0 (betrifft State-Machine Zeitabfrage)
unsigned long prevTime_LEFT_O = 0; //zu beginn hat diese Variable den Wert 0 (betrifft State-Machine Zeitabfrage)
unsigned long prev_Random_Time = 0; //zu beginn hat diese Variable den Wert 0 (betrifft State-Machine Zeitabfrage)
const unsigned long multiplexDur = 1; //Die LEDs werden mit einer Millisecunde on/off zeit gemultipext
const unsigned long RandomDurTime = 1000; //Jede Sekunde leuchtet eine andere zufällig gewählte LED auf
byte randomCase = 0; //zu beginn wird dieser Wert auf 0 gestzt (eig sinnlos weil er danach eh überschrieben wird)
//----------| Variablen deklaratien für die inneren LEDs und deren funktion |----------//
byte LED_PIN_UP_I = 4;
byte LED_PIN_RIGHT_I = 5;
byte LED_PIN_DOWN_I = 6;
byte LED_PIN_LEFT_I = 7;
int SensorWert = 0;
int BUTTON_IN = 2;
bool BUTTON_STATE = LOW; //Der Taster ist standardmäßg NICHT-betätigt
#define BUZZER 13 //giebt dem uC zu verstehen das auf pin 13 ein buzzer angeschlossen ist
void setup()
//----------| Einstellen der Pin-Modes |----------//
{
pinMode(LED_PIN_UP_O, OUTPUT);
pinMode(LED_PIN_RIGHT_O, OUTPUT);
pinMode(LED_PIN_DOWN_O, OUTPUT);
pinMode(LED_PIN_LEFT_O, OUTPUT);
pinMode(LED_PIN_UP_I, OUTPUT);
pinMode(LED_PIN_RIGHT_I, OUTPUT);
pinMode(LED_PIN_DOWN_I, OUTPUT);
pinMode(LED_PIN_LEFT_I, OUTPUT);
pinMode(BUTTON_IN, INPUT_PULLUP); //schaltet internen PULLUP-Widerstand ein (Butten ist ein Activ-Low-Switch)
}
//----------| Hier startet das Programm, welches die äußeren LEDs steuert |----------//
SensorWert = analogRead(A0); // Auslesen des Wertes, der an A0 anliegt. Hier : VRx - X-Achs
if (SensorWert > 1010) // Wenn der Wert größer als 1010 ist, dann...
{
digitalWrite (LED_PIN_LEFT_I, HIGH); // ...soll die linke LED leuchten
tone (BUZZER, 329.63, 100); //...soll der Ton E4 (329.63Hz) für 100ms Wiedergegeben werden.
}
if (SensorWert < 1010) // Wenn der Wert kleiner als 1010 ist, dann...
{
digitalWrite (LED_PIN_LEFT_I, LOW); // ...soll die linke LED nicht mehr leuchten
}
if (SensorWert < 20 ) // Wenn der Wert größer als 20 ist, dann...
{
digitalWrite(LED_PIN_RIGHT_I, HIGH); // ...soll die rechte LED nicht mehr leuchten
tone (BUZZER, 392.00, 100); //...soll der Ton G4 (392.00Hz) für 100ms Wiedergegeben werden.
}
if (SensorWert > 20) // Wenn der Wert kleiner als 20 ist, dann...
{
digitalWrite (LED_PIN_RIGHT_I, LOW); // ...soll die rechte LED nicht mehr leuchten
}
SensorWert = analogRead(A1); // Auslesen des Wertes, der an A1 anliegt. Hier : VRy - Y-Achse
if (SensorWert > 1010) // Wenn der Wert größer als 1010 ist, dann...
{
digitalWrite (LED_PIN_UP_I, HIGH); // ...soll die obere LED leuchten
tone (BUZZER, 440, 100); //...soll der Ton A4 (440Hz) für 100ms Wiedergegeben werden.
}
if (SensorWert < 1010) // Wenn der Wert kleiner als 1010 ist, dann...
{
digitalWrite (LED_PIN_UP_I, LOW); // ...soll die obere LED nicht mehr leuchten
}
if (SensorWert < 20) // Wenn der Wert kleiner als 20 ist, dann...
{
digitalWrite (LED_PIN_DOWN_I, HIGH); // ...soll die untere LED leuchten
tone (BUZZER, 466.16, 100); //...soll der Ton A#4 (466.16Hz) für 100ms Wiedergegeben werden.
}
if (SensorWert > 20) // Wenn der Wert größer als 20 ist, dann...
{
digitalWrite (LED_PIN_DOWN_I, LOW); // ...soll die untere LED nicht mehr leuchten
}
BUTTON_STATE = digitalRead(BUTTON_IN); //Auslesen des Tasterzustandes 8 anliegt Hier : SW - Switch
if (BUTTON_STATE ==LOW) //Wenn der Taster LOW wird [also betätigt wird], dann...
{
digitalWrite (LED_PIN_UP_I,HIGH); //...soll die obere LED leuchten
digitalWrite (LED_PIN_RIGHT_I,HIGH); //...soll die rechte LED leuchten
digitalWrite (LED_PIN_DOWN_I, HIGH); //...soll die untere LED leuchten
digitalWrite (LED_PIN_LEFT_I, HIGH); //...soll die linke LED leuchten
tone (BUZZER, 277.18, 100); //...soll und der Ton C#4 (277.18Hz) für 100ms Wiedergegeben werden.
}
}
Srry, da ich nur 9000 Zeichen pro post verwenden dar und nur alle 5 min einen post absetzen darf, hab ich meinen Code wie gewünscht aufgeteilt. hat nur etwas gedauert xD
Zu den fragen von noiasca:
N1: ich habe 5 Zustände (0 bis 4) weil ich mit 4 zustanden (0 bis 3) immer den Fehlerfall hatte, das Case 0 (also Wert 0) nie erreicht wurde. Sprich meine obere LED hat nie geleuchtet.
N2: so wie ich das seh hast du verstanden was ich will, also ja, genau das stimmt, sofern ich deine Auflistung richtig interpretiere (aber jz haben wir ja schon meinen Code im thread)
N3: wenn ich rechtzeitig die richtige Richtung gewählt habe soll das Programm einfach eine neue grüne led auswürfeln die ich wieder rechtzeitig erwischen muss, und das geht immer so weiter bis ich sie irgend wann mal nicht erwische.
N4: sollte ich die Falsche Richtung erwischen, ist das ebenfalls ein "game over" ^^
N6: Wenn man verliert, also nicht rechtzeitig oder falsch reagiert, sollen die LEDs alle einmal im Kreis blinken, die inneren im Uhrzeiger sinn / die äußeren gegen den Uhrzeigersinn und währen die LEDs das machen gibt der Buzzer eine Melodie wieder. nach dieser Sequenz soll 3 Sekunden gewartet werden bevor das Spiel weiter geht.
Das heißt am Ende wird das komplette Programm resettet. JEDOCH habe ich diese sequenz noch nirgends eingefügt da noch nicht die möglichkeit besteht zu verlieren wenn du verstehst was ich mein.
N7: das ist das produkt enormer Verwirrung meinerseits. ich hab die multiplexDur funktionen grade entfernt und es läuft auch so spitze ^^ danke fürs aufmerksam machen.
Frage N8:
Welche Bedeutung hat der Button BUTTON_IN?
Frage N9:
Wann darf der aktiv sein, wann soll er inaktiv sein?
(sorry, es ist schon ziemlich ka..e, wenn du einen Ablauf in deinem Eingangspost beschreibst, und man dann laufend weitere Sachen in deinem Code findet ...)
N8: BUTTON_IN ist eine variable die mit meinem JoyStick zu tun hat, mein joyStick hat eine Bumperfunktion. Wenn dieser butten betätigt wir, leuchten alle LEDs.
N9: nunja, der darf natürlich nur betätigt werden wenn ALLE grünen LEDs leuchten ^^ VORSICHT hierbei handelt es sich um einen activ low button, deswegen hab ich auch auf seinem Inputpin den Pull Up Widerstand aktiviert.
Zu der Sache mit den fehlenden Infos, ich hab noch nie ein Forum für irgendwas verwendet vor allem nicht fürs programmieren von irgendwas deswegen hab ich keine Ahnung wie man am besten mein Problem erläutert