voyagetom
13.10.2015, 22:56

Frage zu NXT 2.0 Programmierung

Hallo liebe Lego Freaks,

Da ich immer nur sporadisch kleine Programme am NXT 2.0 erstellt habe, habe ich nun ein paar detailliertere Fragen an die "echten" Programmierer:

Beim Warte Block muss ich eine Zeit angeben. Bisher habe ich immer einen festen Wert angegeben. Ein aktuelles Projekt erfordert aber nun, dass ich die Zeit als Variable eingeben sollte während dem laufenden Betrieb. Am liebsten die Variable abfragen gleich zu Beginn nach dem Programmstart und dann in den Zeitblock übernehmen. Geht sowas und wenn ja, dann wie ? Die NXT Tastatur hat ja nun auch keine Zahlen zur Verfügung, aber mit den Pfeiltasten könnte man ja wie bei einem Radiowecker die Zeit mit +/- korrigieren bzw. einstellen, z.B. ausgehend von einem fest vorgegebenen Wert 50sec. mit < > das "Feintuning" vornehmen. Dabei keine fremden Hilfsmittel, wie Laptop, Smartfone o.ä., nur die NXT Tasten.

Das selbe müsste ich dann noch haben für die Blöcke der Motorsteuerung. Auch dort will ich Laufzeiten in 0.1 sec. Schritten für die Laufzeit Dauer einstellen.

Für Anregungen, Tips, Anleitungen etc. bin ich Dankbar.

Viele Grüsse,

Tom


Video Channel: http://www.youtube.com/us...oyagetom?feature=watch

brickshelf: http://www.brickshelf.com...ery.cgi?m=voyagetom-01

Flickr: https://www.flickr.com/ph...with/72157711557227973


8 vorhergehende Beiträge sind ausgeblendet

Alle anzeigen Immer alle anzeigen Beitragsbaum

Lok24
17.10.2015, 08:49

Als Antwort auf den Beitrag von voyagetom

+1Re: Frage zu NXT 2.0 Programmierung

Hallo Tom,

Es muss ja auch einen Grund haben, warum die Programmierer üblicherweise erst ihre Variablen "initialisieren"...?


Ja, schindet Eindruck

Es gibt genügend Programmiersprachen wo man Variablen nicht deklarieren muss.
Früher war das wichtig(er) für das Reservieren von Speicherplatz, aber das interessiert ja keinen mehr.
Außerdem bei der objektorientierten Programmierung, wo die Variable "A" ja keine Zahl, sondern ein Netzwerkanschluss oder ein Word-Dokument sein könnte, da wäre es schon gut zu wissen welche Eigenschaften und Methoden sie hat, die erbt sie über die Deklaration.

Probiers mal mit den Text-Files, geht auch beim NXT.

Grüße

Werner



maydayartist gefällt das


voyagetom
20.10.2015, 01:12

Als Antwort auf den Beitrag von freakwave

Re: Frage zu NXT 2.0 Programmierung

Hi,

also in der Anleitung/Hilfe zum Variablenblock steht folgendes:

"Informationsaustausch zwischen einem Programm und einem Eigenen Block"

Wenn du Daten zwischen deinem Hauptprogramm und einem Eigenen Block (bzw. zwischen zwei .rbt-Dateien) austauschen willst, kannst du dies mit zwei Schritten erreichen:

Definiere dieselbe Variable (gleicher Name, gleicher Datentyp) im Hauptprogramm sowie im Eigenen Block.
Benutze diese Variable in den Variablen-Blöcken des Hauptprogramms sowie im Eigenen Block.
Der Schreib- und Lesezugriff auf diese Variable erfolgt nun von allen Stellen auf denselben Speicherort im NXT.

--------------------------------------------------

Ich krieg's aber irgendwie nicht hin...

Ich könnte auch noch damit leben, jedes mal beim Start die Daten neu einzugeben - ist halt weniger komfortabel.

Der link für die Variablen Definition mit +/- war sehr Hilfreich, das klappt.
Allerdings bleibt beim Wechsel von 10 auf 9 die Null stehen im Display, ähnliches gilt bei Vorzeichenwechsel in den neg. Bereich.
Ich denke aber, ein Display Reset an der richtigen Stelle nochmal eingesetzt schafft Abhilfe.

Jetzt habe ich aber ein anderes Problem:

Die Zahlen-Variablen "Zeit" und "Leistung" mit "Auslesen" vor den Motor Block gesetzt...
Datenleitungen gezogen zu den entsprechenden Stellen am Motor Block, Eingangsseite.
Datenleitungen sind gelb, also meines Erachtens ok. Geltungsbereiche für Zeit und Leistung sind eingehalten.
Die entsprechenden Felder im Motor Block werden aber nicht ausgegraut (immer noch editierbar) und beim Testlauf macht der Motor keinen Muks...
Die Edit Werte im Motor Block scheint er also auch nicht zu nehmen.

