Programm läuft auf PC aber nicht auf Pico selbst.

Python auf Einplatinencomputer wie Raspberry Pi, Banana Pi / Python für Micro-Controller
Antworten
Schlangenmensch
User
Beiträge: 61
Registriert: Freitag 18. Februar 2022, 10:13

Hallo,
ich habe mal wieder etwas herumgebastelt und Folgendes Programm zusammengestellt:

from machine import ADC,Pin
from utime import sleep

SOUND_SENSOR = ADC(1)
LED = machine.Pin(16,machine.Pin.OUT)
STAT = machine.Pin(25,machine.Pin.OUT)

file = open("status.txt", "w")

while True:
average = 0
STAT.value(1)
sleep(5)
STAT.value(0)

for i in range (1000):
noise = SOUND_SENSOR.read_u16()/256
average += noise
noise = average/1000
print(noise)



if noise > 20.000000:
LED.value(1)
file.write("ein" +"\n")
else:
LED.value(0)
file.write("aus" +"\n")
sleep(30)

Mit dem Programm möchte ich so eine Art Akustikschalter umsetzen, der gleichzeitig in die Datei "Status.txt" den Zustand der "Geräuscherkennung" aufzeichnet. Pin 25 dient nur als Überwachung ob das Programm überhaupt läuft.

Nun meine eigentliche Frage. Wenn ich das Programm am PC über den Pico laufen lasse, funktioniert alles einwandfrei. sobald ich aber den Pico an eine Powerbank anschliesse, sehe ich zwar, das Programm läuft aber die Daten EIN/AUS werden in der Status.TXT nicht aufgezeichnet.
Das Programm wurde natürlich vorher in main.Py umbenannt.

Bitte keine Kommentare zu dem schrottigen Programm oder Sinn und Unsinn von dem Programm.

Was mach ich hier falsch?
Sirius3
User
Beiträge: 17749
Registriert: Sonntag 21. Oktober 2012, 17:20

Wenn das Schrottige am Programm aber Schuld daran ist, dass das Programm nicht funktioniert?

Code: Alles auswählen

from machine import ADC, Pin
from utime import sleep

SOUND_SENSOR = ADC(1)
LED = machine.Pin(16,machine.Pin.OUT)
STAT = machine.Pin(25,machine.Pin.OUT)

while True:
    STAT.value(1)
    sleep(5)
    STAT.value(0)
    average = sum(
        SOUND_SENSOR.read_u16()
        for i in range(1000)
    ) / 256000
    print(average)
    
    on = noise > 20
    LED.value(on)
    with open("status.txt", "a") as file:
        file.write("ein\n" if on else "aus\n")
    sleep(30)
Schlangenmensch
User
Beiträge: 61
Registriert: Freitag 18. Februar 2022, 10:13

.....wenn das schrottige Programm das Problem ist nehme ich die Kritik natürlich gerne an. Habe in der Zwischenzeit selbst nochmal etwas herumgebastelt und habe das Programm so hinbekommen das es mir die Zustände ein/aus auch auf dem Pico speichert.

Code: Alles auswählen

from machine import ADC,Pin
from utime import sleep

SOUND_SENSOR = ADC(1)
LED = machine.Pin(16,machine.Pin.OUT)
STAT = machine.Pin(25,machine.Pin.OUT)



while True:
    average = 0 
    STAT.value(1)
    sleep(3)
    STAT.value(0)
    
    for i in range (1000):
        noise = SOUND_SENSOR.read_u16()/256
        average += noise
    noise = average/1000
    print(noise)
    
    
    
    if noise > 20.000000:
        file = open("status.txt", "a")
        LED.value(1)
        file.write("ein" +"\n")
        file.close()
    else:
        file = open("status.txt", "a")
        LED.value(0)
        file.write("aus" +"\n")
        file.close()
    
        
    sleep(60)
Vielen Dank.
Benutzeravatar
Dennis89
User
Beiträge: 1155
Registriert: Freitag 11. Dezember 2020, 15:13

Hallo,

gut dass die Datei jetzt geschlossen wird. Wenn du dazu aber das 'with'-Statemant benutzt (siehe Sirius3 Code), dann wird die Datei "automatisch" geschlossen, auch wenn das Programm abbricht.
Es bietet sich auch immer an absolute Pfade zu verwenden. 'pathlib' wäre hier eine passende Bibliothek.

Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
__deets__
User
Beiträge: 14539
Registriert: Mittwoch 14. Oktober 2015, 14:29

Das with statement und die Probleme, die man sich ohne es einfängt, wurden Schlangenmensch schon in der Vergangenheit nahegelegt. Hätte man sich also alles sparen können, aber offensichtlich sind solche Hinweise Perlen vor die Säue, weil nur “Kommentare”, die man sich verbittet 🙄
Benutzeravatar
Dennis89
User
Beiträge: 1155
Registriert: Freitag 11. Dezember 2020, 15:13

Achso, dann schlängelt er sich hier so durch 🤔
"When I got the music, I got a place to go" [Rancid, 1993]
Schlangenmensch
User
Beiträge: 61
Registriert: Freitag 18. Februar 2022, 10:13

Es tut mir leid, wenn es für manche User so rüberkommt, daß Kommentare auf meine Fragen "Perlen vor die Säue" sind. Ich habe offensichtlich manche Codes nicht richtig gelesen, bzw. dachte der Code wurde einfach kopiert um mir das schlechte Programm unter die Nase zu reiben.

Des Weiteren musste ich zuerst einmal verstehen, wofür das with Statement steht.

Ich bitte Euch nicht all zu streng mit mir zu sein. Es sind bei mir die ersten Schritte in der Programmierung und bin auf jede Hilfe angewiesen. Ich arbeite auch schon diverse Tutourials durch aber manchmal komme ich da auch nicht weiter, weshalb ich mich dann an Euch wende.
__deets__
User
Beiträge: 14539
Registriert: Mittwoch 14. Oktober 2015, 14:29

Das Problem ist nicht, auf Hilfe angewiesen zu sein. Das Problem ist, dass du - bar jeder Ahnung - meinst besser zu wissen, was hier Hilfestellung ist, und was nur genoele an deinem Skript. Und uns irgendwelche niederen Motive unterstellst.
Benutzeravatar
DeaD_EyE
User
Beiträge: 1021
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

Bitte keine Kommentare zu dem schrottigen Programm oder Sinn und Unsinn von dem Programm.

Was mach ich hier falsch?
Das ist unlogisch und schließt sich gegenseitig aus.
Es gibt destruktive und konstruktive Kritik.
Konstruktive Kritik wird hier ausgeübt. Damit muss man umgehen können.

Bisher habe ich nur konstruktive Kritik mit Vorschlägen zur Verbesserung des Codes gesehen.

With-Statement: https://realpython.com/python-with-statement/
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
Schlangenmensch
User
Beiträge: 61
Registriert: Freitag 18. Februar 2022, 10:13

Aslo Leute, ich möchte hiermit das Thema beenden und mich für die Kritik bedanken. Leider sind hier einige Zeilen nicht so herübergekommen wie sie von mir gedacht waren, bzw. ich habe wohl unüberlegt in die Tatsen gehauen. Hierfür möchte ich mich nochmals entschuldigen.
Antworten