Anfängerfrage

Hallo
Bin neu und blutiger Anfänger.
Ich habe einen Sketch zum Betreiben eines HC-SR04 aufgespielt. Den habe ich als Grundlage be
Nutz um eine Enparkhilfe zu basteln. Kleiner Buzzer an Pin 11 und über eine if Schleife,
If (Entfernung <=60)
tone (11,100);
delay (500);
noTone (11);
delay (500);
Und das gleiche mit der Entfernung <=40 und <=25
Logischerweise piept mir so die <60 durch das ganze Programm.
Ist für euch wahrscheinlich ein Klacks. Ich wäre dankbar für ne simple Lösung.

Setze Deinen Code bitte in Codetags (</>-Button oben links im Forumseditor oder [code] davor und [/code] dahinter ohne *).
Das kannst Du auch noch nachträglich ändern.

if-Schleifen gibt es nicht, nur if-Abfragen und dazu gibt es ein else, dass wohl Dein Problem lösen könnte.

Gruß Tommy

Zeige mal den ganzen Sketch. Und in Code tags bitte. Das ist die Schaltfläche oben links </>

Und das gleiche mit der Entfernung <=40 und <=25
Logischerweise piept mir so die <60 durch das ganze Programm.

if ( entf < 25 ) {
...
} else if (entf < 40) {
...
} else if (entf < 60) {
...
} else {
// piepser aus
}

als Idee für einen Klacks

Danke, Michael_X. Probiere ich gleich mal aus
Sorry, Tommy56 und ELEspaniol.
Ich finde die Schaltfläche(</>) nicht.

Zur praktiscehn Umsetzung: der HC-SR04 ist nicht wasserfest und darum untauglich außen an einen PKW zu montieren.
Grüße Uwe

hallo Michael_X,
läuft einwandfrei danke!

und nein, will das Ding nicht am Kfz verwenden. einfach nur um mal ins Programmieren
reinzuriechen

#define trigPin 9
#define echoPin 10
long duration;
int distance;
long firstoff;
int distancefirst;

void setup()
{
Serial.begin(9600);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
delay(1000);
digitalWrite(trigPin, HIGH);
delayMicroseconds(5);
digitalWrite(trigPin, LOW);
firstoff = pulseIn(echoPin, HIGH);
distancefirst = firstoff*0.034/2; // cm
}

void loop()
{

digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(5);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance= duration*0.034/2; // cm
//distance = duration * 0.0133 / 2; // in
Serial.println(distance);
delay(50);
Serial.println(distancefirst);

if (distance <= 30)
{
tone(11,500);
delay (5000);
noTone (11);

}
else if (distance <=50)

{ 
tone(11,400,600);
delay (300);
noTone (11);
delay (300);
}
else if (distance <=60)

{
  tone(11,400,600);
delay (800);
noTone (11);
delay (800);
}
    
}

läuft einwandfrei

Hoffen wir, dass du genug Zeit hast.
Wenn er erstmal langsam piepsen anfängt, wird erst nach ziemlich langer Zeit (600 + 800 + 800 =2200) ms wieder gemessen.

Einerseits gilt: "Alles was so läuft wie es soll, ist gut"
Andererseits: Man kann alles verbessern

aber Achtung; man kann aber auch alles verschlechtbessern. :wink: :wink: :wink:
Grüße Uwe