ich möchte alle meine Messergebnisse in main "speed" und "timedelta" in eine CSV-Datei auslagern und mit einem testnamen versehen. Habe dafür folgenden Programmcode ab Zeile 48 geschrieben. Gibt es eine Verbesserung dazu? Danke!
Code: Alles auswählen
#!/usr/bin/python
# Projekt_Schiefe_Ebene_2017
import time
import RPi.GPIO as gpio # Einbinden der RPi.GPIO Bibliothek
import lcddriver # Einbinden des LC-Display Treibers
GPIO_SENSOR_PINS = [22, 23, 24, 25, 26] # Erstellen einer Liste mit den GPIO_SENSOR_PINS
SETUP = [
{'pin': 23, 'distance': 10.0, 'timeout': 5},
{'pin': 24, 'distance': 40.0, 'timeout': 10},
{'pin': 25, 'distance': 90.0, 'timeout': 15},
{'pin': 26, 'distance':160.0, 'timeout': 20},]
class TimeoutError(Exception):
pass
def get_lowtime(pin, timeout=36):
start = time.time()
if gpio.wait_for_edge(pin, gpio.RISING, timeout=timeout*1000) is None:
raise TimeoutError()
return time.time() - start
def main():
# Programm starten und Sensoren initialisieren:
gpio.setmode(gpio.BCM)
gpio.setup(GPIO_SENSOR_PINS, gpio.IN)
lcd = lcddriver.lcd()
lcd.lcd_clear()
_ = get_lowtime(GPIO_SENSOR_PINS[0]) # Warten auf den Start
for nr, setup in enumerate(SETUP, 1):
try:
timedelta = get_lowtime(setup['pin'], setup['timeout'])
except TimeoutError:
lcd.lcd_clear()
lcd.lcd_display_string("Timeout %d" % nr, 1)
return
speed = setup['distance'] / timedelta
print("%d. Geschwindigkeit" % nr, speed)
print("%d. Zeit" % nr, timedelta)
lcd.lcd_display_string("v: %.2f cm/s" % speed, 1)
lcd.lcd_display_string("t: %.2f s" % timedelta, 2)
if __name__ == '__main__': # Idiom erstellen
main()
try:
while True:
testname = input("Geben Sie einen Namen für diesen Test ein: ")
result = main(speed)
with open('Lichtschranke.csv','a') as out:
for i in result:
out.write("{};{};{}\n".format(testname,i,result[i]))
except KeyboardInterrupt:
print("Test beendet")