function lightlevelmapping() MINBRIGHTNESS = 2; MAXBRIGHTNESS = 20; LIGHTSENSOR_BOTTOM = 270; LIGHTSENSOR_TOP = 350; l = [LIGHTSENSOR_BOTTOM - 10:LIGHTSENSOR_TOP + 10]; b = zeros(size(l)); LIGHTSENSOR_SCALE = 1024; LIGHTSENSOR_BASE = 1.35; 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