Lok24
27.12.2019, 18:14

Editiert von
Lok24
27.12.2019, 18:15

+16Programmieren lernen in 5 Minuten

Hallo zusammen,

für alle die schon ein paar PoweredUp-Komponenten haben möchte ich mal zeigen wie schnell man da ein kleines Programm schreiben kann.

Hier im ersten Teil geht es um die Einrichtung
Wir brauchen:
Ein PoweredUp Hub (da sollte jedes tun)
Ein Motor (da sollte jeder tun, allerdings werden wir das Programm später verfeinern, dann braucht man Motoren, die ihre Stellung rückmelden, also Boost oder Technic)

Und wir wollen ein ja ein tolles MOC bewegen, hier ist es:

[image]



Und, last but not least, eine Installierte PoweredUp-App.

So, es geht los.
App starten, oben Links am Zahnrad auf Einstellungen,

[image]


Automatisch verbinden "aus" (nicht wischen, draufklicken)
Und natürlich die Palette auf "Experte"! (dazu später), Sprache nach Wahl.
Erste Erkenntnis: es gibt nirgendwo "speichern" Knöpfchen, alles wird immer sofort weggepackt, auch unsere Programme später.

Jetzt oben rechts "Erschaffen" wählen, und das fette rote "+"Feld für ein neues Programm. Namen vergeben, weiter, das linke Feld "Programmieren" wählen.

[image]



Dann sind wir hier:

[image]



Jetzt noch links oben auf das Bluetooth-Symbol klicken, das Hub einschalten und wenn es sich mit seinem Namen (einem anderen als bei mir) meldet drauftippen, dann wird es orange und dann grün... verbunden, LED am Hub leuchtet.

[image]


[image]



Und mit dem "schließen" Kreuz oben rechts wieder zum Programm.

So , die erste Minute ist um.
In der zweiten lernen wir, wie man das bedient.

Stay Tuned!



Dirk1313 , Thomas52xxx , Valkon , Flogo , RobbyRay , Saori , Cran , Plastik , sachsi , tomo , luther sloan , mcjw-s , tmctiger , cimddwc , JuL , Larry98 gefällt das (16 Mitglieder)


2 vorhergehende Beiträge sind ausgeblendet

Alle anzeigen Immer alle anzeigen Beitragsbaum

Lok24
28.12.2019, 14:36

Als Antwort auf den Beitrag von Lok24

Editiert von
Lok24
28.12.2019, 15:34

+4Re: Programmieren lernen in 5 Minuten - Minute 4

Permalink

1000steine-Code

BBCode

HTML


Hallo zusammen,

so, jetzt wird's ernst

Haben wir die ganze Zeit nur Befehle aneinandergereiht wollen wir diesmal
- eine Anforderung definieren
- das dazu passende Programm schreiben

Dazu brauchen wir so etwas wie im Bild, nämlich einen Motor mit zwei Anschlägen.

[image]


(das kann natürlich auch ganz anders aussehen)

Und es muss(!) ein Boost oder technic Motor sein, also ein "Tachomotor" denn nur die melden an das Hub zurück.

Und beim Programmieren darauf achten: der linke ist der falsche, wir brauchen den rechten (mit dem roten Kringel); bei den beiden Stop-Befehlen gibt es nur diese, egal für welchen Motortyp.

[image]



Die Aufgabe: hin und her fahren. Wozu?
Nun, Tor auf und zu machen, einen Aufzug hoch und runter oder oder...
Und nein, 3,725 sec durch Ausprobieren ermitteln und dann eintragen ist keine Lösung.

Damit waren wir ja gestartet:

[image]


Führt aber am Anschlag nur zu belasteter Mechanik und knurrenden Motoren.

Wie kommt man jetzt zu einer Lösung?
Einfach verbal formulieren, was zu tun ist und dann in Befehle umsetzen. Das genau ist Programmieren.

Also:
- Starte nach links
- mache nichts, warte, solange der Motor sich noch dreht
- wenn er steht schalte den Strom ab

