Seite 1 von 1

Neuling Variabel

Verfasst: Dienstag 18. Februar 2020, 21:09
von Domieos
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:

Re: Neuling Variabel

Verfasst: Dienstag 18. Februar 2020, 21:34
von __deets__
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?

Re: Neuling Variabel

Verfasst: Dienstag 18. Februar 2020, 22:59
von __blackjack__
@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)

Re: Neuling Variabel

Verfasst: Mittwoch 19. Februar 2020, 19:32
von Domieos
__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

Re: Neuling Variabel

Verfasst: Mittwoch 19. Februar 2020, 19:36
von Domieos
__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

Re: Neuling Variabel

Verfasst: Mittwoch 19. Februar 2020, 20:02
von Sirius3
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.

Re: Neuling Variabel

Verfasst: Mittwoch 19. Februar 2020, 20:58
von Domieos
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

Re: Neuling Variabel

Verfasst: Mittwoch 19. Februar 2020, 21:22
von __blackjack__
@Domieos: In der Python-Dokumentation gibt es ein Tutorial in dem die Grundlagen vermittelt werden. Arbeite das mal durch.

Re: Neuling Variabel

Verfasst: Mittwoch 19. Februar 2020, 21:24
von Domieos
__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 :)

Re: Neuling Variabel

Verfasst: Mittwoch 19. Februar 2020, 22:03
von Domieos
__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