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