Dazu können wir das Programm oben nehmen, aber die Zeit muss ja variabel sein. Daher mal die Sanduhr ersetzen durch die mit der dreieckigen Kerbe

[image]


Wenn man das laufen lässt sieht man den Sanduhr-Block gelb werden, hier steht das Programm gerade - und wartet auf eine Bedingung ....
... bitte rechts oben stoppen.

Wir wissen also jetzt auch: in die runden Aussparungen gehören meist Zahlen oder Buchstaben, in die dreieckigen Bedingungen.

Es fehlt die Bedingung wann das warten ein Ende haben soll, nämlich:
Wenn "Motorgeschwindigkeit = 0"
Wir finden im dem weißen Tab die Blöcke mit der Spitze oben, wir nehmen den mit "=".
Und schieben dann hier diesen winzigen Block in die linke 0, der Block liefert die Motorgeschwindigkeit.

[image]



Das sollte so aussehen:

[image]



Also: starte Motor an A mit 30, warte bis Motorgeschwindigkeit = 0, stoppe Motor an A.

Und das ... funktioniert leider nicht.

Warum? Es kommt der Motorbefehl, dann die Stop-Bedingung.
So schnell liefert der Motor als Wert aber noch 0, der Motor stoppt.
Eine Sanduhr mit 0.1 sec (besser 0.2sec) schafft Abhilfe:
Motor irgendwo in die Mitte stellen und dann das hier starten:

[image]



Das ganze nochmal duplizieren und hinterdranhängen, beim zweiten Motorbefehl "30" ersetzen durch "-30".
Zum Duplizieren auf die 3 Punkte im weißen Kreis unten rechts tippen, dann das + Symbol ganz links, dann den linken Motorblock antippen.

Sanduhren einstreuen, Schleife drum, aber das hatten wir ja schon.

[image]



So. Wer noch Lust hat kann mal mit den beiden verschiedenen STOP-Blöcken experimentieren. Der mit dem roten Quadrat schaltet den Motor ab und lässt ihn auslaufen, der mit zusätzlichen roten Ausrufezeichen bremst ihn schlagartig.



Grüße

Werner



Dirk1313 , Plastik , tmctiger , JuL gefällt das (4 Mitglieder)


Lok24
28.12.2019, 17:15

Als Antwort auf den Beitrag von Lok24

+4Re: Programmieren lernen in 5 Minuten - Minute 5

Hallo,

wie versprochen programmieren wir jetzt noch den Sensor dran, ein Farbsensor, angeschlossen an Port B.

(Vor den Versuchen bitte den Motor mit der Hand immer weg vom Anschlag drehen und immer dran denken, beim Sensor "B" einzutragen)

Hier ist der erste Versuch, der Motor soll loslaufen, wenn der Sensor rot erkennt. Das ist unser bekanntes Programm, nur nach dem Startblock ist die "Bedingungssanduhr" dazu gekommen, die kennen wir auch schon.
Sie wartet auf hier auf "rot".

[image]



Der kleine absichtlich freischwebende Block rechts zeigt die Sensorfarbe auf dem Display.
Das funktioniert, aber wie erwartet genau einmal.

Also flugs eine Schleife drum:

[image]



Das geht auch, aber wenn der Sensor weiter rot erkennt wird das immer wieder gestartet, nicht gut.
Also nochmal überlegen:
- Warte auf rot
- bewegen
- Warte bis rot weg

Das geht mit noch einer Bedingung am Ende:

[image]



Wenn das so aussieht wie oben:
Alles einmal kopieren und im zweiten Teil 2 x aus "rot" "grün" machen und einmal "30" in "-30" ändern.

So sieht das jetzt aus:

[image]



Aber dann müsste ich immer wissen was ich starten soll?
Nein.
Man kann die Startköpfe beide nacheinander drücken, oder noch viel einfacher oben rechts auf den grünen Pfeil, dann werden alle(!) Startblöcke auf der Oberfläche gestartete.

Jetzt abwechselnd rot und grün vor den Sensor halten....

Grüße

Werner

