Matroids Matheplanet Forum Index
Moderiert von matph
Informatik » Programmieren » Zeitachse bei Blockly
Autor
Beruf Zeitachse bei Blockly
sulky
Aktiv Letzter Besuch: im letzten Monat
Dabei seit: 21.12.2009
Mitteilungen: 1820
  Themenstart: 2022-08-28

Hallo Zusammen, Vorbemerkung: Gemäss Benutzerheinweise ist dieses Spielzeug vorgesehen für Kinder ab 6 Jahren und nicht geeignet für Kinder unter drei Jahren. Ich habe das Vergnügen mit 14 Jährigen Kindern einen Roboter zu bauen und bin gerade am Schwitzen. Ich arbeite (oder spiele) mit "Thymio". EIn einfacher Roboter mit einer Vielzahl von Sensoren und auch einigen Outputgeräten. Zum Programmieren wird "Blocky" verwendet. Blocky ist nicht eine Programmiersprache, sondern vielmehr ein Program, durch welches ich Code durch Mausklicks erzeugen kann. Ich gehe nicht davon aus, dass hier auf MP allzuviele Leute Thymio und Blocky kennen. Aber es hat bestimmt leute, welche aus der allgmeneinen Erfahrung mit Programmierung sofort verstehen, was gemeint ist. Folgendes Programm will ich erzeugen: 1. Schalte Motor ein 2. Warte 3 Sekunden 3. Schalte Motor aus Ende. Leider konnte ich bei Blocky die Zeitachse nicht finden. Dafür finde ich einen "Wecker". Ich gehe nicht davon aus, dass man diesen dazu verwenden soll. Nun: https://www.matheplanet.de/matheplanet/nuke/html/uploads/b/27687_blockly.png Dies funktioniert zwar, aber so ist es nicht gemeint. Der Braune Block, wird immer dann ausgeführt, wenn der erste Wecker abgelaufen ist. Betonung auf "immer". Wäre das Program länger und hätte mehr befehle, so würde dies stören. Wie löst man dieses Problem mit der Zeitachse? Ich erinnere mich, wie ich vor vielen Jahren ein Program nit openGL geschrieben habe. Dort habe ich in der Hauptschleife einfach eine Zeitvariable: t=t+0.0001; hinzugeführt. Ich weiss nicht ob der Profi dies auch so macht, aber funktioniert. Wie löst man das Zeit problem bei Blocky?


   Profil
gonz
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 16.02.2013
Mitteilungen: 4282
Wohnort: Harz
  Beitrag No.1, eingetragen 2022-08-28

Hallo sulky, doch es sieht so aus als wenn der Wecker das geeignete Werkzeug zu dem gewünschten Zweck wäre. Was stört dich daran denn genau, dass die Ausführung bei Ablauf des Weckers "immer" erfolgt? Aktuell sieht es für mich so aus, als wenn du es genau so machen würdest, wie es gedacht ist. Vielleicht gibt es ja auch auch die Möglichkeit, den Wecker zu deaktivieren, wenn er nicht mehr benötigt wird. Grüße, Gerhard/Gonz


   Profil
sulky
Aktiv Letzter Besuch: im letzten Monat
Dabei seit: 21.12.2009
Mitteilungen: 1820
  Beitrag No.2, vom Themenstarter, eingetragen 2022-08-28

Hallo Gonz, Vielen Dank für deine Arbeit. Ja, eben, wenn ich z.B. weiterfahren würde, dass ... 5. Fahre Drehe nach Rechts 6. Setze den Wecker wieder auf 3 Sekunden 7. Fahre Vorwärts 8. Wenn der Wecker abgelaufen ist, dann schalte die Musik an. Was geschieht dann? Während die Musik eingeschaltet wird, schaltet sich der Motor aus. Dies wollte ich aber nicht.


   Profil
cramilu
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 09.06.2019
Mitteilungen: 1735
Wohnort: Schwäbischer Wald, seit 1989 freiwilliges Exil in Bierfranken
  Beitrag No.3, eingetragen 2022-08-28

Hi sulky 😉 1. Hast Du schon die diversen Blockly-Foren durchstöbert? 2. Was war Befehl "4."? 3. Soweit ich das verstanden habe, gibt es den Wecker nicht; die Befehlsspezifikation deutet auf 'ersten', 'zweiten' usw. Wecker hin. Kann es daran liegen?


   Profil
sulky
Aktiv Letzter Besuch: im letzten Monat
Dabei seit: 21.12.2009
Mitteilungen: 1820
  Beitrag No.4, vom Themenstarter, eingetragen 2022-08-28

