流量校準儀開發日誌-2017-10-24
阿新 • • 發佈:2017-10-25
程序 eva read data sele () gen context logs
今晚的內容:
把校準部分搞定
把參數存儲調通
讓電機自己啟動開始動作
今天實際完成的工作量:
寫了校準函數
1 /**************************************** 2 3 input: 4 輸入從觸摸屏來的指令 5 6 來確定下一步的動作 7 out: 8 壓力參數校準 9 ****************************************/ 10 void PressureCalibration(void) 11 { 12 //GetPressureZero(); 13 //printf("this is壓力校準"); 14 if( (ScreenScan()==0xeeee))//收到按鍵指令 15 { 16 if(g_u16TouchKeyAddress==0x0052) 17 { 18 switch(g_u16TouchKeyValue) 19 { 20 case 0x0001://300 21 PressureCaliTureValue[0]=g_fFinalPressure; 22 PressureCaliCorrectPara[0]=300-PressureCaliTureValue[0]; 23 printf("壓力設置 300:%f\r\n",PressureCaliTureValue[0]); 24 break; 25 case0x0002://240 26 PressureCaliTureValue[1]=g_fFinalPressure; 27 PressureCaliCorrectPara[1]=240-PressureCaliTureValue[1]; 28 printf("壓力設置 240:%f\r\n",PressureCaliTureValue[1]); 29 break; 30 case 0x0003://180 31 PressureCaliTureValue[2]=g_fFinalPressure; 32 PressureCaliCorrectPara[2]=180-PressureCaliTureValue[2]; 33 printf("t壓力設置 180:%f\r\n",PressureCaliTureValue[2]); 34 break; 35 case 0x0004://120 36 PressureCaliTureValue[3]=g_fFinalPressure; 37 PressureCaliCorrectPara[3]=120-PressureCaliTureValue[3]; 38 printf("壓力設置 120:%f\r\n",PressureCaliTureValue[3]); 39 break; 40 case 0x0005://60 41 PressureCaliTureValue[4]=g_fFinalPressure; 42 PressureCaliCorrectPara[4]=60-PressureCaliTureValue[4]; 43 printf("壓力設置 60:%f\r\n",PressureCaliTureValue[4]); 44 break; 45 46 47 break; 48 default: 49 break; 50 } 51 52 } 53 if(g_u16TouchKeyAddress==0x0050) 54 { 55 g_u16PageNum==u16ContextPageSetSelect; 56 } 57 } 58 59 }
寫了與校準函數配套的最終壓力輸出函數
1 /**************************************** 2 3 input: 4 輸入從觸摸屏來的指令 5 6 來確定下一步的動作 7 out: 8 9 壓力計算 10 11 首先修正值的計算公式如下 12 PressureCaliCorrectPara= 300-NowPress 13 其次 14 在最終壓力輸出函數中 15 通過 壓力加上兩個端點的修正系數的平均值得出最終壓力 16 g_fFinalPressure=l_fNowPressure+(PressureCaliCorrectPara[4]+PressureCaliCorrectPara[3])/2; 17 ****************************************/ 18 void GetFinalPressure(void) 19 { 20 float l_fNowPressure; 21 l_fNowPressure=g_fAfter2Pressure-g_fPressureZero; 22 if(l_fNowPressure==0) 23 { 24 g_fFinalPressure=0; 25 } 26 27 if((l_fNowPressure>0)&(l_fNowPressure<1)) 28 { 29 g_fFinalPressure=0; 30 } 31 32 if(((l_fNowPressure>0)&(l_fNowPressure<60))|(l_fNowPressure==60)) 33 { 34 g_fFinalPressure=l_fNowPressure+PressureCaliCorrectPara[4]; 35 } 36 if( ((l_fNowPressure>60)&(l_fNowPressure<120))|(l_fNowPressure==120) ) 37 { 38 g_fFinalPressure=l_fNowPressure+(PressureCaliCorrectPara[4]+PressureCaliCorrectPara[3])/2; 39 } 40 if( ((l_fNowPressure>120)&(l_fNowPressure<180))|(l_fNowPressure==180) ) 41 { 42 g_fFinalPressure=l_fNowPressure+(PressureCaliCorrectPara[3]+PressureCaliCorrectPara[2])/2; 43 } 44 if( ((l_fNowPressure>180)&(l_fNowPressure<240))|(l_fNowPressure==240) ) 45 { 46 g_fFinalPressure=l_fNowPressure+(PressureCaliCorrectPara[2]+PressureCaliCorrectPara[1])/2; 47 } 48 if( ((l_fNowPressure>240)&(l_fNowPressure<300))|(l_fNowPressure==300) ) 49 { 50 g_fFinalPressure=l_fNowPressure+(PressureCaliCorrectPara[1]+PressureCaliCorrectPara[0])/2; 51 } 52 if( l_fNowPressure>300 ) 53 { 54 g_fFinalPressure=l_fNowPressure+(PressureCaliCorrectPara[1]+PressureCaliCorrectPara[0])/2; 55 } 56 }
上面的函數執行的是簡單的邏輯 即為:分段切割 修正壓力值
寫了一個求零點的函數
1 /**************************************** 2 3 input: 4 輸入從觸摸屏來的指令 5 6 來確定下一步的動作 7 out: 8 9 計算零點 10 11 ****************************************/ 12 void GetPressureZero(void) 13 { 14 float l_press; 15 // 控制電磁閥撒氣 回到零點 16 17 delay_ms(1000);//wait 1s 18 19 g_fPressureZero=MS561101BA_readdata(); 20 //g_fPressureZero=(u16)l_press; 21 printf("this is get zero:%f\r\n",g_fPressureZero); 22 23 }
這個求零點函數 主要用在當電機的電磁閥打開時
自己檢測到是0點狀態
然後自己求偏移量 自動校零
總結:
註意
迪文屏的發送函數
有些還沒有改過來
發現的問題:
給
DWIN_sprintf這個函數現在不能正常使用
無法正常打印浮點數據
如上的程序
LCD顯示:259.9
如上的顯示為285.3
我看了一下8040裏面的程序 好像也沒有使用 只是有些函數中定義了這個用法
但是DWIN_sprintf沒有使用他來打印浮點數據
我現在使用的是
DisplayOneWord(0x0058,g_fFinalPressure*10);
這樣向上傳輸據
還挺好用的
註意 我嘗試過 用
DisplayDoubleWord(0x0058,g_fFinalPressure*10);
是不可以的
原因如下
還有一個問題
昨天的時候
向開機自檢界面0x0200傳輸據傳不上去
今天一來就OK了
配置如上圖
我猜是應該沒有把屏幕重新上電導致的吧 重新上電就好了 (內部寄存器重置了)
調試總結:
每天都要定計劃
定好計劃再去敲打碼
調試
這樣才能高效
計劃要詳細一些
有的時候盲目的調試 好像著魔了一樣
流量校準儀開發日誌-2017-10-24