Auch beim Warte Block (Zeit in sec.) setze ich eine Zahlen Variable (auslesen) davor und verbinde sie mit dem Wecker. Das geht und die Leitung wird gelb, obwohl der Wecker keinen Dateneingang hat. Der Wecker nimmt die Zahl aber auch nicht an und graut auch das Editier Feld nicht aus...




Grüsse,

Tom


Video Channel: http://www.youtube.com/us...oyagetom?feature=watch

brickshelf: http://www.brickshelf.com...ery.cgi?m=voyagetom-01

Flickr: https://www.flickr.com/ph...with/72157711557227973


Lok24
20.10.2015, 09:22

Als Antwort auf den Beitrag von voyagetom

Editiert von
Lok24
20.10.2015, 09:22

Re: Frage zu NXT 2.0 Programmierung

Hallo Tom,

wer soll Dir da helfen?

Wie man die Daten über das Programmende rettet hatte ich Dir schon geschrieben, leider keine Antwort, ob das geklappt hat.

Um "Programmfehler" zu suchen braucht man das Programm, eine Beschreibung wie Deine hilft mir leider nicht.

Und eine Definition, was der "Fehler" ist. Ich kenne sehr viel Programme, die zwar fehlerfrei sind, aber nicht machen, was der Programmierer erwartet

Ich habe leider nicht einmal eine Information, welche "Programmiersprache" Du benutzt.
Stelle das Programm mal zum Download ein, vielleicht kann ich es nachvollziehen.

Grüße

Werner



freakwave
20.10.2015, 10:05

Als Antwort auf den Beitrag von Lok24

Re: Frage zu NXT 2.0 Programmierung

Tom benutzt das NXT-G, das grafische Interface out-of-the Box sozusagen.

Das mit der Dauer am Motor ist so eine Sache. Ich habe gelesen, kann leider nicht mehr sagen wo, dass der Verbinder auf dei Uhr (logischerweise Zeit) in Wirklichkeit ein Winkel ist. Das fiel mir auf als ich einen Motor eine zufällige Dauer laufen lassen wollte, Zahl zwischen 5 und 20, also gedachten 5 und 20 Sekunden, Motor machte aber nur einen schüternen Muckser, nicht mehr.

Ich muss in den nächsten Tagen mein MOC auch zum Leben erwecken und ein wenig programmieren bzw. Linien ziehen, dann kann ich mehr sagen.

Gerald


My Flickr
Blog zum Trainposter V2
LDraw Teile Update 2019-01


Lok24
20.10.2015, 10:13

Als Antwort auf den Beitrag von freakwave

Re: Frage zu NXT 2.0 Programmierung

Hallo Gerald,

I see!

Sieht meinem LabView für EV3 ähnlich aber anders.
Er könnte aber hier mal einen Screenshot seines Programms einstellen?
Wird sich doch zum Laufen bringen lassen....

Grüße

Werner



voyagetom
20.10.2015, 19:13

Als Antwort auf den Beitrag von Lok24

Re: Frage zu NXT 2.0 Programmierung

Hallo Werner,

ich benutze die "originale" Software, die beim NXT 2.0 dabei war. Wie sie genau bezeichnet wird, weiss ich nicht.
Screenshot würde ich ja machen, aber das Programm ist 1km lang. Die Bedienoberfläche finde ich nicht sehr komfortabel. Vielleicht genügt ja aber ein Ausschnitt...

Besser wäre es, das Programm hochzuladen. Leider gibt's hier im Forum keine Funktion oder ich kenne sie nicht...

Wie man die Daten über das Programmende rettet hatte ich Dir schon geschrieben, leider keine Antwort, ob das geklappt hat.

Vielleicht habe ich diesen ursprünglichen Hinweis nicht richtig verstanden ?
Auf den Hinweis in der NXT Hilfe bin ich eher zufällig gestossen, daher hab ich den mal hier veröffentlicht. Es könnte ja sein, dass ihr den auch nicht kennt. Ich hatte ja das Gefühl, dass wir alle anfangs erstmal spekuliert haben, ob Variablen weiterverwendbar sind in anderen Programmen.
Die Antwort, ob das geklappt hat war ja: " Ich krieg das nicht hin! "
Ich verstehe auch nicht, warum ich eine Variable nur als Text retten kann. Lässt die sich denn auch wieder in eine Zahl zurückwandeln bei Bedarf ? Das wäre ja für mich entscheidend wichtig. Daher hab ich es auch nicht mit Text probiert, sondern gemäss Hilfe NXT 2.0 versucht umzusetzen. Dass es mit Text geht hattest Du ja geschrieben und das glaube ich Dir ja auch .



[image]




Grüsse,

