hallo Rabenauge,
ich wollte mal ausprobieren ob Deine pingversion schneller ist als die mit der ping-lib...
Zitat Zitat von Rabenauge Beitrag anzeigen
Ich benutze keine Bibliothek für das bisschen Ultraschall- das kann man zu Fuss auch machen:
Code:
void pingVorne()// ******************** Vorn nach Hindernissen suchen **************************************
{
  delay(100);                            // ggf, alte Echos abklingen lassen, die halbe Zeit reicht auch
  digitalWrite(triggerVorne, LOW);
  delayMicroseconds(2);
  digitalWrite(triggerVorne, HIGH);     //Trigger Impuls 10 µs
  delayMicroseconds(10);
  digitalWrite(triggerVorne, LOW);      //Messung starten
  long laufZeit = pulseIn(echoVorne, HIGH,maxEntfernung); // Echo-Zeit messen, aber nicht zu lange warten
  float messung=laufZeit/ 58.2;         //Laufzeit in cm umrechnen
  entfernungVorne = ((entfernungVorneAlt*0.2)+(messung*0.8)); // Ergebnis glätten
  if(entfernungVorne==0)                // das gibts nicht, also muss die Bahn frei sein
    {
      entfernungVorne=120;
    } 
  entfernungVorneAlt=entfernungVorne;
  Serial.print("Vorne: ");
  Serial.print(entfernungVorne);
  Serial.println(" cm");
}
habe es an meine hardwareverhältnisse angepasst, das sieht dann so aus:

Code:
#include "Arduino.h"


#define TRIGGER_PIN_RECHTS  2
#define ECHO_PIN_RECHTS   3
#define MAX_DISTANCE_RECHTS 200 //400

uint16_t distanz_rechts;
uint16_t distanz_rechts_alt;

void setup()
{
  Serial.begin(115200);

}

void loop()
{
  ping_rechts();

}


void ping_rechts()// ******************** rechts nach hindernissen suchen **************************************
{
  delay(100);                            // ggf, alte Echos abklingen lassen, die halbe Zeit reicht auch
  digitalWrite(TRIGGER_PIN_RECHTS, LOW);
  delayMicroseconds(2);
  digitalWrite(TRIGGER_PIN_RECHTS, HIGH);     //Trigger Impuls 10 µs
  delayMicroseconds(10);
  digitalWrite(TRIGGER_PIN_RECHTS, LOW);      //Messung starten
  long lauf_zeit = pulseIn(ECHO_PIN_RECHTS, HIGH, MAX_DISTANCE_RECHTS); // Echo-Zeit messen, aber nicht zu lange warten
  float messung = lauf_zeit / 58.2;      //Laufzeit in cm umrechnen
  distanz_rechts = ((distanz_rechts_alt * 0.2) + (messung * 0.8)); // Ergebnis glätten
  if (distanz_rechts == 0)             // das gibts nicht, also muss die Bahn frei sein
  {
    distanz_rechts = 120;
  }
  distanz_rechts_alt = distanz_rechts;
  Serial.print("distanz rechts: ");
  Serial.print(distanz_rechts);
  Serial.println(" cm");
}

die printausgabe ist: 120 / 24 / 4 und das wiederholt sich....