Hallo Caramilu, Ja, 4. habe ich vergessen. Ich meine einfach, dass ich eine Aktion, z.B. eine Strecke zurücklegen, oder Musik abspielen. eine gewisse Zeit machen will. Danach ist die Sache wieder vorbei. Dazu will ich nicht Programmbausteine verwenden, welche mein Programm zu anderen Zeitpunkten beeinflussen. Wenn ich aber verwende: if(Wecker abgelaufen) Then Schalte_Motor_aus; Das geht auch nicht. Im Moment, wenn das Programm bei "if" steht, ist nämlich der Wecker noch nicht abgelaufen und fürht folglich den Befehl nicht aus. Versteht man aus dem Kontext, was ich mit dem Zeitachsenproblem meine? Ich will wirklich nicht mehr machen, als z.B. Fahre 3 Sekunden Vorwärts Halte an Fahre 3 Sekunden nach links Halte an Fahre 3 Sekunden zürück Halten an Fahre 3 Sekunden nach Rechts. Ganz zu Beginn der infomatischen Ausbildung wurde mir ein Prgramm als eine Sequenz von Befehlen beigebracht. Später (musste ich mir selbst beibringen) im Programmieren von Windowsprogrammen, war dies "Scheinbar" nicht der Fall, weil das Pragram "Statisch" auf Ereignisse wartete. Jetzt bringe ich dies einfach nicht unter einen Hut. Ich hätte dies damals in openGL so gelöst: double t=0: Schleife { if(0


   Profil
sulky
Aktiv Letzter Besuch: im letzten Monat
Dabei seit: 21.12.2009
Mitteilungen: 1820
  Beitrag No.5, vom Themenstarter, eingetragen 2022-08-28

https://www.matheplanet.de/matheplanet/nuke/html/uploads/b/27687_blocky.png Ich benötige einfach einen "Sobald" Befehl anstatt einen "IF" befehl. If(Wecker abgelaufen) Prüft nur, ob der Wecker abgelaufen ist oder nicht. ist er noch nicht abgelaufen geht das Programm weiter. Den Befehl "Sobald", den habe ich ja, aber der ist Braun. Braun verstehe ich so, dass er nicht in der Sequenz steht, sondern im ganzen Programm gültig ist. Ich brauche aber einen Blauen Block, welcher in die Sequenz eingebaut werden kann und danach den weiteren Programmverlauf nicht weiter beeinflusst. Obwohl es sich hier um ein Kinderspielzeug handelt, gehe ich davon aus, das dieses von Automatisierungsexperten entwickelt wurden und dies so funktioniert, wie dies in der Robotik üblich ist. Wie sagt man einem Roboter, dass er 3 Sekunden vorwärts gehen soll? Versteht man meine Frage?


   Profil
rlk
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 16.03.2007
Mitteilungen: 11514
Wohnort: Wien
  Beitrag No.6, eingetragen 2022-08-29

Hallo Sulky, auf der Seite https://www.openhab.org/docs/configuration/blockly/rules-blockly-timers-and-delays.html werden die Funktionen der Timer beschrieben, wait for 3 seconds dürfte sein, wonach Du suchst. Ich hoffe, das hilft Dir, Roland


   Profil
sulky
Aktiv Letzter Besuch: im letzten Monat
Dabei seit: 21.12.2009
Mitteilungen: 1820
  Beitrag No.7, vom Themenstarter, eingetragen 2022-08-29

Hallo Rlk, Ja genau, auf dem Link, welchen du mir gesendet hast, finde ich den "wait for" Diesen Befehl brauche ich. Ich verstehe nicht, weshalb ich den auf meiner Umgebung nicht fuinden kann. https://www.matheplanet.de/matheplanet/nuke/html/uploads/b/27687_thymio.png


   Profil
sulky
Aktiv Letzter Besuch: im letzten Monat
Dabei seit: 21.12.2009
Mitteilungen: 1820
  Beitrag No.8, vom Themenstarter, eingetragen 2022-08-29

Bestimmt kann man irgendwie diese Befehle, insbesondere den "wait for" hinzufügen. Aber ich habe wirklich keine Ahnung wie man das macht. Ich arbeite irgendwie mit einer Version, welche nur ein beschränkte Anzahl der Funktionen enthält. Aber wie man Automatisierung ohne Zeitfunktion machen soll ist mir unverständlich https://www.matheplanet.de/matheplanet/nuke/html/uploads/b/27687_aseba.png


   Profil
OlgaBarati
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 16.11.2018
Mitteilungen: 203
  Beitrag No.9, eingetragen 2022-08-29

Hallo sulky, vielleicht noch eine Variante unter Verwendung einer Variablen. So fährt der Roboter auch nur einmal für 3 Sekunden, obwohl der Wecker wieder neu gestartet wird. https://matheplanet.com/matheplanet/nuke/html/uploads/b/50783_blockly1.png


   Profil
sulky
Aktiv Letzter Besuch: im letzten Monat
Dabei seit: 21.12.2009
Mitteilungen: 1820
  Beitrag No.10, vom Themenstarter, eingetragen 2022-08-29

Hallo Olga, Hast du auch einen Thymio? Oder hast du dir einen Virtuellen heruntergeladen? Ja, jetzt habe ich wirklich alles versucht. https://www.matheplanet.de/matheplanet/nuke/html/uploads/b/27687_thhymio.png Die MOtorgeschwindigkeit von 60/40 während 21.5 Sekunden entspricht in etwa einer Vierteldrehung. Danach will ich 5 Sekunden vorwärts fahren. Durch die "Weckerblöcke" wird für mich unübersichtlich wo das Programm steht. Ist es möglicherweise ein Programmierfehler zwei Weckerblöcke zu verwenden? Jedenfalls macht das Programm überhaupt nicht was ich will und ich bin mit meinem Latein am Ende


   Profil
OlgaBarati
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 16.11.2018
Mitteilungen: 203
  Beitrag No.11, eingetragen 2022-08-30

Hallo sulky, nein, ich habe keinen Thymio, kenne Blockly erst durch deinen Thread hier. https://matheplanet.com/matheplanet/nuke/html/uploads/b/50783_blockly_4.png


   Profil
sulky
Aktiv Letzter Besuch: im letzten Monat
Dabei seit: 21.12.2009
Mitteilungen: 1820
  Beitrag No.12, vom Themenstarter, eingetragen 2022-09-16 11:48

Vielen Dank euch allen für eure Hilfe. Offensichtlich fehlt da in der Programmierumgebung irgendetwas. Der Waitingfor Befehl, oder sonst was. Aber Frage: Wie macht man diese allgemein in der Programmierung? https://www.matheplanet.de/matheplanet/nuke/html/uploads/b/27687_entchen.png Mein Roboter soll "Alle meine Entchen" singen. Sobald der erste Befehl ausgeführt wird, nämlich das C zu spielen, wartet das Prgramm nicht, die 30/60 Sekunden ab, sondern geht sofort zum nächsten Befehl weiter. Alles was mat hier hört, ist der letzte Befehl, nämlich das "See". Nicht auf Blockly bezogen. Wie realisiert man in der Informatik, dass gewartet wird, bis der Befehl ausgeführt ist, und erst dann zum nächsten Befehl übergegangen wird?


   Profil
zippy
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 24.10.2018
Mitteilungen: 4066
  Beitrag No.13, eingetragen 2022-09-16 16:50

\quoteon(2022-09-16 11:48 - sulky in Beitrag No. 12) Wie realisiert man in der Informatik, dass gewartet wird, bis der Befehl ausgeführt ist, und erst dann zum nächsten Befehl übergegangen wird? \quoteoff Du solltest nicht mit Gewalt versuchen, in einer Umgebung, die dem Paradigma der ereignisgesteuerte Programmierung folgt, an einem klassischen Programmablauf festzuhalten. Statt zu sagen "spiele die Note $X_i$ für $T_i$ Sekunden und mache dann mit der nächsten Note weiter" solltest du sagen "spiele die Note $X_i$ für $T_i$ Sekunden, wenn das Ereignis $i$ eintritt". Die dafür erforderliche Folge von Ereignissen kannst du dir mit einem Timer erzeugen. --zippy


   Profil
Scynja
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 23.02.2011
Mitteilungen: 532
Wohnort: Deutschland
  Beitrag No.14, eingetragen 2022-09-16 20:59

Kannst du nicht einfach eine Variable hochzählen? In Pseudocode würde ich mir das so vorstellen: \sourceon nameDerSprache i = 0; setInterval(()=> { if (i < 3) drive(); else if (i == 4 stop()) else if (i < 6) turnRight() ... i++; }, 1000) \sourceoff Damit kann man doch jede Sequenz abbilden. Oder gibt es da keine Variablen? Etwas komplizierter ist es, wenn du mehrere Sachen auf einmal machen möchtest.


   Profil
sulky
Aktiv Letzter Besuch: im letzten Monat
Dabei seit: 21.12.2009
Mitteilungen: 1820
  Beitrag No.15, vom Themenstarter, eingetragen 2022-09-16 23:55

hallo zippy und Scynja, @scynja, vielleicht geht das schon, aber ich weiss nicht wie... @zippy "Ereignisorientiert" ist ein wichtiges Stichwort. Nun hast Du mich darauf hingewiesen, dass es sogar eine Wiki-Seite gibt dazu. Dies bringt es auf den Punkt. Dasjenige, was ich mir vorgestellt habe, wäre dann wohl "Befehlssequenz orientiertes Programmieren". Diesen Ausdruck habe gerade selbst erfunden und bezweifle, dass dieser in der Fachsprache existiert. Nun habe ich mir zu helfen gewusst. https://www.matheplanet.de/matheplanet/nuke/html/uploads/b/27687_sequenz.png Is ist notwendig, abwechslungsweise den ersten und den zweiten Wecker zu verwenden. Ich habe keinen "Breakbefehl" um den Anweisungsblock des einen oder anderen Wecksers zu verlassen. Der Roboter fährt los, biegt nach links ab, fährt wieder vorwärts. Selbst bei Programmende werden die Motoren nicht gestoppt. Die funktioniert zumindest. Obwohl es funktioniert betrachte ich dies als "ein Gebastel" Meine Aufgabe ist es, Kindern von ca. 13-15 Jahren erste Anwendungsmöglichkeiten von Programmierung, Automation, Robotik o.ä zu bieten. Ist dieses "Gebastel" den dazu zumutbar? Ist dieses "Zweiweckerkonzept" in der Automatisierung realitätsnah?


   Profil
Scynja
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 23.02.2011
Mitteilungen: 532
Wohnort: Deutschland
  Beitrag No.16, eingetragen 2022-09-17 21:34

Hallo Sulky, ich würde sagen: Nein. Du erwähntest den Simulator. Wo kann man den denn downloaden? Ich werde nur auf eine Webseite mit abgelaufenem Zertifikat weitergeleitet und der Link zum Download funktioniert nicht bzw. ist tot. Ich hätte gerne einmal ausprobiert, ob es eine einfachere Lösung für deine Aufgabenstellung gibt.


   Profil
sulky
Aktiv Letzter Besuch: im letzten Monat
Dabei seit: 21.12.2009
Mitteilungen: 1820
  Beitrag No.17, vom Themenstarter, eingetragen 2022-09-18 13:06

Hallo Scynja, Ja, das wäre toll. Ich hatte keine Mühe "Thymiosuite" zu downloaden und installieren. Folgender Link sollte funktionierten: https://www.thymio.org/de/download-thymio-suite-redirect/ Gruss


   Profil
Folgende Antworten hat der Fragesteller vermutlich noch nicht gesehen.
Er/sie war noch nicht wieder auf dem Matheplaneten
Scynja
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 23.02.2011
Mitteilungen: 532
Wohnort: Deutschland
  Beitrag No.18, eingetragen 2022-09-22 23:42

Hier, probiere das einmal: https://matheplanet.com/matheplanet/nuke/html/uploads/b/30857_dsd2022.jpg Die Möglichkeiten sind mit maximal 2 Variablen allerdings sehr beschränkt. Ton kann man auch nicht abspielen, wenn man keinen Roboter hat. Die meiste Zeit habe ich mit der Suche nach Block-Elementen und einer verbuggten UI verbracht. Beispiel: Es ist nicht möglich eine Variable zu einer anderen zu wechseln. Man muss dazu das richtige Element "schreibe x" oder "schreibe y" aus der linken Seite ziehen. X kann man nicht einfach zu y umschreiben.


   Profil

Wechsel in ein anderes Forum:
 Suchen    
 
All logos and trademarks in this site are property of their respective owner. The comments are property of their posters, all the rest © 2001-2022 by Matroids Matheplanet
This web site was originally made with PHP-Nuke, a former web portal system written in PHP that seems no longer to be maintained nor supported. PHP-Nuke is Free Software released under the GNU/GPL license.
Ich distanziere mich von rechtswidrigen oder anstößigen Inhalten, die sich trotz aufmerksamer Prüfung hinter hier verwendeten Links verbergen mögen.
Lesen Sie die Nutzungsbedingungen, die Distanzierung, die Datenschutzerklärung und das Impressum.
[Seitenanfang]