Tom


Video Channel: http://www.youtube.com/us...oyagetom?feature=watch

brickshelf: http://www.brickshelf.com...ery.cgi?m=voyagetom-01

Flickr: https://www.flickr.com/ph...with/72157711557227973


JuL
03.11.2015, 22:53

Als Antwort auf den Beitrag von Lok24

Re: Frage zu NXT 2.0 Programmierung

Saluton!

Ein bißchen Off-Topic, aber …

Es muss ja auch einen Grund haben, warum die Programmierer üblicherweise erst ihre Variablen "initialisieren"...?

Ja, schindet Eindruck

Ähm, nicht ganz.

Es gibt genügend Programmiersprachen wo man Variablen nicht deklarieren muss.

Ja, aber deklarieren ≠ initialisieren.
Mit ersterem macht man dem Compiler eine Variable bekannt, um …

Früher war das wichtig(er) für das Reservieren von Speicherplatz, aber das interessiert ja keinen mehr.

… und ob der Compiler für die Variable nun 1, 2, 10 oder 1000 Byte veranschlagen muß,
interessiert ihn immer noch – und es geht dabei ja nicht nur darum, Speicherplatz zu
sparen, sondern auch darum, was man mit ihr machen kann. Die Sprachen, wo man nicht
deklarieren muß, müssen halt bei der Benutzung aus dem Zusammenhang herausfinden,
was das sein soll.

Und mit dem Initialisieren gibt man ihr einen Wert, sonst hat sie entweder gar keinen
oder möglicherweise einen völlig unsinnigen.

Außerdem bei der objektorientierten Programmierung, wo die Variable "A" ja keine Zahl, sondern ein Netzwerkanschluss oder ein Word-Dokument sein könnte, da wäre es schon gut zu wissen welche Eigenschaften und Methoden sie hat, die erbt sie über die Deklaration.

Eben, und das gilt auch für nichtobjektorientierte Sprachen: Zwei Texte durcheinander
zu dividieren könnte witzig werden.

Ad LEGO!
JuL


„Altgrau“ facere necesse est.
Wer Rechtschreibfehler findet, darf sie mir nennen. Ich lerne nämlich gerne dazu (ich bin allerdings „Altschreiber“).


Lok24
04.11.2015, 08:59

Als Antwort auf den Beitrag von JuL

Editiert von
Lok24
04.11.2015, 09:01

Re: Frage zu NXT 2.0 Programmierung

Moin,

Es gibt genügend Programmiersprachen wo man Variablen nicht deklarieren muss.

Ja, aber deklarieren ≠ initialisieren.


Sicher, aber da das "initialisieren" in "" stand ging ich davon aus, dass das gemeint ist.
Ich frage mich gerade, ob ich eine Programmiersprache kenne, in der man Variablen initialisieren muss, ohne sie vorher zu deklarieren, eher nein.

Früher war das wichtig(er) für das Reservieren von Speicherplatz, aber das interessiert ja keinen mehr.
… und ob der Compiler für die Variable nun 1, 2, 10 oder 1000 Byte veranschlagen muß,
interessiert ihn immer noch – und es geht dabei ja nicht nur darum, Speicherplatz zu
sparen, sondern auch darum, was man mit ihr machen kann. Die Sprachen, wo man nicht
deklarieren muß, müssen halt bei der Benutzung aus dem Zusammenhang herausfinden,
was das sein soll.


Eben, und das tun sie sehr zuverlässig. Und initialisieren die Variable auch, Beispiel:
Typ Variant: NULL
Typ Integer: 0
Typ String: ""

Und mit dem Initialisieren gibt man ihr einen Wert, sonst hat sie entweder gar keinen
oder möglicherweise einen völlig unsinnigen.


Oder man überlässt es der Programmiersprache.....
Oft ist es wichtig, zwischen NULL und 0 zu unterscheiden.

Eben, und das gilt auch für nichtobjektorientierte Sprachen: Zwei Texte durcheinander
zu dividieren könnte witzig werden.


????
Warum ich sollte ich von einer Variablen vom Typ "Datum" nicht eine Variable vom Typ "Integer" abziehen können?

Grüße

Werner



JuL
21.11.2015, 20:24

Als Antwort auf den Beitrag von Lok24

Re: Frage zu NXT 2.0 Programmierung

Saluton!

Es gibt genügend Programmiersprachen wo man Variablen nicht deklarieren muss.

Ja, aber deklarieren ≠ initialisieren.

Ich frage mich gerade, ob ich eine Programmiersprache kenne, in der man Variablen initialisieren muss, ohne sie vorher zu deklarieren, eher nein.

Hm… ich meine, es gäbe Sprachen, in denen Du eine Variable dadurch „in Betrieb nimmst“
daß Du sie bei ihrem ersten Auftreten initialisierst, wodurch dann der Compiler/Interpreter
auch weiß, welchen Typ sie hat, s.u.

