c't

c't-Projekte - Mailinglisten


[Voriger (Datum)] [Nächster (Datum)] [Voriger (Thread)] [Nächster (Thread)]
[Nach Datum][Nach Thread]

Re: [ct-bot] Informationen zu den Abstandssensoren

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);