Einsteiger braucht "ein wenig" Hilfe

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Liebes Forum,

    ich bin Neueinsteiger in Python und habe natürlich, wie jeder, vieles vor und viele Ideen.

    Für mein Auto habe ich folgendes vor:

    Mit dem Raspberry Pi 2 möchte ich folgendes realisieren und habe schon mal ein wenig rumexperimentiert.

    Ein- Ausgänge Abfragen und steuern klappt soweit für Kompressor und Zündung :thumbs1:

    Hardwareaufbau eines AD-Wandlers zur Batteriespannung auslesen mit Spannungsteiler klappt :thumbs1:

    Die Python Programmierung zur Anzeige des Wertes ebenfalls :thumbs1:

    Das alles als kleines Anfangsprojekt in tkinter auch :thumbs1:

    Nun kommt es: Wenn sich die Batteriespannung ändert ( habe dazu ein Poti eingebaut, damit sich die Spannung verändert ) soll sich der Wert auch im Display / Bildschirm ändern.

    Das tut es aber nicht. Jetzt an dieser Stelle kämen bestimmt die Schleifen zum Einsatz, die ich nicht beherrsche :wallbash:

    Die Schleifen zur Einlesung der AD Werte sind aus Programmteilen zusammengestrickt. Also nicht mein geistiger Erguss.

    Vielleicht kann mir jemand sagen, erklären oder eine gute Hilfe geben, dieses zu realisieren?

    Vielen lieben Dank,

    Eure Fledermaus

    [/code]

    [code=php]import time;
    import RPi.GPIO as GPIO

    GPIO.setmode(GPIO.BCM) # GPIO-Pin Bezeichnungen verwenden
    GPIO.setwarnings(False) # Warnungen deaktivieren


    from tkinter import *
    from random import randint
    from RPi import GPIO
    from time import sleep
    GPIO.setmode(GPIO.BCM)
    GPIO.setup(14,GPIO.OUT)
    GPIO.output(14 , True)

    def Relais_1_EIN():
    GPIO.output(14, False)
    Text1="Kompressor ist AN"
    label2.config(text=Text1,bg="green")

    def Relais_1_AUS():
    GPIO.output(14, True)
    Text2="Kompressor ist AUS"
    label2.config(text=Text2,bg="red")

    def Anzeige_U(event):
    label1.config((actual_value))

    def readAnalogData(adcChannel, SCLKPin, MOSIPin, MISOPin, CSPin, delay):
    """ Funktionsdefinition """
    # Negative Flanke des CS-Signals generieren
    GPIO.output(CSPin, GPIO.HIGH)
    GPIO.output(CSPin, GPIO.LOW)
    GPIO.output(SCLKPin, GPIO.LOW)
    sendCMD = adcChannel
    sendCMD |= 0b00011000 # Entspricht 0x18 (1: Startbit, 1: Single/ended)
    # Senden der Bitkombination (Es finden nur 5 Bits Beruecksichtigung)
    for i in range(5):
    if(sendCMD & 0x10): # Bit an Position 4 pruefen.
    GPIO.output(MOSIPin, GPIO.HIGH)
    else:
    GPIO.output(MOSIPin, GPIO.LOW)
    # Negative Flanke des Clock-Signals generieren
    GPIO.output(SCLKPin, GPIO.HIGH)
    GPIO.output(SCLKPin, GPIO.LOW)
    sendCMD <<= 1 # Bitfolge eine Position nach links schieben
    # Empfangen der Daten des AD-Wandlers
    adcValue = 0 # Reset des gelesenen Wertes
    for i in range(11):
    # Negative Flanke des Clock-Signals generieren
    GPIO.output(SCLKPin, GPIO.HIGH)
    GPIO.output(SCLKPin, GPIO.LOW)
    adcValue <<= 1 # Bitfolge 1 Position nach links schieben
    if(GPIO.input(MISOPin)):
    adcValue |=0x01
    time.sleep(delay) # Kurze Pause
    return adcValue

    def setupGPIO(SCLKPin, MOSIPin, MISOPin, CSPin):
    """ GPIO-Pin Setup """
    GPIO.setup(SCLKPin, GPIO.OUT)
    GPIO.setup(MOSIPin, GPIO.OUT)
    GPIO.setup(MISOPin, GPIO.IN)
    GPIO.setup(CSPin, GPIO.OUT)

    # Variablendefinition
    ADCChannel = 0 # AD-Kanal
    SCLK = 18 # Serial-Clock
    MOSI = 24 # Master-Out-Slave-In
    MISO = 23 # Master-In-Slave-Out
    CS = 25 # Chip-Select
    PAUSE = 0.5 # Anzeigepause

    setupGPIO(SCLK, MOSI, MISO, CS) # GPIO-Pin Setup


    actual_value = readAnalogData(ADCChannel, SCLK, MOSI, MISO, CS, PAUSE)

    window = Tk()
    window.title("Test")
    window.configure(height=400,width=400)
    button1 = Button(master=window,
    text="Kompressor EIN",
    command=Relais_1_EIN,
    font=("Arial",20), fg="green", width="20",height="2",pady="10")

    button2 = Button(master=window,
    text="Kompressor AUS",
    command=Relais_1_AUS,
    font=("Arial",20), fg="red",width="20",height="2",pady="10" )


    label1 = Label(master=window,
    font=("Arial",20),
    bd=1,width=21,
    relief=RIDGE,
    height="2",
    pady="10",
               
    text=actual_value)

    label2 = Label(master=window,
    font=("Arial",20),
    bd=1,
    width=21,
    height="2",
    relief=RIDGE,
    text="")

    label1.pack()
    label2.pack()
    button1.pack()
    button2.pack()

    window.mainloop()
    [/php]

  • Prinzipiell packst du die Abfrage und Anzeige in eine while Schleife. Also "while True:" dann den Rest. Dann erfolgt das Abfragen und Anzeigen permanent so schnell der raspberry kann.
    Automatisch zusammengefügt:
    Also quasi

    while True:
    print "ich mache das jetzt immer wieder so schnell wie möglich"

    Die Deklaration der Variablen und das Beziehen von Bibliotheken bleibt vor der Schleife

    Einmal editiert, zuletzt von dbv (15. September 2016 um 11:54)

  • Mit Tkinter brauchst du keine while! Das würde zudem das ganze Script blockieren also die GUI einfrieren solange die while beschäftigt ist. Eine ungebremste Schleife verursacht zudem 100% CPU Last.

    Guck dir mal das an:
    FAQ => Nützliche Links / Linksammlung => python: Tkinter: Im Hintergrund zählen
    FAQ => Nützliche Links / Linksammlung => python: TKinter Zähler


    PS: "unexpected ident"ist eine falsche Einrückung. Für Python sind korrekte Einrückungen extrem wichtig. Ohne den betroffenen Code zu kennen kann man dazu nichts weiter sagen..

    PPS: Bitte nicht Beiträge vollständig quoten/zitieren, vor allem wenn dies genau da drüber stehen!

  • Danke für die vielen Antworten, aber ich verstehe nur die hälfte.

    Was meinst Du mit: @TE
    Ist der Post mit Tapatalk geschrieben wurden oder sind die Leerzeilen beabsichtigt?

    Vielleicht kann mein PRG von jemanden so angepasst werden, so dass es richtig ist???

    Nochmals vielen lieben Dank.

  • Tja so ist das wenn man etwas copy&pasted aber nicht selber programmiert, dann weiß man nicht woran etwas letztlich liegt wenns ma nicht funktionert

    => http://codepad.org/froWaFoc

    Wenn du wissen willst was da passiert dann ließ bitte meine oben genannten Links.

Jetzt mitmachen!

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