mehrere Ultraschallsensoren und pulsein

Hi zusammen,

bevor ich meine erste Frage hier im Forum stelle, muss ich dringend loswerden, wie genial dieses kleine Stück Technik namens Arduino ist! Ich bin elektrotechnisch recht unerfahren, aber dieses Board erlaubt mir, mich da jetzt langsam hineinzuarbeiten und innerhalb kürzester Zeit schon zu Ergebnissen zu kommen. Großartig! :slight_smile:

Jetzt zu meiner Frage. Und zwar habe ich mehrere Ultraschallsensoren (HC-SR04), die ich allerdings etwas modifiziert habe: Ich habe bei allen den Sender entfernt und möchte nun einen einzigen Sender benutzen, dessen Signal von jedem Entferner benutzt werden soll. Soll heißen: ich triggere den Sendeimpuls bei jedem SR04 und initialisiere so die Entfernungsmessung, das Ultraschallsignal geht jedoch nur von einem einzigen Sender aus. Soweit, so gut... das funktioniert bereits. Zumindest, wenn ich für jeden Sensor den Trigger-Echo-Vorgang wiederhole, also den kompletten Zyklus. In meiner Überlegung ist dies jedoch nicht nötig, da ich ja mit dem gleichen Impuls arbeite, diesen also nur einmal auslösen und dann jeden der Echo-Pins gleichzeitig auf "Empfang" schalten muss.

Momentan sieht der relevante Code so aus:

//Triggern des Ultraschall-Signals
digitalWrite(TRIGGER_PIN, HIGH);
delayMicroseconds(1000);
digitalWrite(TRIGGER_PIN, LOW);
//warten auf HIGH-Signal am Echo-Pin
unsigned int time1 = pulseIn(ECHO_PIN1, HIGH); 

digitalWrite(TRIGGER_PIN, HIGH);
delayMicroseconds(1000);
digitalWrite(TRIGGER_PIN, LOW);
unsigned int time2 = pulseIn(ECHO_PIN2, HIGH);

Ich hoffe, das ich konnte das einigermaßen verständlich beschreiben. Nun meine eigentliche Frage: pulseIn() wartet ja auf eine Rückmeldung... hält also loop() von der weiteren Abarbeitung ab. Wenn das allerdings nicht wie im Code oben sequentiell abgehandelt werden soll, sondern gleichzeitig, müsste die echo-Pins jedes Sensors gleichzeitig überwachen. Würde ich jetzt vor einem Multithread-System sitzen wäre meine erste Idee, einen weiteren Thread zur Überwachung der PINs zu starten, und das Ergebnis dann dem Mainthread weitergeben. Hat jemand einen Vorschlag, wie ich das mit dem Arduino lösen könnte?

Das Ziel wäre eine Serial-Ausgabe der Dauer des einen Pulses zu jedem der Sensoren.

Viele Grüße,
Matthias

Das funktioniert so nicht.
Auch ein Multithread System arbeitet nicht paralell sondern gibt jedem tread nacheinander ein gewisses Zeitfenster.
Pulsein kann nur ein pin überwache und dann das nächste.
Du mußt es sequenziell machen.
Alternativ kannst Du die Pins im loop kontrollieren und so den Impuls messen. Wenn Du die Empfangspins auf dem gleichen Port legst kannst Du mit port manipulation arbeiten.
Grüße Uwe

Wenn Du die Empfangspins auf dem gleichen Port legst kannst Du mit port manipulation arbeiten.

Wenn du mit Port-Manipulation arbeitest, kannst du gleich noch einen Schritt weitergehen:
Mehrere Eingänge gemeinsam auf einen Interrupt siehe PinChangeInt.

Das könnte sowas wie dein "Mehrkanal-PulseIn" eventuell unterstützen und aus loop draussen halten.

Oder der SourceCode dieser Library könnte als Anregung/Basis dienen.