PS.: das kann man noch auf dutzende Arten anders machen, es gibt auch andere Blöcke die einem einiges abnehmen, aber die 5min sind rum....



Dirk1313 , Plastik , tmctiger , JuL gefällt das (4 Mitglieder)


simtau
28.12.2019, 20:02

Als Antwort auf den Beitrag von Lok24

Re: Programmieren lernen in 5 Minuten - Minute 5

Erst einmal Dankeschön für die Arbeit.

Wenn ich diesen vertikalen Spaghetticode sehe dann....
Naja ich kann es ja verstehen, dass Lego eine grafische Programmierung einer Textbasierten bevorzugt.
Aber ich finde diese Form einfach unnötig kompliziert und unverständlich. Ich sage nur ich muss noch 0.x sek warten weil das Programm sonst zu schnell den Motor stopt.
Da sollen Kinder von selber drauf kommen. Ohne Programmierkenntisse oder Dokumentation?
Ich habe Zweifel.
Irgendwie ist es von hinten durch die Brust ins Auge programmieren.

Meine Frage wäre.
Kann man auch zwei Stränge parallel laufen lassen.
Beispiel.
Ich habe zwei Garagentore mit je einem Motor und einem Sensor. Angeschlossen an einen Hub.
Und beide sollen gleichzeitig arbeiten.
Ginge das auch?

Mit besten Grüßen
Simon



Lok24
29.12.2019, 09:05

Als Antwort auf den Beitrag von simtau

Editiert von
Lok24
29.12.2019, 09:55

+1Re: Programmieren lernen in 5 Minuten - Minute 5

Hallo Simon,

simtau hat geschrieben:

Erst einmal Dankeschön für die Arbeit.

gerne, vielleicht hilft es dem einen oder anderen, einen Einstieg zu finden.

simtau hat geschrieben:
Wenn ich diesen vertikalen Spaghetticode sehe dann....

- Es ist horizontal
- Es ist genau kein Spaghetticode, denn es ist absolut linear
(Spaghetticode geht aber auch, mit den Flags)

simtau hat geschrieben:
Aber ich finde diese Form einfach unnötig kompliziert und unverständlich.

Wie wäre es einfacher? Scratch ist viel schlimmer.

simtau hat geschrieben:
Ich sage nur ich muss noch 0.x sek warten weil das Programm sonst zu schnell den Motor stopt.
Da sollen Kinder von selber drauf kommen.

Ja, natürlich.
Man spielt das mit zwei Kindern nach.
Das eine ruft "Lauf" und wartet es bis das andere Kind sich nicht bewegt.
Das ist aber *sofort", weil das "empfangende Kind" eine Reaktionszeit (Latenz) hat.
Man muss also einen Moment warten, bis es sich in Bewegung setzt.
Oder bis es sich meldet: Ich laufe jetzt (das wäre eine Programmalternative, die einfacher zu erklären wäre)

Und sie müssen auch nicht von selber drauf kommen, sie können jemand fragen, oder experimentieren: bis wohin läuft das Programm? An welcher Stelle macht es nicht das was ich möchte? Wo könnte die Ursache sein?

