Hi
Ich habe das selbe Problem.
Ich habe es schon mit einem Korrekturwert probiert, aber der ist auch jedesmal unterschiedlich.
Und wenn ich die 58µs warte bekomm ich immer nur Werte von 1 - 6.
Code:
uint16_t getAbstand(uint8_t sensor)
{
uint16_t abstand = 0; // abstand in cm
DDRC |= (1<<sensor); // sensor Pin auf Ausgang
PORTC |= (1<<sensor); // sensor Pin auf high setzen
waitUs(20); // 20 mikrosek. warten
PORTC &= ~(1<<sensor); // sensor Pin auf low setzen (ist noch als Ausgang konfiguriert)
DDRC &= ~(1<<sensor); // sensor Pin auf Eingang setzen
while(!(PINC & (1<<sensor))); // auf Sensorantwort warten (Eingang wird high)
while(PINC & (1<<sensor)) // warten bis Signalende bis Eingang low wird
{
waitUs(1); // 58 mikrosec. warten entspricht 1cm entfernung
abstand++; // Anzahl der cm erhöhen
}
return abstand; // gemessenen Abstand zurückgeben
}
/////////////////////////////////////////////////////////////////////////////
// Main-Funktion
/////////////////////////////////////////////////////////////////////////////
main()
{
uint16_t x = 0;
char ausgabe[10]="\0";
lcdInit();
lcdString("X ");
x = getAbstand(5);
itoa(x/1.36, ausgabe, 10);
lcdString(ausgabe);
lcdString("cm");
while (true) // Mainloop-Begin
{
//...
} // Mainloop-Ende
}
Lesezeichen