Hallo,
ich habe ein Script zur kontinuierlichen Distanzmessung geschrieben, leider bleibt dieses nach 10-30s hängen und ich kann mir einfach nicht erklären wieso.
Sensor: HC-SR04
Wenn es sich aufhängt und ich das Skript mit Strg-C beende bekomme ich den folgenden Fehler:
line 69, in update_label
TypeError: float argument required, not NoneType
Ich verstehe nur nicht wie da was anderes als ein float ankommen kann?!
Hier mein Skript:
[code=php]
#Bibliotheken einbinden
import RPi.GPIO as GPIO
import time
import Tkinter as tk
#GPIO Modus (BOARD / BCM)
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
#GPIO Pins zuweisen
GPIO_TRIGGER = 20
GPIO_ECHO = 21
#Inizialisiere Variablen
werte = [0.] * 100 # Gibt an ueber wie viele Werte gemittelt wird (std:100)
#Richtung der GPIO-Pins festlegen (IN / OUT)
GPIO.setup(GPIO_TRIGGER, GPIO.OUT)
GPIO.setup(GPIO_ECHO, GPIO.IN)
def distanz():
# setze Trigger auf HIGH
GPIO.output(GPIO_TRIGGER, True)
# setze Trigger nach 0.01ms aus LOW
time.sleep(0.00001)
GPIO.output(GPIO_TRIGGER, False)
StartZeit = time.time()
StopZeit = time.time()
# speichere Startzeit
while GPIO.input(GPIO_ECHO) == 0:
StartZeit = time.time()
# speichere Ankunftszeit
while GPIO.input(GPIO_ECHO) == 1:
StopZeit = time.time()
# Zeit Differenz zwischen Start und Ankunft
TimeElapsed = StopZeit - StartZeit
# mit der Schallgeschwindigkeit (34300 cm/s) multiplizieren
# und durch 2 teilen, da hin und zurueck
distanz = (TimeElapsed * 34300) / 2
return distanz
# Auswertung der Messung
def abstand():
try:
t = 0
while t < (len(werte)):
aktwert = distanz()
if aktwert >= 0. and aktwert <= 350.: # Nur Werte zwischen 0 und 350cm verwerten
werte[t] = aktwert # Wert in Ringspeicher schreiben
t += 1
abstand = sum(werte) / len(werte) # Mittelwert des Ringspeichers bilden
return abstand
# Beim Abbruch durch STRG+C resetten
except KeyboardInterrupt:
print("Messung vom User gestoppt")
GPIO.cleanup()
# Update Label
def update_label():
label.configure(text='Distance: %.1f %s' % (abstand(), 'cm')) # Bsp.: "126.3 cm"
root.after(10, update_label) # Nach 10ms erneut updaten
root = tk.Tk()
root.wm_title("Distance Measurement")
# Create Label
label = tk.Label(root, text="", font=("Helvetica", 24))
label.pack()
update_label()
root.mainloop()
[/php]
Vielen Dank im voraus! :thumbs1: