Zum Inhalt springen

RobotC - Zweiter Task im Hintergrund ausführen


Empfohlene Beiträge

Geschrieben

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

Geschrieben
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.

Geschrieben

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.

Geschrieben
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.

Geschrieben

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...

Geschrieben

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! :D

Geschrieben
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 ;)

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...