GUI zur Steuerung eines Servo's

Python auf Einplatinencomputer wie Raspberry Pi, Banana Pi / Python für Micro-Controller
Michael1991
User
Beiträge: 14
Registriert: Sonntag 14. Januar 2018, 19:13

Re: GUI zur Steuerung eines Servo's

Beitragvon Michael1991 » Samstag 20. Januar 2018, 19:19

So da die Steuerung jetzt so mal Funktioniert möchte ich sie jetzt erweitern und zwar mit LED's hab an 8 stk gedacht die mir den Winkel vom Servo anzeigen. Also von 0-20 Grad leuchtet 1 Led von 21-40 Grad 2 LED's usw. ich hoffe ich darf bei fragen wieder auf euch zurückkommen.
MfG
Michael1991
User
Beiträge: 14
Registriert: Sonntag 14. Januar 2018, 19:13

Re: GUI zur Steuerung eines Servo's

Beitragvon Michael1991 » Mittwoch 24. Januar 2018, 19:01

Hallo zusammen ich bräuchte bitte nochmal eure hilfe habe den code jetzt zur probe mal so erweitert und wenn ich das skript starte ist alles solange ok bis ich auf den slider klicke und ihn verschieben möchte (wert ändern)

der code sieht wie folgt aus:

Code: Alles auswählen

from tkinter import*
import pigpio
import RPi.GPIO as gpio
import time

servo = 3
led1 = 11
led2 = 15

gpio.setwarnings(False)
gpio.setmode(gpio.BOARD)
pi=pigpio.pi()

pi.set_mode(servo, pigpio.OUTPUT)
gpio.setup(led1, gpio.OUT)
gpio.setup(led2, gpio.OUT)

 
def change_servo_angle(angle):
    d = float(angle) *8.06 +650
    a = angle
    pi.set_servo_pulsewidth(servo, d)
    while int(input(angle))<=20:
        gpio.setup(led1, true)
   
   
 
root= Tk()
root.wm_title('Servo Control GUI')
scale = Scale(root, from_=1, to=180, orient=HORIZONTAL, length=400,
                 command=change_servo_angle)
scale.grid(row=0, column=0, padx=10, pady=3)
root.mainloop()
gpio.cleanup()


vielen dank im vorhinein
mfg michael
Benutzeravatar
__deets__
User
Beiträge: 2140
Registriert: Mittwoch 14. Oktober 2015, 14:29

Re: GUI zur Steuerung eines Servo's

Beitragvon __deets__ » Mittwoch 24. Januar 2018, 19:09

Du kannst keine while-Schleife benutzen, die beim slider-Wert kleiner 20 halt endlos rumrennt. Und das *input* hat doch erst recht nichts da verloren, das wartet dann doch auf dem Terminal auf eine Eingabe, die du in Form von angle doch schon laengst hast? Was du da brauchst ist eine if-Abfrage stattdessen

Und ein bisschen mehr Sorgfalt kann auch nicht schaden - a = angle ist voellig unnuetz, und "true" gibt's in Python auch nicht. Ausserdem mischst du pigpio und RPI.GPIO, das ist Unfug. Benutz *nur* pigpio, das kann genauso LEDs schalten. Den Import von time auch gleich rausschmeissen, das Modul kannst du in einer GUI sinnvoll eh nicht benutzen.
Michael1991
User
Beiträge: 14
Registriert: Sonntag 14. Januar 2018, 19:13

Re: GUI zur Steuerung eines Servo's

Beitragvon Michael1991 » Mittwoch 24. Januar 2018, 19:43

vielen dank deets habs jetzt so gelöst und es funktioniert :P :P :P

Code: Alles auswählen

from tkinter import*
import pigpio

servo = 3
led1 = 11
led2 = 15

pi=pigpio.pi()

