Messergebnisse in eine CSV-Datei auslagern

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

Messergebnisse in eine CSV-Datei auslagern

Beitragvon simideluxe » 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! :)

  1. #!/usr/bin/python
  2. # Projekt_Schiefe_Ebene_2017
  3. import time
  4. import RPi.GPIO as gpio # Einbinden der RPi.GPIO Bibliothek
  5. import lcddriver    # Einbinden des LC-Display Treibers
  6.  
  7. GPIO_SENSOR_PINS = [22, 23, 24, 25, 26] # Erstellen einer Liste mit den GPIO_SENSOR_PINS
  8.  
  9. SETUP = [
  10.         {'pin': 23, 'distance': 10.0, 'timeout': 5},
  11.         {'pin': 24, 'distance': 40.0, 'timeout': 10},
  12.         {'pin': 25, 'distance': 90.0, 'timeout': 15},
  13.     {'pin': 26, 'distance':160.0, 'timeout': 20},]
  14.  
  15. class TimeoutError(Exception):
  16.     pass
  17.  
  18. def get_lowtime(pin, timeout=36):
  19.     start = time.time()
  20.     if gpio.wait_for_edge(pin, gpio.RISING, timeout=timeout*1000) is None:
  21.         raise TimeoutError()
  22.     return time.time() - start
  23.  
  24. def main():
  25.     # Programm starten und Sensoren initialisieren:
  26.     gpio.setmode(gpio.BCM)
  27.     gpio.setup(GPIO_SENSOR_PINS, gpio.IN)
  28.     lcd = lcddriver.lcd()
  29.     lcd.lcd_clear()
  30.  
  31.     _ = get_lowtime(GPIO_SENSOR_PINS[0]) # Warten auf den Start
  32.  
  33.     for nr, setup in enumerate(SETUP, 1):
  34.         try:
  35.             timedelta = get_lowtime(setup['pin'], setup['timeout'])
  36.         except TimeoutError:
  37.             lcd.lcd_clear()
  38.             lcd.lcd_display_string("Timeout %d" % nr, 1)
  39.             return
  40.         speed = setup['distance'] / timedelta
  41.         print("%d. Geschwindigkeit" % nr, speed)
  42.         print("%d. Zeit" % nr, timedelta)
  43.         lcd.lcd_display_string("v: %.2f cm/s" % speed, 1)
  44.         lcd.lcd_display_string("t: %.2f s" % timedelta, 2)
  45.  
  46. if __name__ == '__main__':      # Idiom erstellen
  47.     main()
  48.     try:
  49.         while True:
  50.             testname = input("Geben Sie einen Namen für diesen Test ein: ")    
  51.             result = main(speed)
  52.             with open('Lichtschranke.csv','a') as out:
  53.                 for i in result:
  54.                     out.write("{};{};{}\n".format(testname,i,result[i]))
  55.     except KeyboardInterrupt:
  56.         print("Test beendet")
Benutzeravatar
noisefloor
User
Beiträge: 2233
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: Görgeshausen
Kontaktdaten:

Re: Messergebnisse in eine CSV-Datei auslagern

Beitragvon noisefloor » 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

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder