Ein Sensor und der Nachtwächter... Anfängerprobleme!

Hej beste Gemeinde

Delays sind der Tod aller meiner Sketche.
Der Nachtwächter ist genial und hat mir auch bei meinen LED Problemen weitergeholfen.
Natürlich auch die Schwarmintelligenz hier, danke dafür nochmals.
Nun scheitere ich an einem Sensor, genau gesagt einem HC-SR04.
Um korrekt messen zu können soll er ja einen "delay" in seinen Trigger haben.
2 Mikrosekunden im LOW Modus und 10 im HIGH.
Diesen "delayMicroseconds" wollte ich mit dem Nachtwächter umgehen, was mir aber, the story of my life, nicht gelungen ist.

Hier der Sketch, bei dem alles wunderbarstens funzt:

//Sensoreingänge
int triggerPin = 11; 
int echoPin = 12;

void setup() {
  //Sensoreingänge deklarieren 
  pinMode(triggerPin, OUTPUT);
  pinMode(echoPin, INPUT);}

void loop() {

//Das ist der Impuls, den der Sensor
//laut Datenblatt braucht, um zu messen.
//Ich möchte mit dem Nachtwächter die 
//delayMicroseconds entfernen! 
 digitalWrite(triggerPin, LOW);
 delayMicroseconds(2);
 digitalWrite(triggerPin, HIGH);
 delayMicroseconds(10);
 digitalWrite(triggerPin, LOW);

//Das ist einfach nur, was der Sensor auswerfen soll,
//sehr vereinfacht als ein "serial.Println" Befehl geschrieben,
//einfach ein Wert zwischen 0 und 127 bei einem 
//bestimmten Abstand der Hand zum Sensor.
long sensorEingabe = pulseIn(echoPin, HIGH);
 if ( (sensorEingabe <= 1500) && (sensorEingabe >= 200)) {
  byte sensorWert = map(sensorEingabe,1500,200,0,127);
  Serial.println(sensorWert);}}

...und hier meine Idee zum Nachtwächter, welches aber nur alle zwei Sekunden einen Wert ausgibt und ansonsten den Rest meines Sketches (welcher hier nicht angegeben ist) absolut ausbremst, ja, ihn gar nicht mehr zu Wort kommen lässt...

int triggerPin = 11;
int echoPin = 12;
int sensorStatus = LOW;
unsigned long sensorZeit;

void setup() {
pinMode(triggerPin, OUTPUT);
pinMode(echoPin, INPUT);}
              
void loop() {
 
if(sensorStatus == LOW){
  if(micros() - sensorZeit > 2){
    digitalWrite(triggerPin, HIGH);
    sensorZeit = micros();
    sensorStatus = HIGH;}
}else{ 
  if(micros() - sensorZeit > 10){
    digitalWrite(triggerPin, LOW);
    sensorStatus = LOW;}}
    
long sensorEingabe = pulseIn(echoPin, HIGH);
 if ( (sensorEingabe <= 1500) && (sensorEingabe >= 200)) {
  byte sensorWert = map(sensorEingabe,1500,200,0,127);
  Serial.println(sensorWert);}}

Wo mache ich den entscheidenen Fehler?
Oder kann ein Sensor gar nicht ohne "delayMicroseconds"?

Besten Dank im Voraus für eure Mühen...

Euer Axel Munshine

2 oder 10 µs sind keine Zeiten die irgendwas blockieren. Die geben keine Probleme.

Was Du nicht weißt pulseIn() ist gleich blockierend wie delay().

Grüße Uwe

Hej uwefed

Du hast vollkommen recht, es ist der "pulsin" Befehl, der Verzögert, nicht das DelayMikroseconds...
Jetzt werde ich mal versuchen, den pulsin zu Nachtwächtern...

Danke für den guten Tipp.

Gruss
Axel Munshine

Gibt es einen Grund, der gegen die Verwendung der (imo recht guten) NewPing Library spricht?
Die vereinfacht den Umgang mit den HC-SR04 erheblich.

Danke, @Shuzz, da werde ich auf jeden Fall mal reinschauen...