Seite 1 von 1

Python Programm beenden

Verfasst: Mittwoch 22. November 2023, 08:11
von Artjom
Hi, an alle ich habe das Problem das mein Programm sich eigentlich mit dem drücken der unteren Taste abschalten soll dies aber nicht tut habe auch schon verschiedene Codes ausprobiert aber hilft nichts. Code steht unten falls ihr Ideen habt.

Code: Alles auswählen

from pybricks.hubs import EV3Brick
from pybricks.ev3devices import Motor, TouchSensor, ColorSensor, InfraredSensor, UltrasonicSensor
from pybricks.parameters import Port, Stop, Direction, Button, Color
from pybricks.tools import wait, StopWatch, DataLog
from pybricks.robotics import DriveBase
from pybricks.media.ev3dev import SoundFile, ImageFile
import sys

# This program requires LEGO EV3 Micropython v2.0 or higher.
# Click "Open User Guide" on the EV3 extension tab for more information.

# Create your objects here.
ev3 = EV3Brick()
timer = StopWatch()
leg_motor = Motor(Port.A, Direction.COUNTERCLOCKWISE)
trunk_motor = Motor(Port.B, Direction.COUNTERCLOCKWISE)
neck_motor = Motor(Port.D)

while True:
    while Button.CENTER in ev3.buttons.pressed():
        leg_motor.run_target(1000, 3680)
        neck_motor.run_target(500, 580)
        trunk_motor.run_target(-809, 1200)
        ev3.speaker.play_file(SoundFile.ELEPHANT_CALL)
        trunk_motor.run_target(500, 0)
        neck_motor.run_target(500, -0)
        wait(5000)
        leg_motor.run_target(1009, -0)

    while Button.CENTER not in ev3.buttons.pressed():
        leg_motor.run_target(1009, 0)
        trunk_motor.run_target(500, 0)
        neck_motor.run_target(500, 0)
        timer.reset()

    if Button.DOWN in ev3.buttons.pressed():
        sys.exit()

Re: Python Programm beenden

Verfasst: Mittwoch 22. November 2023, 08:20
von __deets__
Bitte Code Tags benutzen, damit die in Python relevanten Einrückungen erhalten bleiben.

Zu deinem Problem: was soll denn “exit” auf einem embedded Programm wie hier bedeuten? Ich kenne die Platform nicht genau, aber bei anderen micropython Implementierungen würde der einfach neu starten, und wieder das Programm ausführen.

Re: Python Programm beenden

Verfasst: Mittwoch 22. November 2023, 08:26
von Artjom
__deets__ hat geschrieben: Mittwoch 22. November 2023, 08:20 Bitte Code Tags benutzen, damit die in Python relevanten Einrückungen erhalten bleiben.

Zu deinem Problem: was soll denn “exit” auf einem embedded Programm wie hier bedeuten? Ich kenne die Platform nicht genau, aber bei anderen micropython Implementierungen würde der einfach neu starten, und wieder das Programm ausführen.
Also habe es jetzt nochmal anders hochgeladen und ich muss einen elephanten von Lego mindstorms programmieren bei visual Studio code er muss Nach betatigen der mittleren Taste soll der Elefant 4 Schritte vorwartsgehen, dann den Nacken und
den Russel nach oben bewegen und einen Sound machen. Danach soll er den Nacken und Rossel
wieder nach unten bewegen, 5 Sekunden warten und 4 Schritte rückwartsgehen. Wenn die mittlere
Taste wieder gedrückt wird, startet das Programm von neuem. Wenn die untere Taste gedruckt
wird, wird das Programm beendet

Re: Python Programm beenden

Verfasst: Mittwoch 22. November 2023, 08:43
von __deets__
Das beantwortet nicht die Frage: was heißt denn beendet? Wenn du ein Programm auf deinem Rechner beendest, geht das Fenster zu. Wenn es eines hatte.

Bei einem embedded System wie dem hier, ist das aber nicht so klar. Denn die haben meist nur ein Programm, und das läuft, wenn man das System in Betrieb nimmt, und zwar endlos. Was also soll zu sehen sein, wenn man den Knopf nach unten drückt?

Re: Python Programm beenden

