不同设备上的光传感器

4

我尝试创建一个小应用程序,计算光线传感器检测到的光线,但是不同的设备给出了完全不同的值。我使用最大值来计算百分比,但我的Xperia和三星在同一地点(在我房子外墙下屋顶处),第一个设备给出90%(90k/102k),而第二个设备给出12%(8k/64k)。有没有办法解决这个问题?

    public final void onSensorChanged(SensorEvent event) 
    {
        if( event.sensor.getType() == Sensor.TYPE_LIGHT)
        {
            currentLux=(int) event.values[0];
            float perc=(currentLux*100)/max;
            lightTextBox.setText(lightTextBox.getText()+String.valueOf(perc)+" * ");    
        }   
    }

有人能帮我吗?有没有不涉及传感器校准的方法? - As As
1个回答

1
由于每个传感器对于相同的光强度有不同的值,因此我记录了应用程序生命周期中将捕获的最小最大值,并将这些值存储为MinMax。使用应用程序几天后,所有设备的值几乎相同,我可以依赖它们。 作为初始状态,我认为最小值是1000,最大值是0。(我将其存储在SharedPreferences中)。 然后,我将通过考虑传感器的当前Lux值来更新这些值。 然后我会计算百分比的照明程度。 这是我编写的代码:
float luxValue = o.getAsFloat("double_light_lux");

//here I update the value in sharedPreferences
updateMaxAndMinValue(context, luxValue);

float percentageValue = scale(LightMetadata.getMinValue(context),
                LightMetadata.getMaxValue(context),
                0,
                100,
                luxValue);

更新功能:
public static void updateMaxAndMinValue(Context context, float luxValue) {
    float currentMax = LightMetadata.getMaxValue(context); //0 as init.
    float currentMin = LightMetadata.getMinValue(context); //1000 as init.

    if (luxValue > currentMax)
        LightMetadata.setMaxValue(context, luxValue);
    if (luxValue < currentMin)
        LightMetadata.setMinValue(context, luxValue);
}

我通过将值从最小值到最大值进行缩放,计算出百分比,具体函数如下:

/**
 * @param min   old min value
 * @param max   old max value
 * @param a     new min value
 * @param b     new max value
 * @param value the value that want to scale
 * @return new scaled value
 */
public static float scale(float min, float max, float a, float b, float value) {

    //       (b-a)(x - min)
    //f(x) = --------------  + a
    //          max - min

    float scaled;
    float numerator = (b - a) * (value - min);
    float denominator = max - min;

    scaled = (numerator / denominator) + a;
    return scaled;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接