wordclock/wordclock/lightlevelmapping.m

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