Verfasst: Mittwoch 22. November 2023, 08:46
von Artjom
__deets__ hat geschrieben: Mittwoch 22. November 2023, 08:43 Das beantwortet nicht die Frage: was heißt denn beendet? Wenn du ein Programm auf deinem Rechner beendest, geht das Fenster zu. Wenn es eines hatte.

Bei einem embedded System wie dem hier, ist das aber nicht so klar. Denn die haben meist nur ein Programm, und das läuft, wenn man das System in Betrieb nimmt, und zwar endlos. Was also soll zu sehen sein, wenn man den Knopf nach unten drückt?
Ich meine damit das wenn ich den code ausführe befindet er sich in einer schleife ich muss aber die schleife abrechen

Re: Python Programm beenden

Verfasst: Mittwoch 22. November 2023, 09:00
von __deets__
Bitte nicht meinen gesamten Text zitieren, der steht ja schon davor.

Meinst du statt beenden, dass die Sequenz, und der sich der Roboter befinden, abgebrochen werden soll?

Re: Python Programm beenden

Verfasst: Mittwoch 22. November 2023, 09:01
von Artjom
Ja genau

Re: Python Programm beenden

Verfasst: Mittwoch 22. November 2023, 09:22
von Sirius3
Schleifen verläßt man per `break`.

Die inneren while-Schleifen sind etwas komisch. Ich würde hier ein if erwarten, weil ja eine lange Sequenz innerhalb des Blocks abgelaufen wird, und dann wird die zweite while-Schleife ein else, was deutlich klarer wäre.
Das im zweiten Block sieht aber aus, als ob das nur ein "alles auf Anfang" wäre. Das würde ich am Ende der Sequenz erwarten (wo das ja auch schon steht). Der Block ist also überflüssig.

Re: Python Programm beenden

Verfasst: Mittwoch 22. November 2023, 09:29
von __deets__
Dann muss dein Programm anders strukturiert sein. Leider ist die Umgebung, die du da hast, ziemlich primitiv, und kennt keine Nebenläufigkeit. Habe ich zumindest nicht gefunden in der Doku. Du musst das Programm daher so umbauen, dass du die einzelnen Aktionen irgendwie benennst, und durch ein große if-Kaskade zb abfeuerst. Also ein kleines Beispiel:

Code: Alles auswählen

zustand = “warten”
while True:
    if button_up():
        zustand = “anfang”
    if button_down()”:
        zustand = “warten”
    if zustand == “anfang”:
        links_vor()
        zustand = “zweiter_schritt”
    elif zustand == “zweiter_schritt”:
        rechts_vor()
        zustand = “dritter_schritt”
    elif …
Das ist ziemlich anstrengend, aber ich sehe zumindest erstmal keinen anderen Weg.

Durch diese Aufteilung in lauter Teilschritte kann die Abfrage des Buttons jederzeit (außer bei Wartezeiten) berücksichtigt werden.

Re: Python Programm beenden

Verfasst: Mittwoch 22. November 2023, 09:42
von Artjom
oh man das wird anstrengend aber ich danke dir

Re: Python Programm beenden

Verfasst: Mittwoch 22. November 2023, 10:08
von Artjom
Hi sirius3, ich verstehe noch nicht ganz genau was du meinst

Re: Python Programm beenden

Verfasst: Mittwoch 22. November 2023, 10:15
von Artjom
ich habe das Problem gelöst ich habe die 2 unteren while schleifen durch if ersetzt und unten beim if Button.DOWN ein Break eingesetzt ich danke euch für eure Hilfe

Re: Python Programm beenden

Verfasst: Mittwoch 22. November 2023, 10:22
von __deets__
Also damit erreichst du aber keinen Abbruch der laufenden Sequenz. Der Button-Down kann also auch komplett entfallen, der macht ja nix wirklich. Ausser, dass danach gar nix mehr geht. Wenn das sinnvoll ist, ok.

Re: Python Programm beenden

Verfasst: Mittwoch 22. November 2023, 10:24
von Artjom
doch er bricht die schleife ab habe es getestet

Re: Python Programm beenden

Verfasst: Mittwoch 22. November 2023, 10:38
von __deets__
Natuerlich tut er das. Aber wozu ist das gut? Dann geht ja gar nix mehr. Wohingegen das abbrechen deiner Sequenz selbst nicht geht, und das hast du gesagt, soll der Button machen.