@Domieos: Das ist unregelmässig eingerückt und kommt so nicht am Compiler vorbei.
Eingerückt wird in Python mit vier Leerzeichen pro Ebene.
Auf Modulebene sollte nur Code stehen der Konstanten, Funktionen, und Klassen definiert. Das Hauptprogramm steht üblicherweise in einer Funktion die `main()` heisst.
``as`` beim Importieren ist zum Umbenennen, `GPIO` wird aber gar nicht umbenannt.
Statt überall magische Zahlen zu verwenden sollte man die Pin-Nummern als Konstanten definieren. Weil Du das nicht gemacht hast, weiss man als Leser jetzt gar nicht was die Pins bedeuten.
Um die Bedingung bei ``if`` gehören keine Klammern. Und man vergleicht auch nicht mit literalen Wahrheitswerten, denn da kommt ja sowieso nur wieder ein Wahrheitswert bei heraus. Entweder der, den man sowieso schon hatte, oder dessen Gegenteil. Noch unsinniger werden die ``if``/``else``-Konstrukte dadurch das Du den Wert vom jeweiligen Input beim dazugehörigen Output setzt. Das kann man also auch direkt machen.
Anstelle von `time.strftime()` würde man eher mit dem `datetime`-Modul arbeiten und anstelle von Zeichenkettenformatierung mit dem veralteten ``%``-Operator mit f-Zeichenkettenliteralen. Und mit weniger Zwischenergebnissen.
Das Zeilenendezeichen kann man auch gleich in der f-Zeichenkette unterbringen.
Dateien öffnet man wo es geht zusammen mit der ``with``-Anweisung um das schliessen in jedem Fall zu gewährleisten.
Bei Textdateien sollte man immer eine explizite Kodierung angeben.
Den Dateinamen würde man als Konstante herausziehen, damit man den leicht anpassen kann.
Überarbeitet sähe Dein Code so aus (ungetestet):
Code: Alles auswählen
#!/usr/bin/env python3
import time
from datetime import datetime as DateTime
import gpiozero
from RPi import GPIO
VOLTAGE_LOG_FILENAME = "/media/pi/dm/log_spannung"
INPUT_PIN_A = 35
INPUT_PIN_B = 29
OUTPUT_PIN_A = 36
OUTPUT_PIN_B = 32
def main():
GPIO.setmode(GPIO.BOARD)
GPIO.setup([INPUT_PIN_A, INPUT_PIN_B], GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
GPIO.setup([OUTPUT_PIN_A, OUTPUT_PIN_B], GPIO.OUT)
while True:
GPIO.output(OUTPUT_PIN_A, GPIO.input(INPUT_PIN_A))
GPIO.output(OUTPUT_PIN_B, GPIO.input(INPUT_PIN_B))
adc = gpiozero.MCP3008()
while True:
now = DateTime.now()
voltage = adc.voltage * 4.848
line = (
f"{voltage:.2f} Volt Datum: {now:%d.%m.%Y}"
f" Uhrzeit: {now:%H:%M:%S}\n"
)
# print(line, end="")
with open(VOLTAGE_LOG_FILENAME, "a", encoding="ascii") as file:
file.write(line)
time.sleep(30 * 60)
if __name__ == "__main__":
main()
Du mischst `gpiozero` und `RPi.GPIO` — das geht nicht, beziehungsweise nur wenn `gpiozero` auch `RPi.GPIO` als Backend verwendet, was nicht wirklich garantiert ist. Die bessere API ist `gpiozero` also sollte man das komplett darauf portieren.