這是第一次一個人獨力完成的程式

根據 HSM-20G 的圖表 其他網友推算出來的公式

Humidity = 3.71 X voltage^3 – 20.65 voltage^2 + 64.81voltage – 27.44

Temperature = 5.26  voltage^3 – 27.34 voltage^2 + 68.87 * voltage – 17.81;

其中遇到第一個數值需要算電壓3次方,而且又礙於Atmega328P 的算術範圍只有 32767 ~ -32678 ,所以要計算3次方不能溢位,而且也希望精準度不要差太多

所以在移動堆疊內容時 感覺跟玩倉庫番沒兩樣, 一直在推木箱,但是木箱一直撞牆.......,後來好不容易找到路逕,木箱很快就到目的地前面, 程式進度就差點瞬間完成

結果發現 溫度誤差很大,原來是溫度計算過程直接複製濕度公式,結果忘了改常數,所以改完溫度公式的常數之後就一切正常了

,當然瞜 這是剛誕生的程式碼,還熱呼呼的,所以能運作,但是還沒優化跟作臨界值電壓的驗證

 

以下為程式碼

 

DECIMAL

: 算出堆疊頂端百位數百位數碼
DUP
100 /
;

: 算出堆疊頂端百位數十位數碼
DUP DUP
100 / 100 * - 10 /
;

: 算出堆疊頂端百位數個位數碼
DUP  DUP
10 / 10 * -
;

: 算出平方項的百位數乘積
算出堆疊頂端百位數百位數碼
OVER *
;

: 算出平方項的十位數乘積
OVER
算出堆疊頂端百位數十位數碼
* 10 / +
;

: 算出平方項的個位數乘積
OVER
算出堆疊頂端百位數個位數碼
* 100 / +
;

: 算2次方 ( 不超過整數範位 )
算出平方項的百位數乘積
算出平方項的十位數乘積
算出平方項的個位數乘積
;

: 算3次方 ( 不超過整數範位 )
DUP
算出堆疊頂端百位數百位數碼
OVER
算2次方
SWAP
DROP
*
SWAP
算出堆疊頂端百位數十位數碼
OVER
算2次方
SWAP
DROP
*
10 /
SWAP
算出堆疊頂端百位數個位數碼
OVER
算2次方
SWAP
DROP
*
100 /
SWAP
DROP ( 234,1094,164,21 )
+ +
;


: HUM1
算3次方
371 100 */   \ 371公式常數
;

: HUM2 ( N1-N2 )
OVER
算2次方
SWAP DROP
2065 100 */   \ 2065公式常數
-
;

: HUM3
OVER
6481 100 */  \ 6481公式常數
+
2744 -  \ 2744公式常數
;

: TMP1
算3次方
526 100 */   \ 526公式常數
;

: TMP2 ( N1-N2 )
OVER
算2次方
SWAP DROP
2734 100 */   \ 2734公式常數
-
;

: TMP3
OVER
6887 100 */  \ 6887公式常數
+
1781 -   \ 1781公式常數
;


: READ-HUM
0 ANALOGREAD 500 1000 */
HUM1 HUM2 HUM3
SWAP
DROP
;

: PRINT-HUM
READ-HUM
DUP
100 / .
."  ."    
100 MOD .
."  %"
;


: READ-TMP
1 ANALOGREAD 500 1000 */
TMP1 TMP2 TMP3
SWAP
DROP
;

: PRINT-TMP
READ-TMP
DUP
100 / .
."  ."    
100 MOD .
."  'C"
;

: READ_HSM-20G
CR PRINT-HUM
CR PRINT-TMP
CR
;

: HSM-20G
BEGIN
READ_HSM-20G
?KEY
2000 MS
UNTIL
;
 

arrow
arrow
    全站熱搜

    knsm071 發表在 痞客邦 留言(0) 人氣()