Messergebnisse in eine CSV-Datei auslagern

Python auf Einplatinencomputer wie Raspberry Pi, Banana Pi / Python für Micro-Controller
Antworten
simideluxe
User
Beiträge: 8
Registriert: Donnerstag 7. Dezember 2017, 08:59

Donnerstag 28. Dezember 2017, 22:36

Hallo,

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")
Benutzeravatar
noisefloor
User
Beiträge: 2474
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: Görgeshausen
Kontaktdaten:

Freitag 29. Dezember 2017, 17:55

Hallo,

es gibt das Python-Modul `csv`, welches zum Lesen und Schreiben von CSV-Dateien gemacht ist.

Ansonsten verwirrt mich der Code bzw. der dürfte so gar nicht laufen:

Erst rufst du `main()` auf, dann `main(speed)`. Aber 1. akzeptiert `main()` gar keine Parameter, 2. ist `speed` an dieser Stelle nicht definiert, 3. liefert `main()` keinen Rückgabewert, somit ist `result` immer gleich `None`.

Gruß, noisefloor
Antworten