forked from luon/wordclock
48 lines
1.5 KiB
Matlab
48 lines
1.5 KiB
Matlab
function lightlevelmapping()
|
|
MINBRIGHTNESS = 0;
|
|
MAXBRIGHTNESS = 10;
|
|
|
|
LIGHTSENSOR_BOTTOM = 0;
|
|
LIGHTSENSOR_TOP = 900;
|
|
|
|
l = [LIGHTSENSOR_BOTTOM - 10:LIGHTSENSOR_TOP + 10];
|
|
b = zeros(size(l));
|
|
|
|
LIGHTSENSOR_SCALE = 1024;
|
|
LIGHTSENSOR_BASE = 1.35;
|
|
LIGHTSENSOR_BASE = 1.40;
|
|
|
|
if (LIGHTSENSOR_BASE <= 1)
|
|
error 'LIGHTSENSOR_BASE must be > 1';
|
|
end
|
|
|
|
brightness_per_unit_light = floor(floor( LIGHTSENSOR_SCALE * (MAXBRIGHTNESS - MINBRIGHTNESS)) / ...
|
|
(LIGHTSENSOR_TOP - LIGHTSENSOR_BOTTOM))
|
|
|
|
LIGHTSENSOR_BASE^(MAXBRIGHTNESS - MINBRIGHTNESS) * (MAXBRIGHTNESS - MINBRIGHTNESS) + MINBRIGHTNESS
|
|
|
|
% b = floor(brightness_per_unit_light * (l - LIGHTSENSOR_BOTTOM) / LIGHTSENSOR_SCALE ) + MINBRIGHTNESS;
|
|
b1 = (LIGHTSENSOR_BASE.^(brightness_per_unit_light * (l - LIGHTSENSOR_BOTTOM) / ...
|
|
LIGHTSENSOR_SCALE)) / LIGHTSENSOR_BASE^(MAXBRIGHTNESS - MINBRIGHTNESS) * (MAXBRIGHTNESS - ...
|
|
MINBRIGHTNESS) + MINBRIGHTNESS;
|
|
b = floor( (LIGHTSENSOR_BASE.^floor(brightness_per_unit_light * (l - LIGHTSENSOR_BOTTOM) / ...
|
|
LIGHTSENSOR_SCALE)) / LIGHTSENSOR_BASE^(MAXBRIGHTNESS - MINBRIGHTNESS) * (MAXBRIGHTNESS - ...
|
|
MINBRIGHTNESS)) + MINBRIGHTNESS;
|
|
|
|
[brightness_per_unit_light * (l - LIGHTSENSOR_BOTTOM) / LIGHTSENSOR_SCALE; l]
|
|
|
|
b1(l <= LIGHTSENSOR_BOTTOM) = MINBRIGHTNESS;
|
|
b1(l >= LIGHTSENSOR_TOP) = MAXBRIGHTNESS;
|
|
b(l <= LIGHTSENSOR_BOTTOM) = MINBRIGHTNESS;
|
|
b(l >= LIGHTSENSOR_TOP) = MAXBRIGHTNESS;
|
|
|
|
b2 = round(b1);
|
|
|
|
figure
|
|
plot(l, b1, l, b, l, b2)
|
|
A = axis;
|
|
A(3) = -1;
|
|
A(4) = MAXBRIGHTNESS + 1;
|
|
axis(A);
|
|
grid on
|