Python Schieberegler Slider PWM

L I V E Stammtisch ab 20:30 Uhr im Chat
  • Guten Tag,

    ich hätte da einmal eine Frage:

    Ich habe ein Auto gebaut, bei dem ich mittels PWM die Geschwindigkeit beim Vorfahren einstellen möchte. Im Script funktioniert dies auch perfekt, indem ich einfach die Variable ändere. Ich möchte dies aber nun mittels tkinter und einem Schieberegler realisieren, sodass ich über diese die Geschwindigkeit steuern kann.

    Hier mal der Code:

    Ich habe das ganze schon so versucht zu realisieren:

    Es müssen ja die Variablen rd ld verändert werden, also 100 -- 100% der Vollen Geschwinigkeit:

    Das Problem nun: beides läuft nicht gleichzeitig. Ich bekomme es entweder so hin, dass sich erst das tkinter Fenster zum einstellen öffnet oder das erst das Programm startet.

    Hat da jemand eine Idee, wie ich also über eine GUI die beiden Variablen ändern kann, mit 2 Schiebereglern?

    MFG

  • Hallo nilsconrad,
    vorab:
    ich bin blutiger Anfänger ...

    was ich jetzt nicht verstehe ist, dass die Regler funktionieren bzw. etwas steuern können...

    du mußt doch auch einen "command" an den Regler binden, oder?, also:

    Code
    rd = Scale(master, from_=0, to=100, orient=HORIZONTAL, command=fahren)

    === EDIT ===
    bennene einmal deine Schieberegler um, z.B.

    Code
    scale_rd = ...
    scale_ld = ...


    dann mußt du in deinem Hauptprogramm die Werte, die du mit den Schiebereglern einstellst, auch abrufen.
    Das geht mit dem Befehl:

    Code
    rd = scale_rd.get()
    ld = scale_ld.get()


    === edit ende ===
    => kann aber auch Mist sein, was ich schreibe (sorry dafür) ...

    === EDIT 2 ===
    Schönheitsreparaturen:
    anstelle von:

    Code
    #Kleinster Wert ausgeben
        werte = [a, b, c]
        werte.sort()           
        kleinster = werte[0]


    das:

    Code
    #Kleinster Wert ausgeben
        werte = [a, b, c]
        kleinster = min(werte)


    anstelle von:

    Code
    if a < b and a < c:
            km = 1
    
        elif b < a and b < c:
            km = 3
        else:
            km = 2


    dies (läßt sich besser lesen - weiter unten im deinem Code analog dazu):

    Code
    if (a < b) and (a < c):
            km = 1    
        elif (b < a) and (b < c):
            km = 3
        else:
            km = 2


    === edit2 ende ===


    Viel Glück
    so long
    Perlchamp

    --- wer lesen kann, ist klar im Vorteil ---

    --- man sollte keine Dummheit zweimal begehen, die Auswahl ist schließlich groß genug ---

    --- der Fortschritt der Menschheit ist das Werk der Unzufriedenen ---

    --- Freude entsteht aus Mangel an Information ---

    --- Scheiße ist, wenn der Furz etwas wiegt ---

    Einmal editiert, zuletzt von Perlchamp (24. Mai 2014 um 22:05)

  • Hi,

    ich bin gerade auf dein Post hier aufmerksam geworden, da ich selber nach einigen Funktionshilfen suche.

    Ich hab gesehen das du ein Schalter eingebaut hast
    ist das ein Taster, womit du dann das Script startest ?
    Denn genau sowas suche ich, sodass ich das Script mittels Taster starten und beenden kann.
    Am besten mit 2 Taster.
    vielleicht kannst du mir dabei helfen wie ich das realisieren kann. Ich hab noch 2 Pins dafür frei. GPIO.setmode(GPIO.BOARD) ist bei mir auch auf BOARD gesetzt. somit habe ich Pin 21 und 23 zur Verfügung.

    Ich hab auch gesehen das du deine Motoren über die PWM steuerst. Ich versuche das auch umzusetzen. Jedoch stehe ich da gerade am Anfang. Denn ich hab das Problem das wenn der kleine auf glatten Untergrund losfährt, er soviel speed aufnimmt das er beim Messen dann nicht genügend Zeit hat um rechtzeitig zum stehen zu kommen.
    Ich hatte mir überlegt das mittels dem US Modul mit einer entsprechenden Distanzunterschreitung ab 50 cm auf 50 % zu reduzieren und dann wenn die entsprechende final Distanz 35 cm unterschritten wird, ihn dann zu stoppen.

    Vielleicht können wir uns hier gegenseitig helfen. Wenn Interesse an einer verbalen Kommunikation besteht, dann schreib mal eine PM an mich ich hab nen Teamspeak Server dort könnten wir uns ja mal dann unterhalten und Erfahrungen austauschen oder uns gegenseitig helfen.


    Hier mal mein Script und ein paar Videos


    Movie1
    Movie2


    Meld dich ich schau morgen hier wieder rein.

    MFG

    Zappelmann

  • Ok ich hab mir das mal genauer angesehen mit dem start/stop bei dir ist ja im grunde ziemlich einfach gewesen. Hab das bei mir im Script jetzt auch umsetzen können. Hab aber kein Taster wie ursprünglich vorgehabt genommen sondern nen richtigen Schalter.

    Ok ich hoffe das du dich trotzdem hier bald meldest denn das mit dem PWM raff ich atm noch garnicht hab dazu mehrere Tutorials gelsen aber irgendwie werde ich daraus nicht schlau. ^^

    Also bis die Tage

    MFG

    Zappelmann

  • mein Problem ist im Moment, dass es zwar funktioniert, über den Schieberegler die Variable zu setzen, sobald ich dann aber das eigentliche Programm starte (durch schließen des Tkinter Fensters), sind die Variablen wieder auf 0...

    wie bekomme ich denn nun die Variablen ins Hauptprogramm? Die variable wird beim drücken von Zeigen richtig angezeigt, sobald ich nun Jedoch starte, sind Sie wieder genullt...

    Einmal editiert, zuletzt von nilsconrad (27. Mai 2014 um 18:03)

  • etwa so?

    so funktioniert es leider auch nicht. Es sind ja eigentlich 2 Programme, das eine wird geschlossen und das andere aufgerufen. setze ich das mainloop() vor lr = lr() rr = rr(), dann bekomme ich einen Fehler.

  • Moin,

    1. wenn du dein Code mit anderen teilst, sei es darum, Hilfe zu erwarten oder sonst was, dann bitte halte dich an PEP 8 -- Style Guide for Python Code, damit ihn auch alle lesen können.

    2.
    ich meine es so:

    PS:

    Wie dbv schon schrieb, vergiss bitte, dass es in Python globale Variablen gibt. Diese brauchst du zu 99 % nicht. Das Ergebnis einer Funktion bzw dessen Aufruf gibt man als return Wert aus der Funktion zurück. Niemals darf eine Funktion Objekte verändern, die nicht als Parameter hinein gekommen sind.

    Edit:
    Und was soll dieses -> get() <- :denker: Das brauchst du nur, wenn du aus einem Wörterbuch ein bestimmter Wert ausgegeben haben willst.

  • Diesen .get() teil habe ich selbst noch nicht verstanden, funktionieren tut es nun aber immernoch nicht, leider. Ich weiß nämlich noch nicht, wie ich die Variable aus dem tkinter Programmteil in mein eigentliches Programm übergeben bekomme, wie dbv dies angedeutet hat.

    PS: Entschuldigen Sie meine Programmierung, die ist für Lehrer und Mitschüler gedacht, denen ich anhand meiner Kommentare nachher etwas erklären möchte.

Jetzt mitmachen!

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