if sperren und erst nach durchlauf wieder frei geben!

Registriere dich jetzt, um exklusive Vorteile zu genießen! Als registriertes Mitglied kannst du Inhalte herunterladen und profitierst von einem werbefreien Forum.
Mach mit und werde Teil unserer Community!
  • Die Servos sollen einmal durchlaufen und erst dann den eingang wieder frei geben.










    def move_robot():

    global x_deviation, y_max, tolerance, arr_track_data


    print("moving robot .............!!!!!!!!!!!!!!")

    print(x_deviation, tolerance, arr_track_data)


    y=1-y_max #distance from bottom of the frame



    if(abs(x_deviation)<tolerance):

    delay1=0

    if(y<0.1):

    cmd="Stop"

    ut.red_light("ON")

    ut.stop()

    x=1


    if(x==1):


    print("servo")

    servo_angle(3, 40) # Servo of port0 Rotate to 0 degrees.

    time.sleep(3)

    servo_angle(3, 50) # Rotate to 90 degrees.

    time.sleep(3)

    servo_angle(3, 80) # Rotate to 180 degrees.

    time.sleep(3)


  • Bei Fragen zum Programmieren poste immer Deinen kompletten Code. Formatiere diesen im Editor als Codeblock:

    ?thumbnail=1

    Ein Klick auf "Quellcode" ermöglicht es, die Programmiersprache auszuwählen

  • Hallo,


    es wäre sinnvoll, wenn du mal alles drum herum vergisst und ein Programm schreibst, dass den Motor so ansteuert wie du es willst. Wenn du das hast, dann kann man das weiter verwenden.


    Wenn man als "fremder" den Code anschaut, dann ist es ein Chaos und es kostet schon ziemlich viel Zeit zu verstehen was los ist, bevor man zum helfen kommt. Es ist auch für dich leichter, das Problem zu lösen, wenn man keine anderen Sachen(/Probleme) drum herum hat.


    Was meinst du mit Eingang frei geben?

    Kannst du Schritt für Schritt in Worte fassen, was genau passieren soll?

    Wenn das passiert ist, dann kann man jeder Schritt in Code umsetzen.


    Grüße

    Dennis

    🎧 Marylin´s Befehle an meine Junge Seele hör ich in jedem Lied. Heimlich eingegeben, in mein Innenleben, durch den Hard-Rock Beat 🎧

  • Entschuldigung, da haben Sie recht


    Ich versuche es mit einem kleinen Code.


    Ich habe das Problem wenn die Bedingung if wahr ist, fangen die servos sich an zu bewegen aber die bekommen da ständig das Signal erneut und fangen an verrückt zu spielen. If ist wahr wenn ein Objekt erkannt wird und das wird es halt öfters hintereinander. Ich würde gerne das die servos einmal komplett durchlaufen und erst dann den Eingang wieder frei geben.

    Bei c++ kriege ich das leicht hin aber hier leider nicht :conf:

  • Hallo,


    du könntest eine flag setzen. Wenn das erste mal eine Bewegung erkannt wurde, dann setzt du diese. Bei der Abfrage die zu dem Start der Servos führen wird dann nicht nur das erkennen der Bewegung abgefragt, sondern auch den Status der flag. Wenn dein Roboter wieder bereit ist, für eine neue Bewegung änderst du den Status der flag wieder.


    Könnte das bei deinem Anwendungsfall so passen?



    Grüße

    Dennis

    🎧 Marylin´s Befehle an meine Junge Seele hör ich in jedem Lied. Heimlich eingegeben, in mein Innenleben, durch den Hard-Rock Beat 🎧

  • Hallo,


    das könnte so in die Richtung aussehen:


    Das 'motor' ist nur exemplarisch drin, das man sieht um was es geht.

    Wenn eine Bewegung erkannt wird, wird die Funktion 'start_motor' ausgeführt. Diese startet den Motor nur, wenn 'ready' auf True ist. Wenn das so ist, dann wird 'ready' False gesetzt. Das heißt ein weiterer Aufruf von 'start_motor' hat keinen Einfluss auf den Motor, da die 'if'-Abfrage nicht erfüllt ist.

    Wenn der Motor seine Endposition erreicht hat, dann wird 'stop_motor' ausgeführt. Der Motor hält an und 'ready' wird wieder True gesetzt.


    Das ist jetzt einfach ganz allgemein geschrieben. Das muss man dann auf die entsprechende Anwendung übertragen/anpassen.


    Grüße

    Dennis

    🎧 Marylin´s Befehle an meine Junge Seele hör ich in jedem Lied. Heimlich eingegeben, in mein Innenleben, durch den Hard-Rock Beat 🎧

  • Hallo,


    es wäre sinnvoll, wenn du mal alles drum herum vergisst und ein Programm schreibst, dass den Motor so ansteuert wie du es willst.

    das wäre immer noch mein Standpunkt. In mein Beispiel kannst du deinen Motor einbauen und dann einfach mal ansteuern. Im nächsten Schritt dann den Bewegungsmelder und immer so weiter.


    Du könntest auch mal unabhängig von allem anderen hier, mal einen Code schreiben, der den Motor bis zur gewünschten Endposition drehen lässt. Wenn du den hast und hier postest, dann kann ich dir zeigen, wie ich den in das Beispiel einbauen würde.


    Grüße

    Dennis

    🎧 Marylin´s Befehle an meine Junge Seele hör ich in jedem Lied. Heimlich eingegeben, in mein Innenleben, durch den Hard-Rock Beat 🎧

  • Hier habe ich den code und würde gerne die classe einbinden.

    Ab while true, soll ja irgentwie der motor start und am ende der motor stop rein.

    oben habe ich ja schon den from und import drin, aber alles was ich dann versuche geht nicht :daumendreh2:

  • Thunderraspi: Anmerkungen zum Quelltext:


    Der `__future__`-Import ist überflüssig, dass ist das Standardverhalten bei aktuellen Python-Versionen.


    ``as`` beim Importieren ist zum umbenennen, `GPIO` wird aber gar nicht umbenannt. Und im vorliegenden Code genau wie `MotorControl` nicht verwendet.


    Konstanten werden nach den Importen definiert. Namen werden in Python klein_mit_unterstrichen geschrieben. Ausnahmen sind Konstanten (KOMPLETT_GROSS) und Klassen (PascalCase).


    Die PWM*-Konstanten werden nirgends verwendet.


    Auf Modulebene sollte nur Code stehen der Konstanten, Funktionen, und Klassen definiert. Das Hauptprogramm steht üblicherweise in einer Funktion die `main()` heisst. Damit stellt man unter anderem sicher, das man nicht aus versehen globale Variablen verwendet.


    Warum heisst `Channel` so wenn im Kommentar steht es wäre die PWM-Port-Nummer? Wäre dann `PWM_PORT_NUMBER` nicht der passendere Name? Wenn man einen Kommentar schreibt, sollte man immer kurz innehalten ob man den Code nicht klarer schreiben kann, so dass man den Kommentar nicht braucht.


    Und verwenden sollte man die Konstante dann natürlich auch, statt den Wert 3× hart in den Code zu schreiben.


    Das mit den Kommentaren betrifft auch die beiden Funktionen. Funktionen werden üblicherweise nach Tätigkeiten benannt, damit man weiss was die machen, und um sie leicht von eher passiven Werten unterscheiden zu können. `servo_angle` wäre beispielsweise ein guter Name für eine Zahl die den Winkel repräsentiert, aber nicht für eine Funktion die den Winkel festlegt.


    Beiden Funktionen fehlt `pwm` als Argument. Die erste Funktion wird gar nicht verwendet.


    Falsche Kommentare sind schlimmer als keine Kommentare. Ein Kommentar sollen eventuelle Fragen mit dem Code klären, aber wenn dort falsche Informationen drin stehen, oder gar welche die dem Code direkt wiedersprechen, erreicht man genau das Gegenteil. Der Leser weiss dann nicht was falsch ist, der Code oder der Kommentar. Das ein Argument `angle` heisst, angeblich Werte zwischen 0 und 180 annehmen kann, und dann der Wert 40 0° bedeutet, 50 für 90° steht, und 80 für 180° ist ziemlich, ich sage mal ”überraschend”.

    „Eat the rich — the poor are full of preservatives.“ — Rebecca ”Becky” Connor, The Connors

  • Danke für die Hinweise, ich werde es mal überarbeiten.

    Motorcontrol soll ja noch eingebaut werden, dass ist ja das Problem was ich habe.

    Dennis89 weiß glaube ich was ich meine :daumendreh2:

    Er hat mir schon den Code oben geschrieben.

    Da mit soll ja die while schleife gestoppt werden, die dient hier nur als beispiel, damit die servos bei dem eigentlichen Code, nicht permanent ein Eingang Signal bekommen.

    :shy:

  • Hallo,


    ich habe dich nicht vergessen, hatte nur sehr viel um die Ohren. Ich melde mich auf jeden Fall noch, wie versprochen.

    Die Anmerkungen wurden mir ja schon abgenommen 👍🏼


    Grüße

    Dennis

    🎧 Marylin´s Befehle an meine Junge Seele hör ich in jedem Lied. Heimlich eingegeben, in mein Innenleben, durch den Hard-Rock Beat 🎧

  • Es fehlt der Teil, wo du überprüfst ob der Motor seine Endlage erreicht hat. Denn das ist ja entscheidend dafür, dass die flag wieder zurück gesetzt wird und der Motor neue Befehle entgegen nimmt.

    Kannst du das hier einbauen? Hast du Fragen zu diesem Code?


    Grüße

    Dennis

    🎧 Marylin´s Befehle an meine Junge Seele hör ich in jedem Lied. Heimlich eingegeben, in mein Innenleben, durch den Hard-Rock Beat 🎧

  • Ja natürlich, wegen:

    Es fehlt der Teil, wo du überprüfst ob der Motor seine Endlage erreicht hat. Denn das ist ja entscheidend dafür, dass die flag wieder zurück gesetzt wird und der Motor neue Befehle entgegen nimmt.

    Und man könnte als default-Wert für 'ready' True anstatt None eintragen.


    Den Code den du zuerst gepostet hast sah übersichtlicher aus, dachte den kann man durch das from und Import einfügen🤔

    Der war ja nur ein Konzept und das habe ich hier umgesetzt. Ich vermute du müsstest die Python-Grundlagen mal durcharbeiten.


    Bei c++ kriege ich das leicht hin aber hier leider nicht :conf:

    Wäre es vielleicht dann nicht auch sinnvoller, das in c++ zu schreiben?


    Grüße

    Dennis

    🎧 Marylin´s Befehle an meine Junge Seele hör ich in jedem Lied. Heimlich eingegeben, in mein Innenleben, durch den Hard-Rock Beat 🎧

  • Hallo, ich bekomme hier immer eine Fehlermeldung! :conf: