Mit der grafischen Block-Programmierung tue ich mich echt etwas schwer... Ich schaffe in der grafischen EV3-Programmieroberfläche folgendes nicht: Es läuft ein Programm in Dauerschleife und am Ende der Schleife ist eingestellt, dass die beendet wird, sobald eine der fünf Tasten gedrückt wird.
Meine Erwartung ist nun: Sobald während des Schleifendurchlaufs irgendwann eine Taste gedrückt wird, bricht die Schleife am Ende des aktuellen Durchlaufs ab.
Was passiert ist folgendes: Ich kann Tasten drücken wie ich lustig bin, es passiert gar nichts. Die Schleife wird nur beendet, wenn am Ende eines Schleifendurchlaufs eine Taste gedrückt ist. Man muss quasi das Ende der Schleife abpassen und eine Taste gedrückt halten... das ist unschön. Es ist dabei egal, ob ich Zustand "1" ("Gedrückt") oder Zustand "2" ("Angestoßen") auswähle.
Ich könne es nun versuchen mit einem parallelen Programmzweig, der eine Dauerschleife enthält, in der die Tasten ständig abgefragt werden und falls eine gedrückt wird, eine Variable gesetzt wird, die am Ende der Hauptschleife als Abbruchkriterium abgefragt wird...
Gibt es eine einfachere Möglichkeit, meine Erwartung umzusetzen?
Grüße
Matthias
Hallo Mathias,
AdmiralStein hat geschrieben:
Lok24
14.11.2018, 07:35
Als Antwort auf den Beitrag von AdmiralStein
Editiert von
Lok24
14.11.2018, 07:44
Hallo Matthias,
das ist beim Programmuieren immer so?
Hier mal ein Beispiel
Do while Taste = false
wait 10sec
loop
Auch hier wirst Du die Taste am Ende der 10 sec gedrückt halten müssen, damit das wirkt.
Was Du scheinbar suchst ist ein Event.
Do while true
on Event exit loop
wait 10 sec
Loop
Leider habe ich jetzt gar keine Zeit das zu probieren.
Aber es geht ungefähr so:
Die Hauptschleife oben (= Dein Programm) heißt "Main"
Als paralleler Thread läuft unten eine Endlosschleife mit der Tastenabfrage und dem Schleifen-Interrupt für "Main"
Hallo,
AdmiralStein hat geschrieben:
Danke, das funktioniert so für sofortigen Abbruch. Es musste hinter der Hauptschleife nur noch ein Schleifenabbruch für die Abbruchschleife ergänzt werden.
Grüße
Matthias
Hi,
AdmiralStein hat geschrieben:
Lok24 hat geschrieben:
Lok24 hat geschrieben:
Lok24
15.11.2018, 18:53
Als Antwort auf den Beitrag von AdmiralStein
Editiert von
Lok24
15.11.2018, 19:36
Hallo Matthias,
AdmiralStein hat geschrieben:
Lok24
17.11.2018, 14:22
Als Antwort auf den Beitrag von AdmiralStein
Editiert von
Lok24
17.11.2018, 14:29
Hallo Matthias,
schön, dass wir Deine Achterbahn mal in Betrieb sehen konnten.
Ich habe jetzt nochmal nachgelsen: offenbar ist es so, dass Du nur am Schleifenende auf "angestoßen" setzen musst.
Der EV3 überwacht den Taster dauernd, merkt sich das und beendet die Schleife dann am Ende.
(das entspricht Deinen Variablen, die der intern für Dich führt)
Aber als "Nothalt" ist das eher ungeeignet, denn wenn Du z.B. dem Motor sagst "30 Umdrehungen" und dann geht was schief kommt der Block nie ans Schleifenende.
Ich nutze für Nothalt immer die "Zurück"-Taste am Brick, die stoppt alles sofort.
Hier noch was Grundsätzliches: Wenn beim Programm-Start der Aufzug immer untensteht, kannst Du auch x Umdrehungen auf und x Umdrehungen ab programmieren, ganz ohne Clutch. Aber wehe der steht irgendwo, dann explodiert dein Moc.
Daher baue ich entweder
- Clutch und fahre x+1 Umdrehungen in die Startposition, ab dann -x / + x oder sogar -x / + (x+1)
- oder ein Farbsensor mit Kennungen an der Kette für unten und oben
Beides ist zuverlässig und fehlertolerant
Warum nicht über die Zeit? Weil ich nicht sicher bin, ob die Motoren je nach Batteriestand immer gleich schnell drehen....
Grüße
Werner
Hallo Matthias,
Hab's jetzt mal probiert: es geht!
So sieht das Programm aus:
JuL gefällt das