經 byte[] 與 int 數據轉換,於 Android 環境獲取傳感器實際測量值

傳感器硬件: HTU31DF , BH1750 光照度傳感器,ADP5092 太陽能微能量採集模塊

ADC : Nordic nRF52840 12位 ADC 單端採集

軟件環境: Android Java


        // 電池電壓計算
        // 單端電壓檢測電阻分壓阻值爲: 1500,180歐姆,ADC 轉換公式:ADC值 = (Vp-Vn)*GAIN/REFERENCE * 2^(RESOLUTION-m), GAIN=1,REFERENCE=0.6,RESOLUTION=12,m=0,Vn=0V,Vp=檢測電阻端實際電壓值
        int     valueOfVoltageADC   = 0;
        float   measurement_offset  = 0.06f;
        float   voltageOfBattery    = 0.0f;
        valueOfVoltageADC           = ((data_of_measurement[8] & 0x000000FF) << 8) + (data_of_measurement[9] & 0x000000FF);
        valueOfVoltageADC           &= 0x0000FFFF;
        voltageOfBattery            = (float) (((float) valueOfVoltageADC / 1.0 / 4096.0 * 0.6 - 0.0) * (1500.0 + 180.0) / 180.0 - measurement_offset);

        // 計算 HTU21DF SENSOR 的溫度測量值
        int iTempValue      = 0;
        iTempValue          = ( (data_of_measurement[10] & 0x000000FF) << 8 ) + (data_of_measurement[11] & 0x000000FF);
        iTempValue          &= 0x0000FFFC;
        float fTempValue    = 0.0f;
        fTempValue          = (float)((float) iTempValue / 65536.0); 					//2^16 = 65536
        fTempValue          = (float) (-46.85 + (175.72 * fTempValue));

        // 計算 HTU21DF SENSOR 的溼度測量值

        int iRHValue    = 0;
        iRHValue        = ( (data_of_measurement[12] & 0x000000FF) << 8 )  +  (data_of_measurement[13] & 0x000000FF);
        iRHValue        &= 0x0000FFFC;
        float fRHValue = 0.0f;
        fRHValue        =  (float)((float)iRHValue / 65536.0); 					//2^16 = 65536
        fRHValue        = (float)(-6.0 + (125.0 * fRHValue));
        if (fRHValue < 0.0f)    fRHValue = 0.0f;
        if (fRHValue > 100.0f)  fRHValue = 100.0f;

//  BH1750 光照度值
        int iIlluValue  = 0;
        iIlluValue      = ( (data_of_measurement[14] & 0x000000FF) << 8 ) + (data_of_measurement[15] & 0x000000FF);
        iIlluValue      &= 0x0000FFFC;

注意: 

JAVA int 數據類型爲 4 字節有符號數, 故 byte[] 數據操作前,先用 & 0x000000FF 進行處理,以避免單字節 byte[] 在運算時,被系統轉換爲有符號數,而導致錯誤!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章