Daten aus einer Datei lesen

Python auf Einplatinencomputer wie Raspberry Pi, Banana Pi / Python für Micro-Controller
Sirius3
User
Beiträge: 8291
Registriert: Sonntag 21. Oktober 2012, 17:20

Donnerstag 8. März 2018, 09:39

@WernerSch: man muß mit Rückgabewerten einer Funktion auch etwas machen. Wenn man sie nur aufruft und das Ergebnis wegschmeißt, kann man es gleich sein lassen. Das Ergebnis ist dann ein Wörterbuch mit Strings, das heißt, um die Werte benutzen zu können, mußt Du sie aus dem Wörterbuch auslesen und in eine Zahl umwandeln. Ansonsten gilt immer noch das, was ich zu `read` und `rsplit` und deren falscher Verwendung geschrieben habe.
WernerSch
User
Beiträge: 13
Registriert: Sonntag 25. Februar 2018, 19:50

Donnerstag 8. März 2018, 22:49

Ich habe ein Riesen Problem. Ich habe seit Jahren Python Bücher über Bücher,die ich auch immer wieder lese. Für meine Begriffe, befassen die sich nur mit einer neuen programmierung des Programmes Word. Ich versteh sie nicht. Hast du nicht einen Tip, welches Buch sich mit Python Geometrie,Zahlen und Berechnungen befasst, dann wird sicherlich auch mal mein Groschen fallen..
Ich bin ja auch bis jetzt ans Ziel gekommen mit Kraut und Rüben Programmierung. Nur das ist nicht mehr mein Ziel. Ich möchte schon gerne mehr Lernen und Wissen über die Sprache und ihre Struktur.
Warum habe ich soviele Bücher. Ich gehe immer in eine Buchhandlung und schaue mir das Buch an und rein, finde dann auch eine Sache die ich Verstehe und somit wurde es gekauft. Nur zur Struktur hab ich bis heute kein für mich verständliches gefunden. Struktur heisst für mich, Welche Variablen sind wo Aktiv.
Entschuldigt nochmal meine Einrückungen, das kommt vom Editor des Raspi´s. Wing läuft auf ihm leider nicht und auf meinem Hauptrechner , laufen die Python Programme des Raspi´s nicht, weil die Funktionen dessen nicht gefunden werden. Mega Mist, denn im Wing, sehe ich die Ergebnisse der Variablen sofort die ich in der normalen Python Umgebung nicht sehe. Eine Programm Entwicklung ist da schon sehr ZÄH
Ich bin ja auch 2 Schritte weiter gekommen

Code: Alles auswählen

#läuft, diese Version soll die Zustandsdatei lesen und weiter verarbeiten und neu schreiben
import sys,re, time, Adafruit_PCA9685, tkinter,shelve,os,subprocess
from tkinter import *

pwm = Adafruit_PCA9685.PCA9685()
pwm.set_pwm_freq(60)

    
def tor1():
     datei_n=tor1
     datei_name=(("tor1")+str(".dat"))
     daten=read_data(datei_name)
     servo1_min = float(daten['servo1_min'])
     servo1_max = float(daten['servo1_max'])
     kanal1=int(daten['kanal1'])
     servo2_min = float(daten['servo2_min'])
     servo2_max = float(daten['servo2_max'])
     kanal2=int(daten['kanal2'])
     servo_anz=int(daten['servo_anz'])
     v_zeit=float(daten['v_zeit'])
     
     bewegen(servo1_min,servo1_max,kanal1,servo2_min,servo2_max,kanal2,servo_anz,v_zeit,datei_name)

     s1=servo1_max
     s2=servo2_max
     servo1_max=int(servo1_min)
     servo2_max=int(servo2_min)
     servo1_min=int(s1)
     servo2_min=int(s2)
     
     datei_neu(servo1_min,servo1_max,kanal1,servo2_min,servo2_max,kanal2,servo_anz,v_zeit,datei_name)

def tor2():
     datei_name=(("tor2")+str(".dat"))
     daten=read_data(datei_name)
     servo1_min = float(daten['servo1_min'])
     servo1_max = float(daten['servo1_max'])
     kanal1=int(daten['kanal1'])
     servo2_min = float(daten['servo2_min'])
     servo2_max = float(daten['servo2_max'])
     kanal2=int(daten['kanal2'])
     servo_anz=int(daten['servo_anz'])
     v_zeit=float(daten['v_zeit'])

     bewegen(servo1_min,servo1_max,kanal1,servo2_min,servo2_max,kanal2,servo_anz,v_zeit,datei_name)

     s1=servo1_max
     s2=servo2_max
     servo1_max=int(servo1_min)
     servo2_max=int(servo2_min)
     servo1_min=int(s1)
     servo2_min=int(s2)
     
     datei_neu(servo1_min,servo1_max,kanal1,servo2_min,servo2_max,kanal2,servo_anz,v_zeit,datei_name)

     
def datei_neu(servo1_min,servo1_max,kanal1,servo2_min,servo2_max,kanal2,servo_anz,v_zeit,datei_name):
     f=open(datei_name,"w")
     f.write("servo1_min"+"="+str(servo1_min)+"\n")
     f.write("servo1_max"+"="+str(servo1_max)+"\n")
     f.write("servo2_min"+"="+str(servo2_min)+"\n")
     f.write("servo2_max"+"="+str(servo2_max)+"\n")
     f.write("servo_anz"+"="+str(servo_anz)+"\n")
     f.write("v_zeit"+"="+str(v_zeit)+"\n")
     f.write("kanal1"+"="+str(kanal1)+"\n")
     f.write("kanal2"+"="+str(kanal2)+"\n")     
     f.close()

  
def bewegen(servo1_min,servo1_max,kanal1,servo2_min,servo2_max,kanal2,servo_anz,v_zeit,datei_name):

     servo1_step=(servo1_max-servo1_min)/servo_anz 
     servo1_pos=servo1_min
     servo2_step=(servo2_max-servo2_min)/servo_anz
     servo2_pos=servo2_min

     for i in range(int(servo_anz)):
            servo1_pos=int(servo1_pos+servo1_step)
            pwm.set_pwm(kanal1, 0, servo1_pos) 
            time.sleep(float(v_zeit))
            
            servo2_pos=int(servo2_pos+servo2_step)
            pwm.set_pwm(kanal2, 0, servo2_pos)
            time.sleep(float(v_zeit))

     return()


def Grafik():
    rootWindow=Tk()
    rootWindow.wm_geometry("500x300")

    b1=Button(rootWindow,text="tor 1",command=tor1)

    b1.place(x=50, y=50, anchor="s")

    b2=Button(rootWindow,text="tor 2",command=tor2)

    b2.place(x=100, y=50, anchor="s")


def read_data(datei_name):
    result={}
    with open(datei_name) as lines:
        for line in lines:
            name, _, value = line.partition('=')
            result[name.strip()] = value.strip()
    return result
    
    


def main():
     Grafik()
     


def ende():
    sys.exit(0)

if __name__ == '__main__':
     main()
Tor1:

Code: Alles auswählen

servo1_min=450
servo1_max=200
servo2_min=210
servo2_max=405
servo_anz=20
v_zeit=0.06
kanal1=2
kanal2=3
tor2:

Code: Alles auswählen

servo1_min=210
servo1_max=420
servo2_min=425
servo2_max=225
servo_anz=20
v_zeit=0.06
kanal1=0
kanal2=1

Als nächstes möchte ich, das ich die Torflügel unabhängig steuern kann
Wird wieder ne Woche und viele viele Fragen hier brauchen

Viele Grüße und Danke für eure Hilfe
Antworten