Früher war das wichtig(er) für das Reservieren von Speicherplatz, aber das interessiert ja keinen mehr.

… und ob der Compiler für die Variable nun 1, 2, 10 oder 1000 Byte veranschlagen muß,
interessiert ihn immer noch – und es geht dabei ja nicht nur darum, Speicherplatz zu
sparen, sondern auch darum, was man mit ihr machen kann. Die Sprachen, wo man nicht
deklarieren muß, müssen halt bei der Benutzung aus dem Zusammenhang herausfinden,
was das sein soll.

Eben, und das tun sie sehr zuverlässig. Und initialisieren die Variable auch, Beispiel:
Typ Variant: NULL
Typ Integer: 0
Typ String: ""

Hm… eher so:

alpha = arcsin(k*pi); -- erstes Auftreten von alpha im Quelltext, & wegen des Arcsin bestimmt der Compiler sie als Fließkommazahl.
ausgabetext = "Das darfst Du nicht"; -- erstes Auftreten von ausgabetext, offenbar eine Zeichenkette.


Und mit dem Initialisieren gibt man ihr einen Wert, sonst hat sie entweder gar keinen
oder möglicherweise einen völlig unsinnigen.

Oder man überlässt es der Programmiersprache.....
Oft ist es wichtig, zwischen NULL und 0 zu unterscheiden.


Eben, und das gilt auch für nichtobjektorientierte Sprachen: Zwei Texte durcheinander
zu dividieren könnte witzig werden.

????
Warum ich sollte ich von einer Variablen vom Typ "Datum" nicht eine Variable vom Typ "Integer" abziehen können?

Erstens, bei meinem Textbeispiel sollte der Compiler ja auch merken, daß das üblicherweise
nicht geht und zweitens müßte man ihm auch beim Datum schon sagen, wie er das machen soll.
Wenn die Tage sozusagen aufgebraucht sind, Übertrag in den Monat, u.s.w.
Und es gibt ja einige Datumsformate: Jahr zuerst oder zuletzt, Monate als Zahl oder Wort, …
Oder meintest Du, daß das Datum einfach als Ganzzahl gespeichert wird? Wie ,,1042015''
(ist das nun der 1.4. oder der 10.4.? ). Dann kann man das natürlich als Zahl betrachten
und eine andere davon abziehen, egal ob das als Datum dann noch sinnvoll ist, klar. Ich
dachte da aber auch mehr an etwas wie:
Datum = RECORD tag: [0..31]; monat: [0..12]; jahr: INTEGER END;

Ad LEGO!
JuL


„Altgrau“ facere necesse est.
Wer Rechtschreibfehler findet, darf sie mir nennen. Ich lerne nämlich gerne dazu (ich bin allerdings „Altschreiber“).


Kirk
22.11.2015, 02:21

Als Antwort auf den Beitrag von Lok24

Re: Frage zu NXT 2.0 Programmierung - OT: Variablen initialisieren

Ich frage mich gerade, ob ich eine Programmiersprache kenne, in der man Variablen initialisieren muss, ohne sie vorher zu deklarieren, eher nein.


Hallo Werner,

ob Du solche Sprachen kennst, weiß ich natürlich nicht, aber mir fallen ganz spontan MSDOS-Batch-Dateien ein: Wenn man dort im selben DOS-Fenster ein Programm mehrmals laufen läßt ohne eine Variable zu initalisieren, kann das Ergebnis recht verblüffent ausfallen.

Alternativ gäbe es da noch meine Lieblingssprache PERL: standardmäßig kann man dort sämtliche Variablen ohne Initialisierung benutzen, wobei sie per Definition (je nach Kontext) 0 oder "" zurück liefern. Es ist allerdings empfehlenswert, mit "use strict;" dafür zu sorgen, daß eine Deklaration und gleichzeitige Initialisierung erfolgen muß. Beispiel:
my $Text = "Beispiel";
my @Tag = ("Mo,"Di","Mi","Do","Fr","Sa","So");
my %Bio = ("Hund"=>"Tier", "Rose"=>"Blume");
Da es in PERL allerdings keine Variablentypen gibt, sondern alle Variablen (in Deinem Sprachgebrauch) vom Typ "variant" sind, bedeutet die Deklaration mit "my" lediglich, daß diese Variable nur lokal in dieser Funktion gültig ist. Gleichzeitig legt das Dollar-Zeichen fest, daß es sich um ein eindimensionales Scalar (vulgo: normale Variable) handelt. Steht dort ein "@" oder "%", wird ein Array oder Hash (=Array mit String-basierter Indizierung) deklariert.

Gruß

Thomas


\\//_ Build long and ℘rosper!


Gesamter Thread: