流量校准仪开发日志-2017-10-24

Posted 创世界

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了流量校准仪开发日志-2017-10-24相关的知识,希望对你有一定的参考价值。

今晚的内容:

 

把校准部分搞定

 

把参数存储调通

 

让电机自己启动开始动作

 

今天实际完成的工作量:

 

写了校准函数

 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的主要内容,如果未能解决你的问题,请参考以下文章

压力校准仪开发日志-10-21 迪文屏通信命令记录

压力校准仪开发日志--2017-10-30-2

压力校准仪开发日志 发现的问题

压力校准仪开发日志2017-12-13

我的Android进阶之旅NDK开发之在C++代码中使用Android Log打印日志,打印出C++的函数耗时以及代码片段耗时详情

大数据综合项目--网站流量日志数据分析系统(详细步骤和代码)