今晚的内容:
把校准部分搞定
把参数存储调通
让电机自己启动开始动作
今天实际完成的工作量:
写了校准函数
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 ",PressureCaliTureValue[0]); 24 break; 25 case 0x0002://240 26 PressureCaliTureValue[1]=g_fFinalPressure; 27 PressureCaliCorrectPara[1]=240-PressureCaliTureValue[1]; 28 printf("压力设置 240:%f ",PressureCaliTureValue[1]); 29 break; 30 case 0x0003://180 31 PressureCaliTureValue[2]=g_fFinalPressure; 32 PressureCaliCorrectPara[2]=180-PressureCaliTureValue[2]; 33 printf("t压力设置 180:%f ",PressureCaliTureValue[2]); 34 break; 35 case 0x0004://120 36 PressureCaliTureValue[3]=g_fFinalPressure; 37 PressureCaliCorrectPara[3]=120-PressureCaliTureValue[3]; 38 printf("压力设置 120:%f ",PressureCaliTureValue[3]); 39 break; 40 case 0x0005://60 41 PressureCaliTureValue[4]=g_fFinalPressure; 42 PressureCaliCorrectPara[4]=60-PressureCaliTureValue[4]; 43 printf("压力设置 60:%f ",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 ",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了
配置如上图
我猜是应该没有把屏幕重新上电导致的吧 重新上电就好了 (内部寄存器重置了)
调试总结:
每天都要定计划
定好计划再去敲打码
调试
这样才能高效
计划要详细一些
有的时候盲目的调试 好像着魔了一样