Hallo zusammen,
ich hätte da gerne mal ein Problem
Für eine geplante Ablaufsteuerung brauche ich Ideen/Infos zur Umsetzung.
Vorneweg, ich habe quasi null Ahnung von Programmierungen. Daher suche ich auch nicht nach genauen Skripten o.Ä., vielmehr interessiert mich wie ein entsprechendes Programm im Grundsatz aufgebaut sein sollte. Also quasi die "Architektur" wenn man das so sagen kann.
Der Ablauf soll wie folgt aussehen:
Aus einer gegebenen fixen Menge "n" sollen alle Zahlen genau einmal, aber immer in zufälliger Reihenfolge ausgewählt werden.
Auf jede Wahl einer Zahl folgt dann eine Aktion (Ablauf)
Sobald alle Zahlen einmal dran waren, soll das Ganze wieder von vorne losgehen.
Meine Frage: Wenn ich mit meiner Startmenge anfange, wie kann ich erreichen daß die bereits gewählten Zahlen aus dem weiteren Ablauf rausfallen?
Also wenn z.B. "n" = 7 ist, habe ich ja im ersten Gang 1,2,3,4,5,6,7 zur Auswahl. Wenn jetzt zufällig z.B. die 3 gewählt wird, bleiben 1,2,4,5,6,7 übrig, und so weiter bis Null. Überhaupt, zählt die Null mit zu der Gruppe, oder kommt das auf die Programmiersprache an?
Wie würde man sowas also grundsätzlich in einer Programmierung angehen? Und wie verknüpfe ich dann im Anschluss eine spezifische Aktion mit der dazugehörenden Zahl?
Falls sich das schlecht verallgemeinert erklären lassen sollte, in einer ersten Version würde ich das zuerst mit einem RCX1 umsetzen wollen, später dann aber wohl eher mit einem Arduino.
Wie gesagt, es geht mir dabei eher um die "Basics" als um eine funktionierende endgültige Lösung. Bin aber für jede Idee, Erklärung oder Denkansatz dankbar.
Mit den besten Grüßen
Stephan
Gruß
Stephan
Evolution ist gnadenlos. Wenn wir unser Gehirn nicht gebrauchen, nimmt es uns die Natur wieder weg
Lok24
29.11.2018, 21:11
Als Antwort auf den Beitrag von stephanderheld
Editiert von
Lok24
29.11.2018, 21:53
Hallo Stephan,
das ist überraschend einfach.
Du schreibst die gezogene Zahlen in eine Liste!
Ansatz: ein Array!
Das ist ein Rudel gleicher Elemente (genauer Elementtypen, also Zahl, Text usw), die auf denselben Variablennamen hören, aber einen Index haben.
"X" ist eine Variable
"Zahl" wäre eine andere
"G(100)" ist ein Array, also eine Variable, die 100 Elemente* hat, das 5. sprichst Du mit G(5) an.
Wenn Du das Programm startest sind die alle einhundert g(x) = 0.
Programm:
Zahl ziehen, in n speichern
ist g(n) = 0, dann
- setze g(i) = 1
- Unterprogramm Aktion(n)**
zurück zu zahl ziehen
Gut, da muss man in der
Schleife noch schauen, ob überhaupt noch Kandidaten da sind .....
Ich kann Dir mal ein Beispiel-Progrämmelchen*** zurechtstricken, dauert nicht lange.
Du willst das hoffentlich auf einem RCX, NXT, EV3 laufen lassen?
Grüße
Werner
* eigentlich 101, weil das bei 0 beginnt
**
Aktion(zahl)
wenn zahl = 1 dann aktion A
wenn zahl = 2 dann aktion B
wenn zahl = 3 dann aktion C
usw.
*** Hier mal das ganze in Basic, wie es z.B. unter Excel läuft
tastenmann gefällt das
Hallo Werner,
erstmal vielen Dank für die (überraschend) schnelle Antwort
Ich denke ich werde mir das wohl am Wochenende mal etwas genauer ansehen. Was für Dich vielleicht trivial sein mag, ist bei meinem gegenwärtigen Schlafdefizit dann doch etwas herausfordernder
Aber ja, ursprünglich habe ich gedacht das Ganze auf einem RCX laufen zu lassen. Nur wenn die Anzahl der Ausgänge zu gering sein sollte, oder die Motorsteuerung zu ruckelig, würde ich auf einen Arduino ausweichen wollen/müssen.
Du darfst Dir aber sicher sein daß ich weitere Fragen zu dem Thema haben werde bevor mein MOC funktioniert..... ist eher ein Langzeitprojekt
Gruß
Stephan
Gruß
Stephan
Evolution ist gnadenlos. Wenn wir unser Gehirn nicht gebrauchen, nimmt es uns die Natur wieder weg
Lok24
01.12.2018, 09:36
Als Antwort auf den Beitrag von stephanderheld
Editiert von
Lok24
01.12.2018, 09:44
Hallo,
hier also nochmal komplett (und diesmal hoffentlich ohne Fehler )
Variablen:
total: Anzahl bereits gezogener Zahlen
max : höchste zu ziehende Zahl
n: gezogene Zahl
g(max) : ein Array für die gezogenen Zahlen, Länge( oder Dimension) ist gleich der höchsten Zahl
solange total < max
Zahl zwischen 1 und max ziehen, in n speichern
ist g(n) = 0, dann
- setze g(n) = 1
- Unterprogramm Aktion(n)
- total = total +1
zurück zu "solange total < max"
Ein Nachteil sei nicht verschwiegen:
Das läuft natürlich immer länger, weil es ja immer mehr findet, die schon gezogen wurden, und neu suchen muss.
Ich denke mal für Zahlen bis max = 20 fällt das nicht weiter auf.
Das kann man vermeiden, wenn man alle Zahlen, die es gibt, am Anfang sucht und in das Array schreibt.
Also vor denm eigentlichen Programm eine Routine, die folgendes erzeugt:
g(1) = 17
g(2) = 3
g(3) = 28
g(4) = 4
usw.
Und das dann einfach der Reihe nach abarbeitet.
Natürlich ist das Programm ein naher Verwandter von dem obigem, man muss genau ein Zeichen ändern.
Grüße und eine Mütze voll Schlaf
Werner
Hallo Werner,
und natürlich auch ein Hallo an alle anderen Mitleser.
Inzwischen habe ich mich ein wenig eingelesen. Das Stichwort "Array" war genau das was mir fehlte. Und ich glaube ich kann auch einigermassen nachvollziehen was Du da gemacht hast. Denke das ist ähnlich wie bei einer Fremdsprache. Man versteht immer mehr als man selber ausdrücken könnte
Um jetzt soweit zu kommen dass ich das Ganze auch anwenden kann, seien mir noch ein paar weitere Fragen erlaubt.......
Erst einmal wäre zu klären mit welcher Hardware ich das anwenden kann/sollte/will. Wie erwähnt, habe ich die guten alten RCX´e oder den Arduino zur Verfügung. Der RCX wäre toll weil eben Lego, und für Motoransteuerungen keine shields o.Ä. notwendig.
Allerdings habe ich den RCX bisher nur mit der Legoeigenen Software RIS programmiert. RIS läuft nur unter XP oder Vorgänger OS, d.h. um das neu aufzusetzen müsste ich erstmal eine VM installieren. Ich kann mich erinnern dass mich diese Aktion beim ersten Mal 2-3 Tage und einige graue Haare gekostet hat (ich bin kein Computermensch, muss mich dann immer lange einlesen und durchbeissen).
Nachteil Nr. 2 bei der Legoeigenen Software (oder vllt auch bei der mitgelieferten Firmware) ist die Geschwindigkeitsregulierung der Motoren. Grundsätzlich wären die bei RIS gegebenen 7 Stufen schon ausreichend, jedoch scheinen diese keinesfalls linear zu sein. Der zu regulierende Geschwindigkeitsbereich schien jedenfalls immer deutlich begrenzt zu sein im Vergleich z.B. zum PF-System das ja bekanntlich auch mit 7 Stufen arbeitet.
Für den RCX soll es aber auch eine Fremdgestrickte Firmware gegeben haben. Weiss da jemand was drüber? Wäre die (falls noch erhältlich) präziser in der Motoransteuerung? Sowas wie ein Sanftanlauf wäre natürlich ein Träumchen......
Andernfalls bliebe natürlich noch der Arduino, da gibt es ja jede Menge Tutorials und ein wenig löten schreckt mich auch nicht. Aber irgendwie wäre das für mich nur die B-Lösung. Und ich müsste mir erstmal diese Motorshields besorgen.... doof
Schliesslich noch was ganz anderes: Für die angedachten Programmsegmente die ich jeder Zahl zuordnen möchte, ergibt sich noch eine weitere Frage. Die Einzelnen "slots" sind räumlich getrennt, nämlich abwechselnd links und rechts. Dadurch ergibt sich, dass der Motorlauf umgedreht werden muss, je nach dem von welcher Seite ein Ereignis zu erwarten ist.
Frage: Gibt es eine Moglichkeit die Zahlen aus dem Array in der Bearbeitung nach "geraden" und "ungeraden" zu unterscheiden, oder würde man dafür dann die Zahlen jeweils getrennten Arrays zuordnen?
Ich hoffe ich hab mich soweit nachvollziehbar ausgedrückt. In meinem Kopf hab ich da ganz klare Bilder und Vorstellungen zu, aber das zu beschreiben, zumal mir ja diverse Begrifflichkeiten nicht geläufig sind, das ist dann schon was Anderes.... Aber ich hoffe ich kann euch irgendwann mal das fertige und funktionierende MOC vorstellen.....
Jedenfalls vielen Herzlichen Dank für die bisher geleistete Hilfe, ich hoffe auf Weitere
Gruß
Stephan
Gruß
Stephan
Evolution ist gnadenlos. Wenn wir unser Gehirn nicht gebrauchen, nimmt es uns die Natur wieder weg
Lok24 gefällt das
Moin Stephan,
danke für die ausführliche Antwort, manchmal gibt man sich hier Mühe mit einer ausführlichen Antwort und hört nie wieder was .....
stephanderheld hat geschrieben:
Ach ja, Tante Google und Mr. Wikipedia!
stephanderheld hat geschrieben:
Danke Werner,
ich war nach deinem vorletzten Posting dann schon selber über BrickOS gestolpert und hatte versucht mich da einzulesen. Allerdings habe ich nur eher kryptische (aus meiner Sicht) Erklärungen gefunden wie man sowas zum laufen bringt... mit Kernel aufsetzen und Linux allgemein hab ich keine Erfahrung
Und prompt schiebst Du nen Post hinterher der mich auf eine neue Seite führt. Also hab ich die halbe Nacht damit zugebracht mich bei NCQ einzulesen. Und noch besser, das BricxCC läuft offenbar problemlos auf meinem Rechner mit Windows 7.
Und der Tip zum "Modulo" hat auch wieder voll ins Schwarze getroffen. Denke damit kann ich was anfangen
Gruß
Stephan
Evolution ist gnadenlos. Wenn wir unser Gehirn nicht gebrauchen, nimmt es uns die Natur wieder weg
Hallo Stephan,
stephanderheld hat geschrieben:
Hallo im Boost gibt es so ein Programm glaube ich, habe mich noch nicht mit beschäftigt. Ich weiß nur wo es steh, kann es nicht kopieren. Mit einem lieben Gruß Harry
Mit einem lieben Gruß, Harry.
Hallo Harry,
danke für die Info. Boost kommt für mich momentan leider nicht in Frage. Ich werde mehrere programierbare Einheiten brauchen, und da sind mir Boost oder auch der EV3 leider zu teuer. Vielleicht wenn die mal für nen wirklich guten Kurs zu bekommen sind. wer weiß?
Bei meinem Projekt bin ich leider noch nicht wirklich vorangekommen.
Ich suche immer noch meinen IR Tower für den RCX und hab in den Weihnachtsferien mein Legozimmer und die restlichen Umzugskartons komplett auf den Kopf gestellt.
Jetzt bin ich seit drei Wochen am aufräumen und einsortieren. Ich wollte nicht alles wieder einfach so zurück in die Kartons stopfen und nutze die Gelegenheit, meine Kleinteilmagazine neu zu ordnen und zu füllen... aber ich fürchte grade, das könnte sich noch bis Ende des Jahres hinziehen
Ich werd mir wohl einen neuen IR Tower und ein paar Arduino Motorshields bestellen und in der Zwischenzeit mal mit dem mechanischen Teil des Moduls beginnen.....
Aber ich bleib dran und meld mich mit Updates wieder hier.
Trotzdem vielen lieben Dank für Deinen Hinweis!!!
Gruß Stephan
Gruß
Stephan
Evolution ist gnadenlos. Wenn wir unser Gehirn nicht gebrauchen, nimmt es uns die Natur wieder weg