wordclock/wordclock/lightlevelmapping.m

83 lines
2.1 KiB
Matlab

function lightlevelmapping()
MINBRIGHTNESS = 3;
MAXBRIGHTNESS = 10;
LIGHTSENSOR_BOTTOM = 3;
LIGHTSENSOR_TOP = 150;
x = [LIGHTSENSOR_BOTTOM - 10:LIGHTSENSOR_TOP + 10];
b = zeros(size(9));
LIGHTSENSOR_ALPHA1 = 0.02;
LIGHTSENSOR_ALPHA2 = 0.20;
a = LIGHTSENSOR_ALPHA1 * LIGHTSENSOR_TOP / log(LIGHTSENSOR_ALPHA2 / ...
LIGHTSENSOR_ALPHA1);
b = LIGHTSENSOR_ALPHA1 / a;
c = MINBRIGHTNESS - a;
y = a * exp(b*x) + c;
y_ = round(y);
[x; y_]
figure
plot(x, y, x, y_);
A = axis;
A(1) = LIGHTSENSOR_BOTTOM - 2;
A(2) = LIGHTSENSOR_TOP - 2;
A(3) = MINBRIGHTNESS - 2;
A(4) = MAXBRIGHTNESS + 2;
axis(A);
grid on
return
function lightlevelmapping_old()
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