ich habe an meinem Arduino einen Ultraschallsensor angeschlossen und diesen programmiert.
Auf dem Serialmonitor konnte ich dann die gemessenen Abstände sehen.
Diese wurden anfangs alle 100ms gemessen und auch auf dem Monitor gezeigt.
Seit gestern, egal welchen Delay-Wert ich eingebe, erfolgt die Messung immer in 1sec...
Ist mein Board kaputt oder was ist da los? Anfangs ging das ja problemlos...
const int TRIG_PIN = 12;
const int ECHO_PIN = 13;
void setup() {
// initialize serial communication:
Serial.begin(9600);
pinMode(TRIG_PIN,OUTPUT);
pinMode(ECHO_PIN,INPUT);
}
void loop()
{
long duration, distanceCm, distanceIn;
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
duration = pulseIn(ECHO_PIN,HIGH);
// convert the time into a distance
distanceCm = duration / 29.1 / 2 ;
distanceIn = duration / 74 / 2;
if (distanceCm <= 0){
Serial.println("Out of range");
}
else {
Serial.print(distanceIn);
Serial.print("in, ");
Serial.print(distanceCm);
Serial.print("cm");
Serial.println();
}
delay(100);
}
Hiermit hat es am Anfang ganz normal funktioniert und momentan ist es so, egal was ich für einen Wert ich ins Delay schreibe, ob 10 oder 10000 der zeigt mir alles immer in 1 Sec Abstand an.
Da hat GuntherB natürlich Recht, aber warum rechnest du nicht in mm ?
Statt
distanceCm = duration / 29.1 / 2 ;
unsigned long distance = duration / 6; // Distanz in mm ( Auflösung größer als Genauigkeit ! )
Es wird hier wohl nicht drauf ankommen, und wenn dann mal eine Regelung draus wird, brauchst du sowieso float,
aber generell tun sich µController schwer mit float.
Dafür müsste er aber noch die Temperatur messen, a=sqrt(gammaRT) .. usw. genauer gehts ja immer
Wie genau ist eigentlich der Sensor bzg. zeitlicher Auflösung?