pi.set_mode(servo, pigpio.OUTPUT)
pi.set_mode(led1, pigpio.OUTPUT)
pi.set_mode(led2, pigpio.OUTPUT)

 
def change_servo_angle(angle):
    d = float(angle) *8.06 +650
    pi.set_servo_pulsewidth(servo, d)
    if int(angle)<=20:
        pi.write(led1, 1)
    else:
        pi.write(led1, 0)
   
   
 
root= Tk()
root.wm_title('Servo Control GUI')
scale = Scale(root, from_=1, to=180, orient=HORIZONTAL, length=400,
                 command=change_servo_angle)
scale.grid(row=0, column=0, padx=10, pady=3)
root.mainloop()



Danke nochmal
mfg michael
Michael1991
User
Beiträge: 14
Registriert: Sonntag 14. Januar 2018, 19:13

Re: GUI zur Steuerung eines Servo's

Beitragvon Michael1991 » Samstag 27. Januar 2018, 16:12

hallo ich habe eine frage ich möchte bei meinem code das eine led zwischen den werten 21 und 40 leuchtet nur leuchtet die led ab 21 und hört bei 40 nicht mehr auf hier die dazugehörige codezeile

Code: Alles auswählen

    if int(angle) >20 <40 :
        pi.write(led2, 1)
    else:
        pi.write(led2, 0)


vielen dank für eure hilfe
mfg michael
narpfel
User
Beiträge: 141
Registriert: Freitag 20. Oktober 2017, 16:10

Re: GUI zur Steuerung eines Servo's

Beitragvon narpfel » Samstag 27. Januar 2018, 16:36

@Michael1991: In Python funktionieren verkettete Vergleichsoperatoren wie in der Mathematik: Ein Ausdruck der Form `a OP1 b OP2 c` ist äquivalent zu einem Ausdruck der Form `a OP1 b and b OP2 c` (wobei `OP1` und `OP2` beliebige binäre Vergleichsoperatoren sein können). `b` wird dabei allerdings nur einmal ausgewertet.

Damit wird deine `if`-Bedingung zu `if int(angle) > 20 and 20 < 40:`. Du möchtest aber, dass `20` kleiner als`int(angle)` und `int(angle)` kleiner als `40` ist.
Sirius3
User
Beiträge: 7042
Registriert: Sonntag 21. Oktober 2012, 17:20

Re: GUI zur Steuerung eines Servo's

Beitragvon Sirius3 » Samstag 27. Januar 2018, 18:32

@Michael1991: die zweite Bedingung 20 < 40 ist immer wahr. Es kommt auf die Reihenfolge an:
  1. pi.write(led2, 20 < int(angle) < 40)
Michael1991
User
Beiträge: 14
Registriert: Sonntag 14. Januar 2018, 19:13

Re: GUI zur Steuerung eines Servo's

Beitragvon Michael1991 » Samstag 27. Januar 2018, 20:53

und wieder einmal ein großes danke an euch jetzt funktioniert es

Code: Alles auswählen

    if int(angle) >20 and int(angle)<40 :
        pi.write(led2, 1)
    else:
        pi.write(led2, 0)


anbei noch eine frage habt ihr einen guten tipp für ein gutes buch zum programmieren mit python.
hab im moment Raspberry Pi Das umfassende Handbuch aber ist sehr hilfreich nur python ist leider nicht sehr ausführlich beschrieben und bitte bedenkt ich bin erst ganz am anfang

vielen dank
mfg michael
Benutzeravatar
noisefloor
User
Beiträge: 2225
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: Görgeshausen
Kontaktdaten:

Re: GUI zur Steuerung eines Servo's

Beitragvon noisefloor » Samstag 27. Januar 2018, 21:05

Hallo,

anbei noch eine frage habt ihr einen guten tipp für ein gutes buch zum programmieren mit python.

Die beste Lektüre für Einsteiger ist immer noch das offiziellen Python-Tutorial, da brauchst du kein Buch.

Und natürlich learning-by-doing, im im Forum fragen / Code posten, Kritik abholen, besser werden :-)

Gruß, noisefloor

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder