Die Lib des RN-Control hat schon eigene Zeitfunktionen, doch ich hatte mit delay.h bis jetzt nie Probleme. Die LED blinkt auch im Sekundentakt also liegts wohl nicht an delay.h.
Der SRF05 gibt öfter mal den Wert 0 aus... Ich habe versucht dies durch Mittelwertbildung von 4 Messungen zu beheben trotzdem kein Erfolg...
Code:
for(uint8_t i = 0; i <= 3; ++i){
wert += SRF05_GetResponseTime() / 464;
_delay_ms(20);
}
txbuffer[0] = wert / 4;
_delay_ms(100);
wert = 0;
Gibt es sonst noch ideen?
Ich habe die Funktion zum holen der Daten nochmals angepasst und das Oversampling wieder aus dem Code entfernt:
Code:
void getDistance(void){
i2c_start_wait(0x50+I2C_WRITE);
i2c_write(0xB8);
i2c_stop();
i2c_rep_start(0x50+I2C_READ);
data = i2c_readNak();
i2c_stop();
if(data == 0){ // request new data from SRF05 if the distance is 0cm
i2c_start_wait(0x50+I2C_WRITE);
i2c_write(0xB8);
i2c_stop();
i2c_rep_start(0x50+I2C_READ);
data = i2c_readNak();
i2c_stop();
}
}
Die Software scheint aber garnicht auf Sensorwerte zu reagieren. Die Linksdrehung (wenn ich z.B. die Hand davor halte) wird garnicht eingeleitet. Es scheint so als würde die Fahrt-Schleife immer wieder abgebrochen.
Lesezeichen