1. 程式人生 > >流量校準儀開發日誌-2017-10-24

流量校準儀開發日誌-2017-10-24

程序 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 case
0x0002://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