|
#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "key.h"
#include "exti.h"
#include "oled.h"
#include "bmp.h"
#include "stdio.h"
#include "timer.h"
#include "pwm.h"
#include "adc.h"
//#include "dma.h"
#include "dac.h"
#include "math.h"
//#include "lcd.h"
int key=16,i=4;
/************************************************
Linear model Poly44:
f(x,y) = p00 + p10*x + p01*y + p20*x^2 + p11*x*y + p02*y^2 + p30*x^3 + p21*x^2*y
+ p12*x*y^2 + p03*y^3 + p40*x^4 + p31*x^3*y + p22*x^2*y^2
+ p13*x*y^3 + p04*y^4
Coefficients (with 95% confidence bounds):
p00 = 815.3 (-611.9, 2243)
p10 = -1825 (-4494, 844.2)
p01 = 214.4 (-1273, 1702)
p20 = 1371 (237.8, 2505)
p11 = -176 (-2239, 1887)
p02 = -21.87 (-1250, 1207)
p30 = -312.5 (-506.5, -118.6)
p21 = -269.4 (-1153, 614.5)
p12 = 287.3 (-315.6, 890.2)
p03 = -82.47 (-401, 236.1)
p40 = -0.2298 (-11.15, 10.69)
p31 = 127.4 (50.16, 204.6)
p22 = -116.1 (-333.8, 101.5)
p13 = 34.01 (-116.9, 184.9)
p04 = 0.272 (-26.4, 26.94)
************************************************/
u16 key_now;
u8 s[32];
u8 a[20];
u16 k=16;
static float X=0,Y=0,yx=0,yy=0;
int flag;
u16 len;
u16 t;
float j,sum=0;
u16 count;
double value_bufx[60];
double value_bufy[60];
double c1,c2,c3,c;
float p1 = 35.9051230284102;
float p2 = 2.51731140785174;
float p3 = -0.00253321315735517;
float p4 = 1.13774697330653E-6;
float p5 = -1.90794160143314E-10;
float p6 = -2.40354264942655;
float p7 = 0.00220119494047271;
float p8 = -8.97928617687215E-7;
float p9 = 1.37712805906337E-10;
/**************y1******************/
float p1a = -31081.3357450581;
float p2a = -17.9062208628455;
float p3a = 0.0043239373019912;
float p4a = 42.0937583654767;
float p5a = -0.00671574580296278;
float p6a = -72.3642534788514;
float p7a = 0.0248376285832583;
float p8a = 70.2642217404328;
float p9a = -0.0232390975855509;
/**************y2********************/
float p1b = -419518.550924149;
float p2b = -69.145028647627;
float p3b = 426.237917123716;
float p4b = -0.0526281803287531;
float p5b = -375.196812392642;
float p6b = 0.120415417358666;
float p7b = 381.675580450068;
float p8b = -0.122831413051161;
/**************y3********************/
void Initflont(void)
{
OLED_ShowCHinese(0,0,21);//êÇ·ñμãÏÂ
OLED_ShowCHinese(16,0,22);//êÇ·ñμãÏÂ
OLED_ShowCHinese(32,0,28);//êÇ·ñμãÏÂ
OLED_ShowCHinese(48,0,29);//êÇ·ñμãÏÂ
OLED_ShowChar(65,0,':');
OLED_ShowCHinese(70,0,22);//·ñ
OLED_ShowCHinese(0,2,30);//ÏóÏT
OLED_ShowCHinese(48,2,31);
OLED_ShowChar(65,2,':');
OLED_ShowCHinese(70,2,27);//ÎT
OLED_ShowChar(0,4,'X');//XÖá
OLED_ShowCHinese(16,4,32);//
OLED_ShowChar(32,4,':');
OLED_ShowChar(0,6,'Y');//YÖá
OLED_ShowCHinese(16,6,32);//
OLED_ShowChar(32,6,':');
}
void Initswith()
{
GNDB=1;
GNDD=1;
IB=1;
ID=1; //1 êÇ1Ø 0 êÇ¿a
}
void chooseX() // A B =I C D=0
{
GNDB=1;
IB=0;
GNDD=0;
ID=1;
}
void chooseY() // A D= I B C= 0
{
GNDB=0;
IB=1;
GNDD=1;
ID=0;
}
void penwide(float px,float py,u16 wide)
{
OLED_DrawPoint(px,py+wide,1);
OLED_DrawPoint(px,py,1);
OLED_DrawPoint(px+wide,py,1);
OLED_DrawPoint(px+wide,py+wide,1);
}
int main(void)
{
//u16 led0pwmval=0;
//u8 dir=1;
delay_init(); //Ñóê±oˉêy3õê¼»ˉ
uart_init(115200);
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //éèÖÃNVIC·Ö×é á½Î»ÇàÕ¼óÅÏè¼¶ á½Î»Ïìó|óÅÏè¼¶
LED_Init(); //3õê¼»ˉóëLEDᬽóμÄó2¼t½ó¿ú
Ch451_Init();
Exti_Init();
OLED_Init();
Adc_Init();
Adc_Init2();
DAC1_Init();
//lcd_Init();
TIM3_Int_Init(60,7199);
// OLED_ShowCHinese(32,2,16);
// OLED_ShowCHinese(48,2,17);
// OLED_ShowCHinese(64,2,18);
// OLED_ShowCHinese(80,2,19);
// OLED_ShowCHinese(96,2,20);
//
// OLED_ShowCHinese(32,4,35);
// OLED_ShowCHinese(48,4,36);
//
// OLED_ShowCHinese(80,4,37);
// OLED_ShowCHinese(96,4,38);
Initswith();
// TIM3_PWM_Init(49999,71);
// TIM_SetCompare2(TIM3,25000);
//chooseY();
i=0;
while(1)
{
// c=y*3.3/4095;
//
//X=2.07;
//Y=1.854;
// if(key==14)
// {
// chooseX();
// key=16;
// i=4;
// }
// if(key==15)
// {
// chooseY();
// key=16;
// i=6;
// }
// if(key==11)
// {
// Initswith();
// key=16;
// }
// sprintf((char*)a,"%.3f",yx);
// OLED_ShowString(40,i,a);
// sprintf((char*)a,"%.3f",yy);
// OLED_ShowString(40,i,a);
//c = p00 + p10*X + p01*Y + p11*X*Y + p02*pow(Y,2)+ p12*X*pow(Y,2) + p03*pow(Y,3);
// c = p00 + p10*X + p01*Y + p20*pow(X,2) + p11*X*Y + p02*pow(Y,2) + p30*pow(X,3)+ p21*pow(X,2)*Y
// + p12*X*pow(Y,2) + pow(Y,3) + p40*pow(X,4) + p31*pow(X,3)*Y + p22*pow(X,2)*pow(Y,2)
// + p13*X*pow(Y,3)+ p04*pow(Y,4) + p50*pow(X,5) + p41*pow(X,4)*y + p32*pow(X,3)*pow(Y,2);
// j = p00 + p10*X + p01*Y + p20*pow(X,2) + p11*X*Y + p02*pow(Y,2) + p30*pow(X,3)+ p21*pow(X,2)*Y
// + p12*X*pow(Y,2) + p03*pow(Y,3)+ p40*pow(X,4) + p31*pow(X,3)*Y + p22*pow(X,2)*pow(Y,2)
// + p13*X*pow(Y,3) + p04*pow(Y,4);
if(i<100)
{
chooseX();
X=yx;
}
if(i>100&&i<200)
{
chooseY();
Y=yy;
if(i==199)
i=0;
}
//x// z = p1+p2*x+p3*x^2+p4*x^3+p5*x^4+p6*y+p7*y^2+p8*y^3+p9*y^4
//y1 Z = (p1+p2*x+p3*x^2+p4*y+p5*y^2)/(1+p6*x+p7*x^2+p8*y+p9*y^2)
//y2 z = (p1+p2*x+p3*y+p4*y^2)/(1+p5*x+p6*x^2+p7*y+p8*y^2)
//y3
if(i==0)
{
//j= (p1+p2*X+p3*pow(X,2)+p4*pow(X,3)+p5*Y)/(1+p6*X+p7*pow(X,2)+p8*Y+p9*pow(Y,2)+p10*pow(Y,3));
j= p1+p2*X+p3*pow(X,2)+p4*pow(X,3)+p5*pow(X,4)+p6*Y+p7*pow(Y,2)+p8*pow(Y,3)+p9*pow(Y,4);
// if(j>0&&j<5)
// j=j+j/5;
if(j>-7&&j<=0)
{
c1= (p1a+p2a*X+p3a*pow(X,2)+p4a*Y+p5a*pow(Y,2))/(1+p6a*X+p7a*pow(X,2)+p8a*Y+p9a*pow(Y,2));
if(j>-6&&j<=-3)
c1-=0.3;
else
c1-=1;
c=c1;
}
if(j>0&&j<=6)
{
c2= (p1b+p2b*X+p3b*Y+p4b*pow(Y,2))/(1+p5b*X+p6b*pow(X,2)+p7b*Y+p8b*pow(Y,2))-1;
c=c2;
}
}
if(key==5)
{
Initflont();
key=16;
}
if(yx>700&&yy<3000) //ÏÔê¾ êÇ·ñμãÏÂ
{
OLED_ShowCHinese(70,0,21);//êÇ
if(j>0)
OLED_ShowCHinese(100,2,34);//right
if(j<0)
OLED_ShowCHinese(100,2,33);//left
if(j>0&&c>0)
OLED_ShowCHinese(70,2,23);//one
if(j<0&&c>0)
OLED_ShowCHinese(70,2,24);//two
if(j<0&&c<0)
OLED_ShowCHinese(70,2,25);//three
if(j>0&&c<0)
OLED_ShowCHinese(70,2,26);//four
sprintf((char*)a,"%.1f",j);
OLED_ShowString(40,4,a);
OLED_ShowString(73,4," ");
sprintf((char*)s,"%.1f",c);
OLED_ShowString(40,6,s);
OLED_ShowString(73,6," ");
}
else
{
OLED_ShowCHinese(70,0,22);//·ñ
OLED_ShowCHinese(70,2,27);//ÎT
OLED_ShowCHinese(100,2,27);//ÎT
}
if(key==13)
{
printf("%.3f\r\n",yx);
key=16;
}
if(key==12)
{
printf("%.3f\r\n",yy);
key=16;
}
}
}
void TIM3_IRQHandler(void) //¶¨ê±Æ÷ÖD¶Ï
{
if(TIM_GetITStatus(TIM3,TIM_IT_Update)==SET)
//after_kalman_MiddlevalueFilter(Get_Adc(ADC_Channel_1));
//y=after_kalman_MiddlevalueFilter(Get_Adc(ADC_Channel_1));
//y=fliter(Get_Adc(ADC_Channel_1));
//yx=KalmanFilter(Get_Adc(ADC_Channel_1),0.01,50);
//yy=KalmanFilter(Get_Adc2(ADC_Channel_0),0.5,9);
//y=GlideFilterAD1(value_bufx,60,Get_Adc(ADC_Channel_1));
if(i<100)
yx=GlideFilterAD1(value_bufx,60,Get_Adc(ADC_Channel_1));
if(i>100&&i<200)
yy=GlideFilterAD2(value_bufy,60,Get_Adc2(ADC_Channel_0));
i++;
// yx=yx*3.3/4095;
//yy=yy*3.3/4095;
TIM_ClearITPendingBit(TIM3,TIM_IT_Update);
}
void EXTI3_IRQHandler(void) //¼üÅìÖD¶Ïoˉêy
{
key=ch451_read();
EXTI_ClearITPendingBit(EXTI_Line3);
}
|
-
-
程序.rar
2018-3-10 16:02 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
329.9 KB, 下載次數: 19, 下載積分: 黑幣 -5
|