hallo Rabenauge,
ich wollte mal ausprobieren ob Deine pingversion schneller ist als die mit der ping-lib...

Zitat von
Rabenauge
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....
Lesezeichen