Remove light sensor auto-normalisation
This commit is contained in:
parent
9f230125d8
commit
e13d522f4e
|
@ -1 +1 @@
|
||||||
459
|
482
|
||||||
|
|
|
@ -4,11 +4,7 @@ volatile unsigned int LightSensor_Measurement;
|
||||||
volatile bool LightSensor_NewMeasurement = false;
|
volatile bool LightSensor_NewMeasurement = false;
|
||||||
|
|
||||||
// Rolling average of the brightness measurement
|
// Rolling average of the brightness measurement
|
||||||
unsigned int LightSensor_AbsoluteBrightness = LIGHTSENSOR_MAX / 2;
|
unsigned int LightSensor_AbsoluteBrightness = 0;
|
||||||
|
|
||||||
// Maximum and minimum encountered so far
|
|
||||||
unsigned int LightSensor_MinimumBrightness = LIGHTSENSOR_MAX;
|
|
||||||
unsigned int LightSensor_MaximumBrightness = 0;
|
|
||||||
|
|
||||||
int LightSensor_RelativeBrightness;
|
int LightSensor_RelativeBrightness;
|
||||||
|
|
||||||
|
@ -68,29 +64,16 @@ void LightSensor_Poll(void)
|
||||||
LightSensor_NewMeasurement = false;
|
LightSensor_NewMeasurement = false;
|
||||||
unsigned int brightness = ((1 << 31)
|
unsigned int brightness = ((1 << 31)
|
||||||
/ (measurement + 1)) >> (31 - 16);
|
/ (measurement + 1)) >> (31 - 16);
|
||||||
// LightSensor_AbsoluteBrightness = LIGHTSENSOR_LAMBDA * LightSensor_AbsoluteBrightness
|
LightSensor_AbsoluteBrightness -= LightSensor_AbsoluteBrightness
|
||||||
// + (1.0f - LIGHTSENSOR_LAMBDA) * brightness;
|
>> LIGHTSENSOR_LAMBDA_BITS;
|
||||||
LightSensor_AbsoluteBrightness -= LightSensor_AbsoluteBrightness >> LIGHTSENSOR_LAMBDA_BITS;
|
LightSensor_AbsoluteBrightness += brightness
|
||||||
LightSensor_AbsoluteBrightness += brightness >> LIGHTSENSOR_LAMBDA_BITS;
|
>> LIGHTSENSOR_LAMBDA_BITS;
|
||||||
|
|
||||||
if(brightness < LightSensor_MinimumBrightness)
|
LightSensor_RelativeBrightness =
|
||||||
{
|
((int)LightSensor_AbsoluteBrightness - LIGHTSENSOR_LOW_BOUND)
|
||||||
LightSensor_MinimumBrightness = brightness;
|
* LIGHTSENSOR_MAX
|
||||||
}
|
/ (LIGHTSENSOR_HIGH_BOUND - LIGHTSENSOR_LOW_BOUND);
|
||||||
if(brightness > LightSensor_MaximumBrightness)
|
|
||||||
{
|
|
||||||
LightSensor_MaximumBrightness = brightness;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Scale and saturate to get relative brightness value
|
|
||||||
int range = LightSensor_MaximumBrightness
|
|
||||||
- LightSensor_MinimumBrightness;
|
|
||||||
int low = LightSensor_MinimumBrightness
|
|
||||||
+ LIGHTSENSOR_LOW_BOUND * range / LIGHTSENSOR_MAX;
|
|
||||||
int high = LightSensor_MinimumBrightness
|
|
||||||
+ LIGHTSENSOR_HIGH_BOUND * range / LIGHTSENSOR_MAX;
|
|
||||||
LightSensor_RelativeBrightness = ((int)LightSensor_AbsoluteBrightness - low)
|
|
||||||
* LIGHTSENSOR_MAX / (high - low);
|
|
||||||
if(LightSensor_RelativeBrightness < 0)
|
if(LightSensor_RelativeBrightness < 0)
|
||||||
{
|
{
|
||||||
LightSensor_RelativeBrightness = 0;
|
LightSensor_RelativeBrightness = 0;
|
||||||
|
@ -99,17 +82,6 @@ void LightSensor_Poll(void)
|
||||||
{
|
{
|
||||||
LightSensor_RelativeBrightness = LIGHTSENSOR_MAX;
|
LightSensor_RelativeBrightness = LIGHTSENSOR_MAX;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Slowly reset limit values
|
|
||||||
static int decay_counter = 0;
|
|
||||||
decay_counter++;
|
|
||||||
if(decay_counter == LIGHTSENSOR_LIMIT_RESET_TIME * 1000
|
|
||||||
/ LIGHTSENSOR_INTERVAL / LIGHTSENSOR_MAX)
|
|
||||||
{
|
|
||||||
decay_counter = 0;
|
|
||||||
LightSensor_MaximumBrightness -= 1;
|
|
||||||
LightSensor_MinimumBrightness += 1;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -15,14 +15,10 @@
|
||||||
// 'Forgetting factor' of the rolling brightness average
|
// 'Forgetting factor' of the rolling brightness average
|
||||||
#define LIGHTSENSOR_LAMBDA_BITS 2
|
#define LIGHTSENSOR_LAMBDA_BITS 2
|
||||||
|
|
||||||
// Time until minimum and maximum value are completely reset (in seconds)
|
// Bounds for converting absolute to relative brightness (empirically
|
||||||
#define LIGHTSENSOR_LIMIT_RESET_TIME \
|
// determined)
|
||||||
(48 * 60 * 60)
|
#define LIGHTSENSOR_LOW_BOUND ((int)(0.003 * LIGHTSENSOR_MAX))
|
||||||
|
#define LIGHTSENSOR_HIGH_BOUND ((int)(0.65 * LIGHTSENSOR_MAX))
|
||||||
// Bounds for converting absolute to relative brightness: Consider everything
|
|
||||||
// near the minimum or maximum 0.0 or 1.0, respectively
|
|
||||||
#define LIGHTSENSOR_LOW_BOUND ((unsigned int)(0.013 * LIGHTSENSOR_MAX))
|
|
||||||
#define LIGHTSENSOR_HIGH_BOUND ((unsigned int)(1.0 * LIGHTSENSOR_MAX))
|
|
||||||
|
|
||||||
extern int LightSensor_RelativeBrightness;
|
extern int LightSensor_RelativeBrightness;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue