c't Projekte - c't-Bot und c't-Sim -
Mailinglisten
[Voriger (Datum)]
[Nächster (Datum)]
[Voriger (Thread)]
[Nächster (Thread)]
[Nach Datum][Nach Thread]
Absender: Fabian Recktenwald
Datum: Mo, 20.03.2006 11:08:47
In-reply-to:
<200603200038.37012.michail@xxxxxxxxxx>
References:
<9612803660.20060317112342@xxxxxxxxxxxxxxxxx> <200603171353.38977.tevers@xxxxxxxxxxxxx> <441C4682.9070704@xxxxxxxxxxxx> <200603200038.37012.michail@xxxxxxxxxx>
allerdings um Längen weniger als vorher. Hast Du mal statt gleitendem
Mittelwert den ungewichteten Mittelwert der letzten n Proben getestet
Sowas kann ich bereits anbieten. Funktioniert bei mir ganz gut. Müßte
ich mal als Patch gegen die aktuelle Version erzeugen.
--------
void bot_sens_isr(void){
// Arrays mit Werten des linken/rechten Sensors
static int16 SDAL[8] = {0,0,0,0,0,0,0,0};
static int16 SDAR[8] = {0,0,0,0,0,0,0,0}; //
// Position im Array
static int8 SDAp = 0;
// Summe der Arrays
static int16 SDAsumL = 0;
static int16 SDAsumR = 0;
.
.
.
//Aktualisiere Distanz-Sensoren
// Die Distanzsensoren sind im Normalfall an, da sie 50 ms zum booten
brauchen
// sensDistL= adc_read(SENS_ABST_L);
// sensDistR= adc_read(SENS_ABST_R);
// Array Position hochsetzen)
if (++SDAp == 8) SDAp = 0;
// alten Wert abziehen
SDAsumL -= SDAL[SDAp];
SDAsumR -= SDAR[SDAp];
// neuen Wert speichern
SDAL[SDAp] = adc_read(SENS_ABST_L);
SDAR[SDAp] = adc_read(SENS_ABST_R);
// aufaddieren
SDAsumL += SDAL[SDAp];
SDAsumR += SDAR[SDAp];
// Sensorwert ermitteln (Division durch 8)
sensDistL= sensor_abstand(SDAsumL >> 3);
sensDistR= sensor_abstand(SDAsumR >> 3);