Alle GPIO gleichzeitig lesen

  • Code
    1. daten_pro_durchgang = (durchgang, event1, event2, event3)

    Soweit war mir das schon klar, aber bei 20 Durchgängen erwarte ich 20x Daten für eventn1, event2, event3
    So wird aber nur jeweils der letzte Zyclus in "daten_pro_durchgang" abgelegt, die vorigen werden überschrieben. richtig?

    Ich muß aber NACH! der Datenerfassung auf alle event_daten zugreifen können, um diese auszuwerten.

    Das sehe ich so nicht.

  • Achtung, 1. ist die Schreibweise keine Liste sondern ein Tupel.


    Code
    1. liste = [1, 2, 3]
    2. tupel = (1, 2, 3)


    Klar, wenn du das so machst überschreibst du ja die Listeninhalte.

    Willst du eine Liste lediglich erweitern so ist append dein Freund.


    Code
    1. liste = [1, 2, 3]
    2. liste.append(4)
    3. print(liste)

    Auch interessant in diesem Fall für dich kann die Info sein, dass man innerhalb von listen weitere Listen speichern kann

    Allgemein:

    Code
    1. liste = [1, [2, 3, 4]]
    2. print(liste)

    In deinem Fall:

    Code
    1. daten_pro_durchgang = []
    2. datensatz = [durchgang, event1, event2, event3]
    3. daten_pro_druchgang.append(datensatz)
  • ok, das sieht mir schon ganz gut aus. Danke

    [[1, [11, 21, 31]]]

    [[2, [12, 22, 32]]]

    [[3, [13, 23, 33]]]

    [[4, [14, 24, 34]]]

    [[5, [15, 25, 35]]]

    [[6, [16, 26, 36]]]

    [[7, [17, 27, 37]]]

    [[8, [18, 28, 38]]]

    [[9, [19, 29, 39]]]

    [[10, [20, 30, 40]]]

    [[11, [21, 31, 41]]]

    [[12, [22, 32, 42]]]

    [[13, [23, 33, 43]]]

    [[14, [24, 34, 44]]]

    [[15, [25, 35, 45]]]

    [[16, [26, 36, 46]]]

    [[17, [27, 37, 47]]]

    [[18, [28, 38, 48]]]

    [[19, [29, 39, 49]]]

    [[20, [30, 40, 50]]]

  • while not (i == 21):

    while i < 21:

    durchgang = i

    Warum? Arbeite doch mit i.

    stationen = []
    datensatz = [durchgang,[event1, event2, event3]]
    stationen.append(datensatz)

    Warum eine Liste, in der sich nur eine Liste befindet? Das macht keinen Sinn. Meinst du nicht, du wolltest stationen außerhalb der Schleife definieren und dann mit append anhängen?

    Den Durchgang musst du IMO gar nicht speichern (in der Liste), das ist ja der Index (oder der Index + 1).


    Allgemein lässt sich das auch mit einer for-Schleife nutzen, die in Python deutlich öfter als eine while-Schleife Verwendung findet:


    Kürzer:

    Python
    1. stations = []
    2. for i in range(1, 21):
    3. data = [i + 10, i + 20, i + 30]
    4. stations.append(data)
    5. for i, data in enumerate(stations):
    6. print(i+1, data)

    Noch kürzer:

    Python
    1. stations = [[i + 10, i + 20, i + 30] for i in range(1, 21)]
    2. for i, data in enumerate(stations):
    3. print(i+1, data)

    Nicht noch noch kürzer, aber auch möglich:

    Python
    1. stations = [[i+j*10 for j in range(1, 4)] for i in range(1, 21)]
    2. for i, data in enumerate(stations):
    3. print(i+1, data)
  • Verstehe (halbwegs) bin kein Programmierer! daher der primitive Code.

    Danke, das kriege ich hin.


    Primär:

    Die Ungenauigkeit im Projekt scheinen auch mit den fotodioden zu tun haben; zumindest sind die Flanken per Oszi nicht sauber. Habe daher TYP: BPW43 bestellt, die nach Datenblatt 4ns schaffen sollen.


    Als zweites werde ich demnächst mal meinen Funktionsgenerator nehmen und ein Rechteck auf das GPIO legen.

    Danach weiß ich sicher die kleinste mögliche Reaktionszeit, die noch reproduzierbar ist.

    Den Versuch mit Motor habe ich gestern leider nicht mehr geschafft; schlafen muss auch sein.

    Bilder vom Versuchsaufbau

    Die Scheibe ist so Justiert das die Laser Aussen für 23cm unterbrochen werden: Ist also wie ein echter Ball.

    Das Loch in der Mitte ist lediglich als Unwucht-Ausgleich!

  • War leider erkrankt, konnte mich daher nicht weiter mit der Hardware beschäftigen.

    Jetzt ist aber wieder alles gut.

    Leider ergab mein Test mit stabilem Funktionsgenerator-Rechteckimpulse eine Auslese Ungenauigkeit von 1 mS mit Ausreißern bis in den 100mS Bereich. Auchim minimalem System, also NUR 1 Event erfassen, in der Callback NUR time.time() lesen und printen. Keine Rechnungen, kein Schnickschnack. Ich vermute dieses Problem nicht in der Hardware des Raspy sondern mehr in Python ( in Kombination mit dem Betriebssystem). Ob ich das mit Arduino nochmal probiere weiß ich noch nicht...mal sehen.

    Alternativ lese ich mich gerade in opencv ein, um zu sehen ob eine Lösung per Objektverfolgung/Erkennung umsetzbar ist.

    Diesen THread werde ich daher schliessen.