Ultraschallsensor

Hi, ich habe einen HC-SR04 Ultraschallsensor gekauft und probiere nun den Abstand zu messen.

const int trigPin = 2;
const int echoPin = 4;
long cm;

void setup() {
  Serial.begin(9600);
  pinMode(trigPin, OUTPUT);
    pinMode(echoPin, INPUT);
}

void loop()
{



  digitalWrite(trigPin, LOW);
  delayMicroseconds(10);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);



  Serial.println(pulseIn(echoPin, HIGH)/29/2);     // Hier wird die richtige Distanz angegeben.
  Serial.println();

  cm = pulseIn(echoPin, HIGH) /29/2;
   
  Serial.print(cm);                                     // Hier wird IMMER 0 ausgegeben.
  Serial.println("cm");
  
  delay(100);
}

Warum wird 0 ausgegeben wenn ich die Variable ausschreiben lasse? Ich hoffe ihr könnt mir helfen. Danke

Ich habe nicht den kompletten Sketch geprüft, vermisse aber den richtigen Trigger-Impulse.

Verwende mal dieses Beispiel.

int trigger=7;

int echo=6;

long dauer=0;
long entfernung=0;
 
void setup()
{

Serial.begin (9600);
pinMode(trigger, OUTPUT);
pinMode(echo, INPUT);
}

void loop()
{

digitalWrite(trigger, LOW);
delay(5);
digitalWrite(trigger, HIGH);
delay(10);
digitalWrite(trigger, LOW);
dauer = pulseIn(echo, HIGH);
 
entfernung = (dauer/2) / 29.1;
if (entfernung >= 500 || entfernung <= 0)
{
Serial.println("Kein Messwert");
}
else
{
Serial.print(entfernung);
Serial.println(" cm");
}
delay(1000);
}

Das funktioniert, habe ich auch getestet. Das ist von der Seite : www.Funduino.de

Edit:

Habe jetzt nochmal drüber geschaut. Trigger ist vorhanden. War am Tablet zu schnell. :wink:

Du triggerst einmal, fragst dann aber öfter die Pulslänge ab. Der Sensor gibt aber nach dem Trigger nur genau einmal einen Messpuls aus Du kannst also nach dem Trigger nur einmal abfragen und musst der Wert speichern.

const int trigPin = 2;
const int echoPin = 4;
long cm;

void setup() {
  Serial.begin(9600);
  pinMode(trigPin, OUTPUT);
    pinMode(echoPin, INPUT);
}

void loop(){
  digitalWrite(trigPin, LOW);
  delayMicroseconds(10);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);

  int Pulselength = pulseIn(echoPin, HIGH);


  Serial.println(Pulselength /29/2);     // Hier wird die richtige Distanz angegeben.
  Serial.println();

  cm = Pulselength  /29/2;
   
  Serial.print(cm);                                     // Hier wird IMMER 0 ausgegeben.
  Serial.println("cm");
  
  delay(100);
}

Edit: Probier doch mal die newping.h Library

Vielen Dank euch für die schnelle Hilfe! Jetzt funktioniert alles.