Chlochou Geschrieben 6. Dezember 2012 Geschrieben 6. Dezember 2012 Hallo Community, bräuchte wirklich dringend eure Hilfe! Und zwar haben wir einen Lego Mindstorms NXT Roboter bekommen den wir programmieren müssen. Aufgabe ist es ein Ping Pong Spiel mit dem auszuführen. Dies macht er auch. Das einzige Problem was ich habe: Dieser Roboter muss nach 90 Sekunden abstellen, egal in welcher Funktion er sich gerade befindet. Unser Lehrer wollte das ich vor jeder Funktion mit einer IF Abfrage die Zeit teste. Das funktionierte leider nicht so ganz da er nach einer gewissen Funktion nicht mehr steuerbar war. Nun habe ich im Internet diesen Beitrag gefunden:ROBOTC.net forums - View topic - Multitasking [sticky] - When and When Not to Multitask Wollte dies eig. auch genau so ausführen, funktionierte jedoch nicht. Also hab ich mal auf dem Display immer einen Teil ausgegeben wo er gerade drin steht. Dieser ist mir jedoch nicht logisch. Hoffe ihr könnt mir folgen.. Wie gesagt, auch die Pausen sind nur drin damit ich es auf dem Bildschirm ablesen konnte. Lese ich dies dann ab, springt er folgendermassen: main1, main2, soppen Tim3. task stoppen() { ClearTimer(T1); nxtDisplayTextLine(0, "stoppen Tim1"); int fahrzeit = 90; while(true) { nxtDisplayTextLine(0, "stoppen Tim2"); wait10Msec(100); if(time100(T1) < 900) { nxtDisplayTextLine(0, "stoppen Tim3"); wait10Msec(100); StopAllTasks(); } wait1Msec(10); } } task main() { nxtDisplayTextLine(0, "main1"); wait10Msec(100); StartTask(stoppen); nxtDisplayTextLine(0, "main2"); wait10Msec(100); int LinkeSeite = 1; int tLeft; wait10Msec(500); while(true) { forward(); rightballs(); forward(); mittezuruck(); ballwerfen(); mittezuruck(); leftturn(); forward(); leftballs(); forward(); mittezuruck(); ballwerfen(); mittezuruck(); rightturn(); } motor[MotorL]=0; motor[MotorR]=0; wait1Msec(10); } Liebe Grüsse Chlochou Zitieren
SynonymOfGod Geschrieben 7. Dezember 2012 Geschrieben 7. Dezember 2012 Also ich habe keine Ahnung von Mindstorms aber wäre es nicht möglich dies mit Multithreading zu lösen? also ein einfacher worker und halt ein Time worker Zitieren
Chlochou Geschrieben 10. Dezember 2012 Autor Geschrieben 10. Dezember 2012 Das weiss ich leider auch nicht Könntest du mir vllt. einen Beispielcode einfügen? Dann könnt ich das mal so versuchen Zitieren
Klotzkopp Geschrieben 10. Dezember 2012 Geschrieben 10. Dezember 2012 Also hab ich mal auf dem Display immer einen Teil ausgegeben wo er gerade drin steht. Dieser ist mir jedoch nicht logisch. Hoffe ihr könnt mir folgen.. Wie gesagt, auch die Pausen sind nur drin damit ich es auf dem Bildschirm ablesen konnte. Lese ich dies dann ab, springt er folgendermassen: main1, main2, soppen Tim3.Und was daran ist "dir nicht logisch"? Was würdest du erwarten? Ich nehme an, es kann immer nur eine Zeile angezeigt werden. Wenn man eine neue anzeigt, wird die alte überschrieben? Dann könnte das so ablaufen: - Main-Task schreibt "main1" - Main-Task wartet: Du siehst "main1" - Stoppen-Task wird gestartet - Stoppen-Task schreibt "stoppen Tim1" - Stoppen-Task schreibt "stoppen Tim2" - Stoppen-Task wartet -> Umschalten auf Main-Task - Main-Task schreibt "main2" - Alle Tasks warten: Du siehst "main2" - Der Stoppen-Task hat sein Warten beendet - Stoppen-Task schreibt "stoppen Tim3" - Du siehst "stoppen Tim3" Das wäre eine mögliche Erklärung, warum du "stoppen Tim1" und "stoppen Tim2" nicht siehst. Sie werden mit anderen Texten überschrieben, bevor du sie sehen kannst. Zitieren
Chlochou Geschrieben 10. Dezember 2012 Autor Geschrieben 10. Dezember 2012 Nicht logisch ist mir leider, Warum dieser nie in "stoppen Tim1" und "stoppen Tim2" reinfällt. Ich habs schon so probiert das ich ne 5 Sekunden Pause nach jedem Text einbaue aber auch dann zeigt es mir das nicht an. Sobald ich sonst irgendwo die Pause einbaue bleibt der Text ja bis zum nächsten Befehl bestehen. Heisst das nun das es einfach in diesem Task nicht mit den Pausen geht oder das er da wirklich überhaupt nicht reinspringt? Und auch wenn er reinspringt müsste er doch nach dieser Zeit abbrechen, und nicht schon dann wenn einmal der Task "stoppen" ausgeführt ist und bei main "main 2"? Er macht ja ausser diesen Textangaben gar nichts mehr, auch die main Funktion nicht. Zitieren
Klotzkopp Geschrieben 10. Dezember 2012 Geschrieben 10. Dezember 2012 Er macht ja ausser diesen Textangaben gar nichts mehr, auch die main Funktion nicht.Natürlich nicht. 1 Sekunde nach der Ausgabe von "stoppen Tim3" hältst du ja alle Tasks an. Schau dir die Bedingung fürs Stoppen nochmal genau an. Zitieren
Joey P Geschrieben 11. Dezember 2012 Geschrieben 11. Dezember 2012 In nxc musst du sehr auf timing achten, in meinem Projekt hatte ich auch das Problem dass der nie in eine Funktion rein gegangen ist obwohl er hätte müssen, wir haben uns einen abgesucht das ist net beschreibbar...Ende vom Lied war "setz doch mal ein wait(100) davor" und zack es ging... Zitieren
Chlochou Geschrieben 11. Dezember 2012 Autor Geschrieben 11. Dezember 2012 Dann versuch ich das auch mal mit wait Kann ja nicht noch schlimmer werden. Zitieren
Joey P Geschrieben 12. Dezember 2012 Geschrieben 12. Dezember 2012 Sag bescheid ob es geklappt hat Zitieren
Chlochou Geschrieben 13. Dezember 2012 Autor Geschrieben 13. Dezember 2012 Es ist schon sehr komisch findet der Lehrer.. Weil mein Team Partner und ich haben dies zuhause mit dem gleichen Programm, der gleichen Firmwire und alles gemacht. In der Schule läuft das Programm mit den IF Schlaufen.. Er meint der zweite Task sei eine unsaubere und unschöne Variante, deshalb sollen wir die IFs machen. Aber naja, hauptsache es geht! Zitieren
Joey P Geschrieben 14. Dezember 2012 Geschrieben 14. Dezember 2012 Nur so nebenbei, mir verzieht sich immer alles, wenn ich "if schleife" höre...seit wann sind if abfragen denn schleifen? Zitieren
Chlochou Geschrieben 14. Dezember 2012 Autor Geschrieben 14. Dezember 2012 Nur so nebenbei, mir verzieht sich immer alles, wenn ich "if schleife" höre...seit wann sind if abfragen denn schleifen? Gute Frage.. Meiner Meinung nach sind das ja keine Schleifen, aber laut meinem Lehrer ja schon xD Ich hätte es auch lieber mit einem zweiten Task gelöst. Aber wenn der Lehrer sagt so funktionierts, machen wir das eben so, weil nächste Woche ja Abgabe ist Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.