INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Scheifen & Co
31.03.2015, 20:41
Beitrag #1
Scheifen & Co
Ja, ich gebs zu, ich bin neu hier. Daher bin ich auch noch nicht der Crack und bitte daher um eure Hilfe. Ich habe Schwieirgkeiten, folgenden Ablauf zu programmieren:
Die Elektronik besteht aus Uno, LCD-Display und Joystick. Die einzelnen Teile funktionieren und die Werte werden koorekt ausgegeben. Ich habe lediglich Mühe, den richtigen Befehl von einem Kapitel zum nächsten zu wählen (also die korrekte Schleife - do , while, if, ....)

1. Begrüssungstext auf LCD
2. Warten bis eine Taste gedrückt wird
3. Nun hat man 30 Sekunden Zeit, um eine Aufgabe zu lösen (nehmen wir hier zur Vereinfachung mal einfach eine Variable "time", die sich kontinuierlich erhöht mit "time++")
--> Aufgabe erfüllt --> weiter zu 4
--> Aufgabe nicht erfüllt --> zurück zu 1
4. Ausgabe "Bravo, Level 1 bestanden, weiter gehts mit Level 2"
5. Warten bis eine Taste gedrückt wird
6. Nun hat man 30 Sekunden Zeit, um eine Aufgabe zu lösen
--> Aufgabe erfüllt --> weiter zu 7....
--> Aufgabe nicht erfüllt --> zurück zu 1

Die Programmierung ist mir jetzt eben unklar:

void loop
{
Begrüssungstext
Warten auf Tastendruck (soll Bereitschaft des Spielers zeigen, mit dem Spiel zu beginnen)
Level 1 lösen (maximal 30 Sekunden Zeit) --> zwei Ausgänge für diese Schleife:
if Zeit abgelaufen goto Start
if Ziel vor Ablauf der Zeit erreicht weiter zum "Bravotext"

Wäre froh, mir würde hier jemand einmal für so ein Basisaufbau helfen, danke
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
31.03.2015, 21:45
Beitrag #2
RE: Scheifen & Co
Hi,
ok, wenn Du sagst, dass die einzelnen Teile schonmal funktionieren, dann würde ich in etwa folgendermaßen vorgehen:
1. Packe jede der Aufgaben in eine eigene Funktion. Die jeweilige Funktion gibt true zurück, wenn die Aufgabe bestanden ist und false sonst.
2. Mach Dir in loop eine static variable, die die Nummer des momentanen Levels enthält. Die Variable ist am Anfang 1.
3. Über ein switch/case-Konstrukt rufst Du die zum Level zugehörige Funktion auf. Den Rückgabewert merkst Du Dir in einer lokalen Variable.
4. Falls die lokale Variable true ist: level++, sonst level = 1

Eine Hauptschleife außenherum brauchst Du nicht, da loop() sowieso immer wieder aufgerufen wird.

Gruß,
Thorsten

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
31.03.2015, 22:08 (Dieser Beitrag wurde zuletzt bearbeitet: 31.03.2015 22:09 von Matthias Wehrli.)
Beitrag #3
RE: Scheifen & Co
Vielen Dank, werd ich ausprobieren. Wenn ich das richtig verstehe:

void loop ()
{
begrüssungstext();
tastendruck_abwarten(); <----- Wie schreib ich diese Funktion?
level1();
if(level1==TRUE)
{
bravo-text();
tastendruck_abwarten(); <----- dito
level2();
}
if(level1=FALSE)
{
begrüssungstext();
tastendruck_abwarten();
level1();
....
}
Und wie mache ich das mit dem Taster als Auslöser? Mit einem Interrupt gehts nicht, da ich den Pushbutton ja mehrmals im Spiel drücke und immer eine andere Aktion folgt.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
01.04.2015, 09:48
Beitrag #4
RE: Scheifen & Co
(31.03.2015 22:08)Matthias Wehrli schrieb:  Vielen Dank, werd ich ausprobieren. Wenn ich das richtig verstehe:
Naja, nicht ganz, aber vielleicht geht's in die richtige Richtung. Zum "Coding" wäre so viel zu sagen, das lasse ich jetzt erstmal.
Fang' doch mal an, Stück für Stück vorzugehen und mach Dir über die übergeordnete Struktur später Gedanken.
Schreib doch zuerst einmal einen Sketch, der einen kleinen Teil Deiner Anforderung abdeckt. Z.B. auf einen Tastendruck warten und dann irgendwas anzeigen. Erst wenn das funktioniert zum nächsten Schritt gehen. Diesen nächsten Schritt dann möglichst isoliert (eigener Sketch) machen und danach integrieren.
Versuche außerdem zu verstehen, wie Funktionsdefinitionen und -aufrufe mit Parameterübergabe und -rückgabe funktionieren.

Zitat:Und wie mache ich das mit dem Taster als Auslöser? Mit einem Interrupt gehts nicht, da ich den Pushbutton ja mehrmals im Spiel drücke und immer eine andere Aktion folgt.
Wie wär's einfach mit digitalRead?
Gruß,
Thorsten

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
01.04.2015, 19:21
Beitrag #5
RE: Scheifen & Co
Das Projekt hat gestern Abend ein positives Ende gefunden. Alle Teile funktionieren und der Code lässt sich auch fast lesen Wink
Anstelle des Tastendrucks, den ich eh via digitalRead machen wollte hab ich im Moment einfach eine Delay drin. Diese möchte ich noch eliminieren: Daher frage ich trotzdem ncohmals, wie ich innerhalb eines codes auf einen Tastendruck WARTE, nicht wie ich ihn abfrage. Der Sketch soll an der Stelle stehenbleiben, bis der Tastendruck ausgeführt ist und dann soll der Sketch an derselben Stelle weitergehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
02.04.2015, 08:46
Beitrag #6
RE: Scheifen & Co
(01.04.2015 19:21)Matthias Wehrli schrieb:  wie ich innerhalb eines codes auf einen Tastendruck WARTE, nicht wie ich ihn abfrage.
Erstaunlich, dass Du den Rest hinbekommen hast, aber das nicht klappt.
Vielleicht so:
Code:
while(!digitalRead(pin));
Gruß,
Thorsten

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste