Frage zur Programmierung vom NXT - AG

Mindstorms im Unterricht. Ideen, Vorstellungen

Moderator: Moderatoren

Diphthong
Schreibt viel
Schreibt viel
Beiträge: 251
Registriert: 17. Aug 2010 15:53
Kontaktdaten:

Beitragvon Diphthong » 5. Okt 2010 17:43

OK, ich habe das jetzt auch richtig eingerückt.
Da das jetzt bei mir funktioniert, ist das erstmal für mich abgestempelt. Jetzt möchte ich mich nocheinmal um den Report kümmern, den ich schon vor kurzer Zeit erwähnt habe.
Ich möchte, dass der Roboter, während er den Parcours abfährt, diverse Dinge in einem textdokument speichert. Ich habe es jetzt schon so hingekriegt, dass der Roboter diverse Dinge, wie z.B. ,,Linie wird nachgefahren", oder ,,Dose wurde umfahren" in einem Textdokument speichert. Leider habe ich noch nicht herausgefunden, wie man z.B. die Werte des Ultraschallsensors oder der Lichtsensoren im textdokument speichert.
Hat jemand damit erfahrung? Könnte mir Linus vielleicht irgendwelche Tipps geben? :D
Danke für eure Hilfe schonmal im Vorraus und
Viele Grüße
Diphthong

Diphthong
Schreibt viel
Schreibt viel
Beiträge: 251
Registriert: 17. Aug 2010 15:53
Kontaktdaten:

Beitragvon Diphthong » 5. Okt 2010 18:06

Ich habe jetzt doch etwas gefunden:

Code: Alles auswählen

WriteBytes(handle, buffer, count);

So steht es zumindest in der Hilfe. Aber ich verstehe nicht ganz, was genau handle, buffer und count bedeuten. Ich habe es jetzt so gemacht, dass ich oben die Variable

Code: Alles auswählen

int blackline;
gesetzt habe, dann die Variable so:

Code: Alles auswählen

blackline = Sensor(IN_1);

(es handelt sich um einen Lichtsensor) abgefragt habe,
das WriteBytes sieht jetzt bei mir so aus:

Code: Alles auswählen

WriteBytes(fileHandle,blackline,bytesWritten);

So schreibt er aber nichts, was mit dem Wert zutun haben könnte, auf. Was ist also falsch?

Diphthong
Schreibt viel
Schreibt viel
Beiträge: 251
Registriert: 17. Aug 2010 15:53
Kontaktdaten:

Beitragvon Diphthong » 6. Okt 2010 19:20

Weiß denn wirklich niemand, wie man das macht? Ich habe nämlich keine Lust, da 100 if-abfragen rein zu schreiben! :cry:

Diphthong
Schreibt viel
Schreibt viel
Beiträge: 251
Registriert: 17. Aug 2010 15:53
Kontaktdaten:

Beitragvon Diphthong » 7. Okt 2010 13:19

Schade. Weiß denn jemand, ob es eine (deutsche) Kontakt emailaddresse gibt, an der ich mich deshalb wenden könnte?

Linus
Enorm-Viel-Schreiber
Enorm-Viel-Schreiber
Beiträge: 512
Registriert: 13. Jul 2007 15:50

Beitragvon Linus » 7. Okt 2010 14:23

Bitte immer deinen vollständigen Code posten, nicht nur die Zeilen von denen du glaubst dass sie reichen.

Was ist mit deinem fileHandle? Stimmt das auch wirklich?

Wie auch immer, ich glaube du hast die falsche NXC-Funktion erwischt. WriteBytes schreibt, wie schon der Name sagt, Bytes. Du willst aber Texte, also Strings schreiben, oder?

Dann schau dir doch mal WriteString und WriteLnString an. Steht alles in der NXC Hilfe. http://bricxcc.sourceforge.net/nbc/nxcd ... index.html

Wenn du jemals mehr als sagen wir 5 if-Abfragen (in Ausnahmen meinetwegen auch Größenordnung 10 bis 20) für irgendwas benutzt, gibt es eine gute Chance dass du es schlecht bzw. unelegant gelöst hast.


Ich denke du könntest viel über solche generellen Probleme lernen, wenn du dir Bücher besorgst / ausleihst und durchliest, z.B. von der nächsten Bücherei. Die Programmiersprache ist dafür gar nicht soooo wichtig, es geht um die Konzepte. Visual Basic, Python, C, C++, C#, Java, das sind alles wunderbare Sprachen zum Lernen, genauso wie auch Pascal / Delphi und viele viele mehr.

Dann bekommst du irgendwann ein Feeling dafür, wie eine Funktion heißen könnte, die du brauchst, wonach du suchen musst, und ob sich eine Lösung "richtig anfühlt". Auf Dauer solltest du auch anfangen, englische Bücher zu lesen. Zum Englisch-Lernen eignen sich auch englische Serien & Filme :-)
RWTH - Mindstorms NXT Toolbox for MATLAB - www.mindstorms.rwth-aachen.de
Beispielvideo mit der Toolbox in Aktion

Linus
Enorm-Viel-Schreiber
Enorm-Viel-Schreiber
Beiträge: 512
Registriert: 13. Jul 2007 15:50

Beitragvon Linus » 7. Okt 2010 14:26

GANZ wichtig ist auch, dass du dich mit deiner Sprache / API vertraut machst. In diesem Fall: Schau dir in der NXC-Hilfe mal jeden Befehl an. Auch wenn du ihn nicht brauchst, dann hast du irgendwann im Hinterkopf "da war doch mal was".

Du musst mit der Hilfe / Doku auf jeden Fall umgehen können und sie quasi beim Proggen immer offen haben. Anders geht das nicht.

Das ist halt die Anleitung, die muss gelesen werden. Du kannst auch deinen Video- / DVD-Recorder nicht (oder nur recht schlecht) programmieren, wenn du die Anleitung nicht gelesen hast (wobei das heutzutage immer einfach wird, jajaja).

Weiter viel Spaß.
RWTH - Mindstorms NXT Toolbox for MATLAB - www.mindstorms.rwth-aachen.de
Beispielvideo mit der Toolbox in Aktion

Diphthong
Schreibt viel
Schreibt viel
Beiträge: 251
Registriert: 17. Aug 2010 15:53
Kontaktdaten:

Beitragvon Diphthong » 8. Okt 2010 21:21

OK, ich werde mir jetzt das Buch ,,Roboter programmieren mit NXC" kaufen. ich denke mal, dass das für den Anfang ganz gut ist!

Diphthong
Schreibt viel
Schreibt viel
Beiträge: 251
Registriert: 17. Aug 2010 15:53
Kontaktdaten:

Beitragvon Diphthong » 24. Okt 2010 19:38

Hallo,
hat jemand vielleicht eine Idee, wie man den Roboter an der silbernen Linie gerade ausrichten kann? Das Problem ist im Momen, dass derRoboter oft schräg auf dieLinie zu fährt, das verfälscht dann die folgenden Ultraschallwerte. Ich habe schon probiert, es mit until und while schleifen zu machen, auch mit if abfragen, zum Beispiel:

Code: Alles auswählen

