Der logische Ablauf ist aber nicht der gleiche. Dieser Teilwird hier immer ausgeführt, in der Schleifen-Variante aber nur bei "busy_US[2] == 0".
Der logische Ablauf ist aber nicht der gleiche. Dieser Teilwird hier immer ausgeführt, in der Schleifen-Variante aber nur bei "busy_US[2] == 0".
MfG
Stefan
Das ist korrekt.
Im Fehlerfall springt er aber schon vorher aus der Schleife raus.
Das kann also nicht die Ursache für den Fehler sein
Die äußere FOR-Schleife ist auskommentiert.
Oder meinst Du die while-Schleife?
Welche Rolle spielt das jetzt? Der entscheidende Punkt ist, dass die innere for-Schleife mehrfach hintereinander ausgeführt wird, und mir mein obiges Szenario durchaus plausibel erscheint (*). Wenn du dir so sicher bist, dass das nicht sein kann, solltest du das schon genau begründen. Auch deshalb, weil sich aus diesem "genau begründen" neue Anhaltspunkte ergeben könnten.
Und warum zum Teufel weist du diese Möglichkeit gleich zurück und fängst das Diskutieren an, statt es einfach mal auszuprobieren? Wenn es eine funktionierende und eine nicht funktionierende Variante gibt, und es einen konkreten Unterschied zwischen beiden gibt, dann ist dieser Unterschied doch wohl mal einen genaueren Blick wert, und sei es auch nur, um eine weitere mögliche Fehlerquelle sicher auszuschließen.
(*): Ich kenne allerdings deine Sensoren nicht, und habe auch keine Lust mich damit auch noch zu beschäftigen, um zu analysieren, was das Nichtausführen des Code-Teils genau impliziert.
MfG
Stefan
sorry, ich sitze hier im Job und kann es im Moment nicht ausprobieren. Das werde ich heute abend natürlich machen. Meine Absicht war das Thema vorher schon genauer einzukreisen.
Also mein Verständnis des Ablaufes mit der inneren FOR Schleife ist so:
i=0, der erste Sensor wird ausgelesen, Antwort ok, Wert wird auf LCD ausgegeben.
i=1, der zweite Sensor wird ausgelesen, Antwort kann nicht sein, Wert wird nicht auf LCD ausgegeben, Schleife wird abgebrochen, die Sensoren werden nicht neu gestartet und der weitere Code wird ausgeführt.
Mein Verständnis des Codes ohne innere FOR-Schleife ist so:
i=0, der erste Sensor wird ausgelesen, Antwort ok, Wert wird auf LCD ausgegeben.
i=1, der zweite Sensor wird ausgelesen, Antwort ok, Wert wird auf LCD ausgegeben.
i=2, der dritte Sensor wird ausgelesen, Antwort ok, Wert wird auf LCD ausgegeben.
Anschließend wird eine neue Messung der Sensoren mit einem general I2C Kommando an Adresse 0x00 neu gestartet.
Da im Fehlerfall oben schon bei i=1 die Schleife abgebrochen wird, kommt es nicht mehr zum Neustart der Messung.
Und meine Frage wäre dann (wie schon oben), warum du dir so sicher bist, dass es nicht genau deshalb beim Sensorauslesen zum Fehler kommt, weil schon im vorigen Durchlauf die Sensoren eben nicht neu gestartet wurden (weil dort das i2c_start für Sensor 3 (i=2) gescheitert ist).
Apropos: mich würde mal interessieren, wie du das "Schleife wird abgebrochen" genau feststellst/schlussfolgerst. Woher weißt du, dass die Schleife abbricht, und nicht einfach nur das i2c_start fehlschlägt?i=0, der erste Sensor wird ausgelesen, Antwort ok, Wert wird auf LCD ausgegeben.
i=1, der zweite Sensor wird ausgelesen, Antwort kann nicht sein, Wert wird nicht auf LCD ausgegeben, Schleife wird abgebrochen, die Sensoren werden nicht neu gestartet und der weitere Code wird ausgeführt.
MfG
Stefan
Lesezeichen