Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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

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.

  • Autor

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.

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

  • Autor

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

  • Autor
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 ;)

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.