if((Sensor(IN_1)LS_SILBER_MIN)&&(Sensor(IN_1)LS_SILBER_MAX)||(Sensor(IN_2)LS_SILBER_MIN)&&(Sensor(IN_2)LS_SILBER_MAX))
    {
      if((Sensor(IN_1)LS_SILBER_MIN)&&(Sensor(IN_1)LS_SILBER_MAX))
      {
        Off(OUT_C);
        OnFwd(OUT_B,motorspeed);
      }
        else
        {
            Off(OUT_B);
        }

      if((Sensor(IN_2)LS_SILBER_MIN)&&(Sensor(IN_2)LS_SILBER_MAX))
      {
        Off(OUT_B);
        OnFwd(OUT_C,motorspeed);
      }
        else
        {
            Off(OUT_B);
        }

      u.s.w.
Und dann das if durch while ersetzen und das else weg machen (off da alssen). Aber es funktioniert nicht, manchmal korrigiert er sich sogar falsch, wenn er doch gerade drauf zu kommt!
Wenn niemand eine Lösung weiß, werde ich mir wohl oder übel einen Kompass sensor kaufen müssen!

Beta Rex
Schreibt ab und zu
Schreibt ab und zu
Beiträge: 21
Registriert: 3. Okt 2010 19:03
Wohnort: Landkreis Vechta
Kontaktdaten:

Beitragvon Beta Rex » 24. Okt 2010 20:00

Ich habe das selbe Problem (welch ein wunder :D ), habe es auch schon ähnlich mit den selben Ideen probiert, doch auch leider mit ähnlichen Ergebnissen :(
Ich wäre ebenfalls auf weitere Ideen gespannt :)

Wenn niemand eine Lösung weiß, werde ich mir wohl oder übel einen Kompass sensor kaufen müssen!


Auch keine schlechte Idee, doch je nach lage des Parcours müsste man den Wert immer wieder ändern und die Ports vom NXT sind auch begrenzt...

MfG Beta Rex

Diphthong
Schreibt viel
Schreibt viel
Beiträge: 251
Registriert: 17. Aug 2010 15:53
Kontaktdaten:

Beitragvon Diphthong » 24. Okt 2010 20:26

Beta Rex hat geschrieben:Ich habe das selbe Problem (welch ein wunder :D ), habe es auch schon ähnlich mit den selben Ideen probiert, doch auch leider mit ähnlichen Ergebnissen :(
Ich wäre ebenfalls auf weitere Ideen gespannt :)

Wenn niemand eine Lösung weiß, werde ich mir wohl oder übel einen Kompass sensor kaufen müssen!


Auch keine schlechte Idee, doch je nach lage des Parcours müsste man den Wert immer wieder ändern und die Ports vom NXT sind auch begrenzt...

MfG Beta Rex

Man müsste den Kompass Sensor nur ein einziges mal kalibrieren, und zwar am Anfang des Parcours. Oder man macht es im Prog so, dass man den Roboter an der entsprechenden Stelle hinstellen soll ( vor der roten Zone) und er wird dann kalibriert.
Das mit den Ports ist auch nicht so ein Frises Problem, da ich ja im Moment drei analoge und einen digitalen habe, man kann ja analoge und digitale an einem Port hängen. Meine einzige Sorge ist der Preis! *heul*

Benutzeravatar
robofreak
Schreibt super viel
Schreibt super viel
Beiträge: 338
Registriert: 15. Okt 2008 16:22
Wohnort: Österreich/Graz
Kontaktdaten:

Beitragvon robofreak » 25. Okt 2010 10:01

es ist wahrscheinlich einfacher wenn ihr euch an der wand hinter der linie gerade ausrichtet
<img src="http://teamandroid.bplaced.net/upload/logo3_small.png" width="150px" border="0px" />

Die Deutsche Rechtschreibung ist Freeware, sprich, du kannst sie kostenlos nutzen. Allerdings ist sie nicht Open Source, d.h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

Diphthong
Schreibt viel
Schreibt viel
Beiträge: 251
Registriert: 17. Aug 2010 15:53
Kontaktdaten:

Beitragvon Diphthong » 25. Okt 2010 15:31

Dann könnte es aber sein, dass wenn der Roboter schräg auf die silberne Linie aufkommt auch schräg zurück fährt. Dann richtet er sich zwar gerade auf, berührt dann aber die Wand. Hier eine Skizze:
Bild
OK, jetzt, wo ich das Bild gemacht habe, merke ich selbt, dass der Roboter wohl kaum so stark abweichen wird. Ich werde es mal ausprobieren!

Benutzeravatar
robofreak
Schreibt super viel
Schreibt super viel
Beiträge: 338
Registriert: 15. Okt 2008 16:22
Wohnort: Österreich/Graz
Kontaktdaten:

Beitragvon robofreak » 25. Okt 2010 15:35

Achso, ich habe gedacht dein problem ist im oberen raum geradeaus an der wand entlang zu fahren. Wenn du auf der rampe schief kommst kannst du aber auch der wand anstatt der linie folgen EDIT:Mir ist gerade eingefallen das du keinen neigungssensor hast und so auch nicht weisst wann du auf der rampe bist...)
<img src="http://teamandroid.bplaced.net/upload/logo3_small.png" width="150px" border="0px" />



Die Deutsche Rechtschreibung ist Freeware, sprich, du kannst sie kostenlos nutzen. Allerdings ist sie nicht Open Source, d.h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

Beta Rex
Schreibt ab und zu
Schreibt ab und zu
Beiträge: 21
Registriert: 3. Okt 2010 19:03
Wohnort: Landkreis Vechta
Kontaktdaten:

Beitragvon Beta Rex » 25. Okt 2010 18:11

Nein, ich glaube es geht ihm schon um das gerade Fahren im oberen Raum, er sagte ja, dass sich dann die US-Werte verfälschen. Seine Idee war, wenn der Robo die Silberne Linie erkennt fährt der Robo rückwärts um sich an der Wand dahinter gerade auszurichten, indem er sich daran "drückt", so habe ich es zumindest verstanden :D Danach dann einfach geradeaus in den Oberen Raum!

MfG Beta Rex

Benutzeravatar
robofreak
Schreibt super viel
Schreibt super viel
Beiträge: 338
Registriert: 15. Okt 2008 16:22
Wohnort: Österreich/Graz
Kontaktdaten:

Beitragvon robofreak » 25. Okt 2010 18:57

dann hab ichs am anfang doch richtig verstanden, nur seine Skizze hat mich dann irgendwie verwirrt.
Es ist sicher besser wenn du dich an der seitlichen Wand IM Raum ausrichtestet.
<img src="http://teamandroid.bplaced.net/upload/logo3_small.png" width="150px" border="0px" />



Die Deutsche Rechtschreibung ist Freeware, sprich, du kannst sie kostenlos nutzen. Allerdings ist sie nicht Open Source, d.h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen.


Zurück zu „Unterricht & AG“

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste

Lego Mindstorms EV3, NXT und RCX Forum : Haftungsauschluss