Hi inka,
Die Abfrage der Pins ist ja nicht abhängig von einer Programm-Variante.bei der nichtblockierenden version scheitere ich zunächst mal an der abfrage der PINs.
D.h.: Die Pins werden immer gleich abgefragt (wie es in deiner 1. Version ja schon klappt).
Eine quasi nicht blockierende (bzw. wenig blockierende) Programmversion könnte so aussehen:an der nicht blockierenden variante arbeite ich noch...(ist die eigentlich vorteilhaft, oder halt nur eine variante?)
Eine Task in der schnellen Hauptschleife:
- Wenn (Stopwatch2 > 60):
-- imp_flag löschen (LOW)
-- Stopwatch2 zurück setzen auf 0
- Sendet Triggerimpuls (nur wenn NOT imp_flag!!) und setzt dann ein Flag (nennen wir es "imp_flag"), dass der Impuls erfolgt ist.
- Testet bei jedem Durchlauf den Pegel an Echo (nur wenn imp_flag == HIGH!!) :
-- Wenn Echo == LOW:
--- echo_low Flag setzen (HIGH)
--- Wenn active Flag == HIGH:
---- Stopwatch1 lesen und Wert berechnen (evtl. Flag setzen, dass Wert vorliegt & angezeigt werden kann!)
---- active Flag löschen (LOW)
---- Stopwatch2 zurück setzen auf 0
-- Oder wenn Echo == HIGH:
--- Wenn echo_low Flag == HIGH:
---- Stopwatch1 zurück setzen auf 0
---- echo_low Flag löschen (LOW)
--- Oder wenn echo_low Flag == LOW:
---- active Flag setzen (HIGH)
Achtung:
Nicht getestet und nur so hingeschrieben (es können also auch noch logische Fehler drin sein!).
Also nicht rein schematisch umsetzen, sondern die Logik nachvollziehen und dann erst in ein Programm umsetzen!
Lesezeichen