(Und Du hättest dasselbe Problem auch in Python oder C#, es hat gar nichts mit der "Sprache" zu tun)

simtau hat geschrieben:
Irgendwie ist es von hinten durch die Brust ins Auge programmieren.

Das könnte auch an mir liegen.....

simtau hat geschrieben:
Meine Frage wäre.
Kann man auch zwei Stränge parallel laufen lassen.
??? Genau das wird doch in meinem letzten Beitrag gezeigt?
Die Antwort ist "ja", das läuft wohl intern alles in eigenen Threads ab.
Sonst könnte man ja keinerlei Autos oder Roboter steuern.

Grüße

Werner



Dirk1313 gefällt das


Beobachter74
30.12.2019, 09:02

Als Antwort auf den Beitrag von Lok24

Re: Programmieren lernen in 5 Minuten

Gehen eigentlich mehrere Hubs in einem Programm?
Wohl nicht oder?
Szenario wäre sensorgesteuerter Wendezug Betrieb.
Sensor an stationärem Hub 2 steuert Motor an „rollendem“ Hub 1.
Es sei denn man baut den Sensor mit in den Zug ein!



Lok24
30.12.2019, 09:13

Als Antwort auf den Beitrag von Beobachter74

Editiert von
Lok24
30.12.2019, 09:17

+2Re: Programmieren lernen in 5 Minuten

Hallo,

Beobachter74 hat geschrieben:

Gehen eigentlich mehrere Hubs in einem Programm?
Wohl nicht oder?


Warum so pessimistisch?
Du suchst sowas hier, 2 hubs, 8 Motoren:


Es gehen bis zu vier Hubs.

Beobachter74 hat geschrieben:

Es sei denn man baut den Sensor mit in den Zug ein!

genau, sowas hier:



Beide Videos sind übrigens von mir

Falls Du noch Tipps dazu braucht: mach eine neuen Thread auf (dann finden das auch andere später einfacher über die Suche) und wie schauen gemeinsam, was wie geht!

(Für Deinen Vorschlag brauchte man glaube ich 2 stationäre Hubs, an jedem Ende einen...)

Grüße

Werner



Beobachter74 , Dirk1313 gefällt das


Beobachter74
31.12.2019, 10:13

Als Antwort auf den Beitrag von Lok24

Re: Programmieren lernen in 5 Minuten

Aaah!
Na da entdecke einer die Möglichkeiten!
War mir nicht klar. Danke dir!
Ich habe im Moment kein konkretes Projekt. Zwei Dinge habe ich allerdings im Kopf: Wendezug und Blocksteuerung.
Trigger war übrigens die neue Produktlinie von trixbrix „Control / Automation“.
Wenn es soweit ist, dann neuer Fred...



Lok24
31.12.2019, 10:20

Als Antwort auf den Beitrag von Beobachter74

Editiert von
Lok24
31.12.2019, 10:33

Re: Programmieren lernen in 5 Minuten

Beobachter74 hat geschrieben:

Aaah!
Na da entdecke einer die Möglichkeiten!

Das ist der richtige Geist.

Bei Fragen immer wieder hier melden, ich helfe gerne, wenn ich kann.



Legoholic
31.12.2019, 10:50

Als Antwort auf den Beitrag von Lok24

+2Re: Programmieren lernen in 5 Minuten

Auch wenn ich mich noch nicht außerhalb der Power Functions Welt gewagt habe: vielen, vielen Dank für Deine Mühe! Und wenn Du schon den richtigen Geist ansprichst, so ist der Geist Deines Beitrags genau derjenige, der in diesem Forum vorherrschen möge.



Dirk1313 , Plastik gefällt das


LoonyBrick
03.01.2020, 07:04

Als Antwort auf den Beitrag von Lok24

Re: Programmieren lernen in 5 Minuten

Hallo Werner,

erstmal vielen Dank für diese gute Übersicht über die Powered Up App. Habe gestern erfolgreich ein bisschen rumspielen können mit einem Technic Hub, 2 Fahrmotoren (Dark Bluish Gray Electric, Motor - Powered Up, XL) und einem Lenkmotor (Dark Bluish Gray Electric, Motor - Powered Up, L) aus dem 42099 Set. Was ich aber noch nicht gefunden bzw, hingekriegt habe: wie stelle ich einen Motor in Nullstellung um z.B. die Lenkung wieder gerade zu kriegen?
Gibt es eigentlich eine Hilfe innerhalb oder außerhalb der App, der die Programmblöcke genauer erklärt? Ich habe noch nicht so ganz verstanden, was z.B. bei diesem Block definiert werden kann:

[image]

Der Motor an Anschluss C wird angesprochen und soll sich 15 mal entgegen der Standardrichtung drehen, aber was wird mit der zweiten 15 definiert?

Danke schonmal im Voraus .

VG Robert


Meine Sets (unvollständig) bei Rebrickable


8 nachfolgende Beiträge sind ausgeblendet

Alle anzeigen Immer alle anzeigen

Gesamter Thread: