Neuling Variabel

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Domieos
User
Beiträge: 9
Registriert: Dienstag 18. Februar 2020, 20:43

Hallo, bin ganz neu hier und bitte um Eure unterstützung.
Ich möchte gerne den Wert welchen ich aus dem AD-Wandler auslese in einer TXT-Datei abspeichern

Das schreiben in die Datei klappt einwandfrei:
file = open ("Neu","a") #a bedeutet neue Zeile
file.write("Depop\n")
file.close()


Und das Auslesen der Spannung klappt einwandfrei:
import time, gpiozero
adc = gpiozero.MCP3008 (channel = 0)
while True:
voltage = adc.voltage
print("Spannung am Wassersensor: %.2f V" % voltage)
time.sleep (5)



Leider ist jeder Versuch gescheitert diese beiden Steps zu vereinen.

Ich würde mich über Unterstützung sehr freuen.

Gruß Dominik :wink:
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Da stimmen schonmal die Kommentare nicht - "a" bedeutet nicht neue Zeile. Es bedeutet nur, das der Dateizeiger, ab dem geschrieben wird, am Ende (append) steht. Wenn man also kein Zeilenende-Zeichen schreibt, dann ist da auch keine neue Zeile.

Und was hast du denn versucht, um das zusammen zu bringen?
Benutzeravatar
__blackjack__
User
Beiträge: 14051
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Domieos: Beim ersten Code sollte man die ``with``-Anweisung verwenden statt die Datei mit `close()` nur dann zu schliessen wenn der Programmfluss auch tatsächlich bis zu der Zeile kommt. Ausserdem ist es ratsam bei Textdateien immer eine Kodierung anzugeben, damit überall die gleiche Kodierung genommen wird, und die nicht vom System abhängig ist auf dem man das ausführt:

Code: Alles auswählen

with open("Neu", "a", encoding="ascii") as file:
    file.write("Depop\n")
Importe von verschiedenen Modulen werden üblicherweise nicht in einer ``import``-Anweisung zusammengefasst.

Eingerückt wird mit vier Leerzeichen pro Ebene, nicht mit nur einem. Hier im Forum sollte man den Quelltext dann auch in Code-Tags setzen, damit man die Einrückung auch sehen kann, denn die ist bei Python ein wichtiger Bestandteil der Syntax.

``%`` würde ich nicht mehr verwenden wo man das nicht muss. In modernem Python-Code verwendet man entweder die `format()`-Methode auf Zeichenketten, oder ab Python 3.6 f-Zeichenkettenliterale um Werte in Zeichenketten zu formatieren.

Man muss auch nicht jeden Zwischenwert an einen eigenen Namen binden. `voltage` trägt nicht wirklich zum besseren Verständnis des Programms bei.

`channel` ist der Name des ersten Arguments von MCP3008.__init__() und 0 ist der Defaultwert. Das kann man sich also auch sparen das anzugeben.

Code: Alles auswählen

import time

import gpiozero

adc = gpiozero.MCP3008()
while True:
    print(f"Spannung am Wassersensor: {adc.voltage:.2f} V")
    time.sleep(5)
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Domieos
User
Beiträge: 9
Registriert: Dienstag 18. Februar 2020, 20:43

__deets__ hat geschrieben: Dienstag 18. Februar 2020, 21:34 Da stimmen schonmal die Kommentare nicht - "a" bedeutet nicht neue Zeile. Es bedeutet nur, das der Dateizeiger, ab dem geschrieben wird, am Ende (append) steht. Wenn man also kein Zeilenende-Zeichen schreibt, dann ist da auch keine neue Zeile.

Und was hast du denn versucht, um das zusammen zu bringen?
Hallo vielen Dank fürs darauf Aufmerksam machen.
Ich habe alles mögliche Versucht aber leider alles ohne Erfolg
Domieos
User
Beiträge: 9
Registriert: Dienstag 18. Februar 2020, 20:43

__blackjack__ hat geschrieben: Dienstag 18. Februar 2020, 22:59 @Domieos: Beim ersten Code sollte man die ``with``-Anweisung verwenden statt die Datei mit `close()` nur dann zu schliessen wenn der Programmfluss auch tatsächlich bis zu der Zeile kommt. Ausserdem ist es ratsam bei Textdateien immer eine Kodierung anzugeben, damit überall die gleiche Kodierung genommen wird, und die nicht vom System abhängig ist auf dem man das ausführt:

Code: Alles auswählen

with open("Neu", "a", encoding="ascii") as file:
    file.write("Depop\n")
Importe von verschiedenen Modulen werden üblicherweise nicht in einer ``import``-Anweisung zusammengefasst.

Eingerückt wird mit vier Leerzeichen pro Ebene, nicht mit nur einem. Hier im Forum sollte man den Quelltext dann auch in Code-Tags setzen, damit man die Einrückung auch sehen kann, denn die ist bei Python ein wichtiger Bestandteil der Syntax.

