Funktion für x Sekunden ausführen

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallo Forum,
    ich möchte eine Funktion eine bestimmte Zeit ausführen. Habe hier im Forum schon einiges gefunden https://www.google.com/url?q=https://…irIG50ehGJkv70Q, https://www.google.com/url?q=https://…sRY2_dz1yWPARHw kann es aber irgendwie nicht umsetzen.
    Hier mein Script:

    Also der BrickPiSensor ist ein Ultraschall-Sensor. Dieser soll die Funktion avoid() für 5 Sekunden laufen lassen. Freue mich über Hilfe für meinen Roboter :thumbs1:

    Einmal editiert, zuletzt von modulok (2. März 2015 um 20:07)

  • Ja, avoid() soll 5sek. laufen. In meinem Skript oben drehen sich die Motoren nur solange der sensor aktiv ist. 200 ist die Geschwindigkeit. 200 = vor -200 zurück mit speed von 200. Ich benutze den Brickpi.
    EDIT: Langen bestimmt auch 3 Sek. Brauche nur genug Zeit, dass der roboter ausweichen kann.

    Einmal editiert, zuletzt von modulok (2. März 2015 um 20:24)

  • Meinst du so?

    Code
    def run(self):
            while running:
                if BrickPi.Sensor[PORT_4] < 30  :
                    avoid_time = time.time()
                    while (time.time() - avoid_time <= 5):
                      avoid()


    Falsch eingerückt? So läuft er erst nach 5 sek los.

    Einmal editiert, zuletzt von modulok (2. März 2015 um 20:50)

    • Offizieller Beitrag

    Bei mir funzt es: Aber du willst ja das die funktion 5sek. läuft und nicht das innerhalb der 5sek die Funktion x mal aufgrufen wird

    Code
    def avoid():
      a = time.time()
      while (time.time() - a <= 5):
        BrickPi.MotorSpeed[PORT_A] = -200
        BrickPi.MotorSpeed[PORT_D] = 200
    • Offizieller Beitrag
    • Offizieller Beitrag

    Ähm, du erkennst das das 1:1 meigrafds time code ist?

    Code
    def run(self):
            while running:
                if BrickPi.Sensor[PORT_4] < 30  :
                    BrickPi.MotorSpeed[PORT_A] = -200
                    BrickPi.MotorSpeed[PORT_D] = 200
                    ot = time.time()
                    while(time.time() - ot < 3):    #running while loop for 3 seconds
                        BrickPiUpdateValues()       # Ask BrickPi to update values for sensors/motors
                        time.sleep(.1)
  • Habe es noch nicht hinbekommen. Der Roboter fährt, der Sensor wird belegt, dann bleibt er stehen und ende. Hier mein Script:


    Und wenn ich mit Strg+C abbreche kommt:

    Code
    ^CBye
    Exception in thread Thread-1 (most likely raised during interpreter shutdown):
    Traceback (most recent call last):
      File "/usr/lib/python2.7/threading.py", line 552, in __bootstrap_inner
      File "tank.py", line 23, in run
    <type 'exceptions.AttributeError'>: 'NoneType' object has no attribute 'Sensor'
  • Ich versuche gerade das Script ohne Threads umzuschreiben. Habe das so aus einem Beispiel übernommen. Die Lösung kann doch nicht so schwer sein...

    ah, so klappt es erst mal:

    Einmal editiert, zuletzt von modulok (3. März 2015 um 21:42)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!