``%`` würde ich nicht mehr verwenden wo man das nicht muss. In modernem Python-Code verwendet man entweder die `format()`-Methode auf Zeichenketten, oder ab Python 3.6 f-Zeichenkettenliterale um Werte in Zeichenketten zu formatieren.

Man muss auch nicht jeden Zwischenwert an einen eigenen Namen binden. `voltage` trägt nicht wirklich zum besseren Verständnis des Programms bei.

`channel` ist der Name des ersten Arguments von MCP3008.__init__() und 0 ist der Defaultwert. Das kann man sich also auch sparen das anzugeben.

Code: Alles auswählen

import time

import gpiozero

adc = gpiozero.MCP3008()
while True:
    print(f"Spannung am Wassersensor: {adc.voltage:.2f} V")
    time.sleep(5)

Oh das ist eine tolle und sehr hilfreiche Antwort, ich werde das direkt abändern. Ich sehe schon es gibt viel zu lernen für mich.
Kannst du mir einen Tipp geben wie ich das Ergebnis aus der Abfrage in eine Txt-Datei abspeichern kann?

schönen Abend
Sirius3
User
Beiträge: 18272
Registriert: Sonntag 21. Oktober 2012, 17:20

Wo hast Du denn noch Probleme? Du hast vier Zeilen Code, der die Spannung liest und ausgibt und Du hast zwei Zeilen Code, der etwas in eine Datei schreibt. Das mußt Du doch nur kombinieren.
Domieos
User
Beiträge: 9
Registriert: Dienstag 18. Februar 2020, 20:43

Sirius3 hat geschrieben: Mittwoch 19. Februar 2020, 20:02 Wo hast Du denn noch Probleme? Du hast vier Zeilen Code, der die Spannung liest und ausgibt und Du hast zwei Zeilen Code, der etwas in eine Datei schreibt. Das mußt Du doch nur kombinieren.

Code: Alles auswählen

import time, gpiozero

adc = gpiozero.MCP3008 (channel = 0)

while True:
   voltage = adc.voltage
   spannung = ("Spannung am Wassersensor: %.2f V" % voltage)


 
file = open ("Neu","a") 
file.write("spannung")
file.close()
 

bitte habe Nachsicht das ist mein erster Code bin recht weit am Anfang aber ich lerne gerne
Benutzeravatar
__blackjack__
User
Beiträge: 14051
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Domieos: In der Python-Dokumentation gibt es ein Tutorial in dem die Grundlagen vermittelt werden. Arbeite das mal durch.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Domieos
User
Beiträge: 9
Registriert: Dienstag 18. Februar 2020, 20:43

__blackjack__ hat geschrieben: Mittwoch 19. Februar 2020, 21:22 @Domieos: In der Python-Dokumentation gibt es ein Tutorial in dem die Grundlagen vermittelt werden. Arbeite das mal durch.
ich bin bereits dabei :)
Domieos
User
Beiträge: 9
Registriert: Dienstag 18. Februar 2020, 20:43

__blackjack__ hat geschrieben: Dienstag 18. Februar 2020, 22:59 @Domieos: Beim ersten Code sollte man die ``with``-Anweisung verwenden statt die Datei mit `close()` nur dann zu schliessen wenn der Programmfluss auch tatsächlich bis zu der Zeile kommt. Ausserdem ist es ratsam bei Textdateien immer eine Kodierung anzugeben, damit überall die gleiche Kodierung genommen wird, und die nicht vom System abhängig ist auf dem man das ausführt:

Code: Alles auswählen

with open("Neu", "a", encoding="ascii") as file:
    file.write("Depop\n")
Importe von verschiedenen Modulen werden üblicherweise nicht in einer ``import``-Anweisung zusammengefasst.

Eingerückt wird mit vier Leerzeichen pro Ebene, nicht mit nur einem. Hier im Forum sollte man den Quelltext dann auch in Code-Tags setzen, damit man die Einrückung auch sehen kann, denn die ist bei Python ein wichtiger Bestandteil der Syntax.

``%`` würde ich nicht mehr verwenden wo man das nicht muss. In modernem Python-Code verwendet man entweder die `format()`-Methode auf Zeichenketten, oder ab Python 3.6 f-Zeichenkettenliterale um Werte in Zeichenketten zu formatieren.

Man muss auch nicht jeden Zwischenwert an einen eigenen Namen binden. `voltage` trägt nicht wirklich zum besseren Verständnis des Programms bei.

`channel` ist der Name des ersten Arguments von MCP3008.__init__() und 0 ist der Defaultwert. Das kann man sich also auch sparen das anzugeben.

Code: Alles auswählen

import time

import gpiozero

adc = gpiozero.MCP3008()
while True:
    print(f"Spannung am Wassersensor: {adc.voltage:.2f} V")
    time.sleep(5)
Ich danke dir ganz besonders! mein Fehler war wie du schon sagtest das ich es nicht gar nicht eingerückt hatte bei der einbindung in die TXT datei. !!

Vielen dank und schönen Abend
Antworten