deal.c
#include "deal.h"
u8 arduino_speed=0;
int arduino_angle=0;
u8 arduino_judge=0;/////-+
uint8_t arduino_temp[10];
int8_t arduino_TEMP[10]={42,44,52,44,43,44,48,44};
u8 arduino_counter=0;
u8 douhao_pro(u8 *buf,u8 cx)
{
u8 *p=buf;
while(cx)
{
//if(*buf=='*'||*buf<' ')return 0XFF;//Óöµ½'*'»òÕß·Ç·¨×Ö·û,Ôò²»´æÔÚµÚcx¸ö¶ººÅ
if(*buf==',')cx--;
buf++;
}
return buf-p;
}
void arduino_Analysis(u8 *buf)
{
u8 posx;
u8 i=0;
char str[5]={0};
//printf("////123\r\n");
posx=douhao_pro(buf,1);
if(posx!=0XFF)
{
while(*(posx+buf)!=44)
{
str[i++]=*(posx+buf);
posx++;
}
i=0;
arduino_speed=atoi(str);
memset(str,0,5);
}
// //printf("value_1:%d\r\n",value_1);
///////////////////////////-+ºÅ
posx=douhao_pro(buf,2);
if(posx!=0XFF)
{
while(*(posx+buf)!=',')
{
str[i++]=*(posx+buf);
posx++;
}
i=0;
arduino_judge=atoi(str);
memset(str,0,5);
}
// // printf("value_2:%d\r\n",value_2);
posx=douhao_pro(buf,3);
if(posx!=0XFF)
{
while(*(posx+buf)!=',')
{
str[i++]=*(posx+buf);
posx++;
}
i=0;
arduino_angle=atoi(str);
memset(str,0,5);
}
}
void USART3_IRQHandler(void) //´®¿Ú2È«¾ÖÖжϷþÎñº¯Êý
{
if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET) //½ÓÊÕÖжÏÓÐЧ,Èô½ÓÊÕÊý¾Ý¼Ä´æÆ÷Âú
{
arduino_temp[arduino_counter] = USART_ReceiveData(USART3); //½ÓÊÕÊý¾Ý
if(arduino_counter == 0 && arduino_temp[0]!=42) return; //arduino_counter == 0&&temp[0]=42 悦﵀
arduino_counter++;
if(arduino_counter==10) //½ÓÊÕµ½n¸öÊý¾Ý
{
arduino_counter=0; //ÖØÐ¸³Öµ£¬×¼±¸ÏÂÒ»Ö¡Êý¾ÝµÄ½ÓÊÕ
memcpy(arduino_TEMP,arduino_temp,10);
arduino_Analysis(arduino_TEMP);////////////////////////////arduino½âÎö
}
}
}
deal.h
#ifndef __DEAL_H
#define __DEAL_H
#include "stdlib.h"
#include "string.h"
#include "stm32f10x.h"
u8 douhao_pro(u8 *buf,u8 cx);
void arduino_Analysis(u8 *buf);
extern u8 arduino_speed;
extern int arduino_angle;
#endif```
main.c
include “stm32f10x.h”
include “delay.h”
include “sys.h”
include “usart.h”
include “time.h”
include “stm32f10x_it.h”
include “adc.h”
include “stdlib.h”
include “iwdg.h”
include “stdio.h”
include “string.h”
//#include “lcd.h”
include “windspeed.h”
include “deal.h”
include “5110.h”
__IO int value_1 = 0;////´¬Ç°ÃæµÄ¶æ Öµ¾ÍÊǽǶÈ-90µ½90¶È
__IO int value_2 = 5;////////5 µµÊÇÍ£
__IO int value_3 = 0; // º½ÏòÇл»
__IO int value_4 = 0; // º½¼£Çл»
///////value_5=1 ´¬ÉÏ¿ØÖÆ value_5 = 0 °¶ÉÏ¿ØÖÆ
__IO int value_5 = 1; //´¬ÉÏÊÖ¶¯Çл» 1 ´¬ÉÏģʽ 0 °¶ÉÏģʽ
int16_t adxc4_zhongzhi=3110; ////////////////ǰ È˹¤²Ù¶æµÄÖÐÖµ
int current=0,former=0,sendvalue=0,orgin=0,DuoJiao=0;
extern unsigned char sign;
char buffer[30]={0x68,0x2c,0};
extern uint8_t TEMP[40];////
int angle;
u16 adcx,adcx4,adcx7;//////
char i=0;
float temperate=0;
float delta=0;///ÐèҪתµÄ½Ç¶ÈÖµ
define dianweiqi_zhongzhi 2500
int jiaozhun_zhongzhi=0;
int adcx1_chazhi=0;//////adc1²îÖµ
int adcx4_chazhi=0;//////adc4²îÖµ
u8 jiaozhun_dian_flag=1;////////////////////
u8 time_adc_flag=0;
int err=0;
int err1=0;////У׼Îó²î
int err_duo=0;///ǰ ¶æµÄÎó²î
int err_qianhou_duo=0;////
u8 ad_time_flag=0;
u8 c=0;
extern uint8_t arduino_TEMP[10];
u8 douhao(u8 *buf,u8 cx);
void str_Analysis(u8 *buf);
void judge(int16_t temp);
float WS_speed;
u16 WD_direction;
//int sss=-5;
int main(void)
{
u8 i;
u8 lcd_buff[10]={0};////////lcd5110´òÓ¡¸¨Öúº¯Êý
delay_init();
NVIC_Configuration();
USART1_Config();
USART2_Config();
LED_Init();
USART3_Config();
UART4_Config();
UART5_Config();
IWDG_Init(6,625); // 3s¿´ÃŹ·Ê±¼ä
Adc_Init();///
TIM1_PWM_Init();////
TIM_SetCompare4(TIM1,49);
///////////¶æ»ú³õʼ»¯
Motor_Init(10, 10, 2);////
TIM2_TIM3_PWM(1000,2); /////
TIM4_Init(999,7199);//////¶¨Ê±0.1s ·çËÙÒÇ
//TIM4_Init(999,719);/////////////¶¨Ê±²É¼¯adÖµ100*720/72000000
//LCD_Init();
//mini_display();
LCD5110_Init_IO();
LCD_init();////5110
LCD_clear();//5110ÇåÆÁ
while(1)
{
if(jiaozhun_dian_flag==0)/////////////µ¥Æ¬»úµôµçºó´ÓÐÂУ׼
{
TIM_SetCompare4(TIM1,49);
adcx=Get_Adc_Average1(ADC_Channel_1,50);
sprintf(lcd_buff,"%d",dianweiqi_zhongzhi);
LCD_write_english_string(0,0,"zz_adcx1:");
LCD_write_english_string(54,0,lcd_buff);
sprintf(lcd_buff,"%d",adcx);
LCD_write_english_string(0,1,"adcx1:");
LCD_write_english_string(36,1,lcd_buff);
// printf("adcx=%d\r\n",adcx);
//jiaozhun_zhongzhi=dianweiqi_zhongzhi;
// printf("jiaozhun_zhongzhi=%d\r\n",jiaozhun_zhongzhi);
err1=adcx-dianweiqi_zhongzhi;
// printf("err1=%d\r\n",err1);
if(err1<-5)//////5 ¶æÏòÓÒת
{
GPIO_SetBits(GPIOA,GPIO_Pin_5);
TIM2_TIM3_PWM(500,50);/////2000¸öÂö³å 500ÊÇ0.5ms
}
else if(err1>5)////-5
{
GPIO_ResetBits(GPIOA,GPIO_Pin_5);////////¶æÏò×óת
TIM2_TIM3_PWM(500,50);
}
else
{
jiaozhun_dian_flag=1;
}
}
else
{
////////lcd5110
//dianweiqi_zhongzhi
sprintf(lcd_buff,"%d",dianweiqi_zhongzhi);
LCD_write_english_string(0,0,"zz_adcx1:");
LCD_write_english_string(54,0,lcd_buff);
///////////////////////////////////////////////////
sprintf(lcd_buff,"%d",adcx);
LCD_write_english_string(0,1,"adcx1:");
LCD_write_english_string(36,1,lcd_buff);
//LCD_write_number(54,0,dianweiqi_zhongzhi%10);
//LCD_write_number(48,0,(dianweiqi_zhongzhi/10)%10);
//LCD_write_number(42,0,(dianweiqi_zhongzhi/100)%10);
// LCD_write_number(36,0,(dianweiqi_zhongzhi/1000)%10);
// for(i=0;i<10;i++)
// printf("aaa=%d\r\n",arduino_TEMP[i]);
WS_speed=windspeed_Analysis();//////////////·çËÙ
//WS_speed=112.1;
//printf("WS_speed=%.1fm/s\r\n",WS_speed);
sprintf(lcd_buff,"%.1f",WS_speed);
LCD_write_english_string(0,2,"fengsu:");
LCD_write_english_string(42,2,lcd_buff);
WD_direction=winddirection_Analysis();///////·çÏò
sprintf(lcd_buff,"%d",WD_direction);
LCD_write_english_string(0,3,"fengxg:");
LCD_write_english_string(42,3,lcd_buff);
// printf("WD_direction=%d\r\n",WD_direction);
str_Analysis(TEMP); ////////////////////////////////////////×Ö·ûÊý×é½âÎö
if(value_3==1||value_4==2)
{
value_1=(int16_t)delta; //º½Ïò,º½¼£Ä£Ê½¶æ»ú¿ØÖÆ
//printf("value_1=%d\r\n",value_1);
}
// printf("value_3=%d\r\n",value_3);
// printf("value_4=%d\r\n",value_4);
//////////////////////////////////////
if(value_5==1) //´¬ÉÏÊÖ¶¯¿ØÖÆÌ¨¿ØÖÆ
{
USART_Cmd(USART3, ENABLE); //ʹÄÜ USART3
arduino_Analysis(arduino_TEMP);////////////////////////////arduino½âÎö
//printf("arduino_speed=%d\r\n",arduino_speed);
// printf("arduino_angle=%d\r\n",arduino_angle);
DuoJiao=arduino_angle;/////×ó
value_1=DuoJiao;
////////////////////////////////////////////////value_1
if(value_1>=0)
{
//memset(lcd_buff,0,10);
LCD_write_english_string(36,4,"+");
LCD_write_number(48,4,value_1%10);
LCD_write_number(42,4,(value_1/10)%10);
//sprintf(lcd_buff,"%d",value_1);
// LCD_write_english_string(0,4,"fengxg:");
// LCD_write_english_string(48,4,lcd_buff);
// memset(lcd_buff,0,10);
// LCD_ShowNum(240,280,value_1,2,24);
}
else
{
LCD_write_english_string(36,4,"-");
LCD_write_number(48,4,abs(value_1)%10);
LCD_write_number(42,4,(abs(value_1)/10)%10);
//sprintf(lcd_buff,"%d",abs(value_1));
// LCD_write_english_string(0,4,"fengxg:");
// LCD_write_english_string(48,4,lcd_buff);
// memset(lcd_buff,0,10);
//LCD_ShowString(230,280,200,24,24,"-");
// LCD_ShowNum(240,280,abs(value_1),2,24);
}
//////¶æ»ú±£»¤
if(value_1>=70)
value_1=70;
if(value_1<=-70)
value_1=-70;
value_2=arduino_speed;
LCD_write_number(0,4,value_2);//////////////////////////////////////////////value_2
printf("value_2=:%d\r\n ",value_2);//front_angle
///////////////////////ÉÏÐÐ
if(arduino_speed==1)
{
TIM_SetCompare4(TIM1,100);//////×î´óËÙ¶È ÉÏ 4µµ
}
else if(arduino_speed==2)
{
TIM_SetCompare4(TIM1,88);/////// ÉÏ 3µµ
}
else if(arduino_speed==3)
{
TIM_SetCompare4(TIM1,76);/////// ÉÏ 2µµ
}
else if(arduino_speed==4)
{
TIM_SetCompare4(TIM1,64);/////// ÉÏ 1µµ
}
else if(arduino_speed==5)
{
TIM_SetCompare4(TIM1,49);/////////////// ÖмäÍ£
}
else if(arduino_speed==6)
{
TIM_SetCompare4(TIM1,32);/////// ÏÂ 1µµ
}
else if(arduino_speed==7)
{
TIM_SetCompare4(TIM1,21);/////// ÏÂ 2µµ
}
else if(arduino_speed==8)
{
TIM_SetCompare4(TIM1,10);/////// ÏÂ 3µµ
}
else if(arduino_speed==9)
{
TIM_SetCompare4(TIM1,1);//////×î´óËÙ¶È Ï 4µµ
}
else
{
TIM_SetCompare4(TIM1,49);///////////////ÖмäÍ£
}
}
else //// value_5=0
{
USART_Cmd(USART3, DISABLE); //¹Ø±Õ USART3
//value_2=5;
///////////////////////ÉÏÐÐ
if(value_2==1)
{
TIM_SetCompare4(TIM1,100);//////×î´óËÙ¶È ÉÏ 4µµ
}
else if(value_2==2)
{
TIM_SetCompare4(TIM1,88);/////// ÉÏ 3µµ
}
else if(value_2==3)
{
TIM_SetCompare4(TIM1,76);/////// ÉÏ 2µµ
}
else if(value_2==4)
{
TIM_SetCompare4(TIM1,64);/////// ÉÏ 1µµ
}
else if(value_2==5)
{
TIM_SetCompare4(TIM1,49);/////////////// ÖмäÍ£
}
else if(value_2==6)
{
TIM_SetCompare4(TIM1,32);/////// ÏÂ 1µµ
}
else if(value_2==7)
{
TIM_SetCompare4(TIM1,21);/////// ÏÂ 2µµ
}
else if(value_2==8)
{
TIM_SetCompare4(TIM1,10);/////// ÏÂ 3µµ
}
else if(value_2==9)
{
TIM_SetCompare4(TIM1,1);//////×î´óËÙ¶È Ï 4µµ
}
else
{
TIM_SetCompare4(TIM1,49);///////////////ÖмäÍ£
}
}
adcx=Get_Adc_Average1(ADC_Channel_1,100);
adcx1_chazhi=adcx-dianweiqi_zhongzhi;
angle=(adcx1_chazhi*90)/1185;
judge(value_1);////////////value_1ÆÚÍûµÄ½Ç¶ÈÖµangleÊÇʵ¼ÊµÄ½Ç¶ÈÖµ
///////////////////·¢Ë͵½max°å×ÓµÄÊý¾Ý
sprintf(buffer+2,"%.1f,%d,%d,%.1f,%d,",(float)angle,value_1,value_2,WS_speed,WD_direction);
for(i=0;i<30;i++)
{
USART_SendData(USART2, buffer[i]);
while(USART_GetFlagStatus(USART2, USART_FLAG_TC) != SET); //·¢ËͶæ»ú½Ç¶ÈÖµ
}
}
IWDG_Feed();//ι¹·
}
}
u8 douhao(u8 *buf,u8 cx)
{
u8 *p=buf;
while(cx)
{
if(buf==’‘||buf<’ ‘)return 0XFF;//Óöµ½’‘»òÕß·Ç·¨×Ö·û,Ôò²»´æÔÚµÚcx¸ö¶ººÅ
if(*buf==’,’)cx–;
buf++;
}
return buf-p;
}
void str_Analysis(u8 *buf)
{
u8 posx;
u8 i=0;
char str[10]={0};
posx=douhao(buf,1);
if(posx!=0XFF)
{
while(*(posx+buf)!=',')
{
str[i++]=*(posx+buf);
posx++;
}
i=0;
value_1=atoi(str);
memset(str,0,10);
}
//printf(“value_1:%d\r\n”,value_1);
posx=douhao(buf,2);
if(posx!=0XFF)
{
while(*(posx+buf)!=',')
{
str[i++]=*(posx+buf);
posx++;
}
i=0;
value_2=atoi(str);
memset(str,0,10);
}
// printf("value_2:%d\r\n",value_2);
posx=douhao(buf,3);
if(posx!=0XFF)
{
while(*(posx+buf)!=',')
{
str[i++]=*(posx+buf);
posx++;
}
i=0;
value_3=atoi(str);
memset(str,0,10);
}
// printf("value_3:%d\r\n",value_3);
posx=douhao(buf,4);
if(posx!=0XFF)
{
while(*(posx+buf)!=',')
{
str[i++]=*(posx+buf);
posx++;
}
i=0;
value_4=atoi(str);
memset(str,0,10);
}
//printf("value_4:%d\r\n",value_4);
posx=douhao(buf,5);
if(posx!=0XFF)
{
while(*(posx+buf)!=',')
{
str[i++]=*(posx+buf);
posx++;
}
i=0;
value_5=atoi(str);
memset(str,0,10);
}
//printf("value_5:%d\r\n",value_5);
posx=douhao(buf,6);
if(posx!=0XFF)
{
delta=atof(buf+posx);
}
//printf("delta:%f\r\n",delta);
// printf("%s",buf);
}
void judge(int16_t temp)
{
int32_t err_kuoda=0;
int16_t err_angle=0;
int16_t err_angle_fan=0;
err=temp-angle;
//printf(“angle=%d\r\n”,angle);
//printf(“temp=%d\r\n”,temp);
err_kuoda=err*14;
//printf(“err=%d\r\n”,err);
// printf(“err_kuoda=%d\r\n”,err_kuoda);
//if(err_kuoda>0)
//{
if(err_kuoda>=800&&err_kuoda<900)////50 du
{
err_angle=50;
// GPIO_SetBits(GPIOA,GPIO_Pin_5);
// TIM2_TIM3_PWM(500,400);/////2000¸öÂö³å 500ÊÇ0.5ms
}
else if(err_kuoda>=650&&err_kuoda<800)/////40 du
{
err_angle=40;
//GPIO_SetBits(GPIOA,GPIO_Pin_5);
// TIM2_TIM3_PWM(500,400);/////2000¸öÂö³å 500ÊÇ0.5ms
}
else if(err_kuoda>=520&&err_kuoda<650)/////30 du
{
err_angle=30;
//GPIO_SetBits(GPIOA,GPIO_Pin_5);
//TIM2_TIM3_PWM(500,400);/////2000¸öÂö³å 500ÊÇ0.5ms
}
else if(err_kuoda>=390&&err_kuoda<520)/////20 du
{
err_angle=20;
//GPIO_SetBits(GPIOA,GPIO_Pin_5);
//TIM2_TIM3_PWM(500,400);/////2000¸öÂö³å 500ÊÇ0.5ms
}
else if(err_kuoda>=260&&err_kuoda<390)/////10 du
{
err_angle=10;
//GPIO_SetBits(GPIOA,GPIO_Pin_5);
//TIM2_TIM3_PWM(500,400);/////2000¸öÂö³å 500ÊÇ0.5ms
}
else if(err_kuoda>=130&&err_kuoda<260)/////5 du
{
err_angle=5;
// GPIO_SetBits(GPIOA,GPIO_Pin_5);
//TIM2_TIM3_PWM(500,200);/////2000¸öÂö³å 500ÊÇ0.5ms
}
else if(err_kuoda>=13)
{
err_angle=1;
// GPIO_SetBit
//GPIO_SetBits(GPIOA,GPIO_Pin_5);
// TIM2_TIM3_PWM(500,40);/////2000¸öÂö³å 500ÊÇ0.5ms
}
else
{
err_angle=0;
}
switch(err_angle)
{
case 50: GPIO_SetBits(GPIOA,GPIO_Pin_5); TIM2_TIM3_PWM(500,400); break;/////2000¸öÂö³å 500ÊÇ0.5ms
case 40: GPIO_SetBits(GPIOA,GPIO_Pin_5); TIM2_TIM3_PWM(500,400); break;/////2000¸öÂö³å 500ÊÇ0.5ms
case 30: GPIO_SetBits(GPIOA,GPIO_Pin_5); TIM2_TIM3_PWM(500,400); break;/////2000¸öÂö³å 500ÊÇ0.5ms
case 20: GPIO_SetBits(GPIOA,GPIO_Pin_5); TIM2_TIM3_PWM(500,400); break;/////2000¸öÂö³å 500ÊÇ0.5ms
case 10: GPIO_SetBits(GPIOA,GPIO_Pin_5); TIM2_TIM3_PWM(500,400); break;/////2000¸öÂö³å 500ÊÇ0.5ms
case 5: GPIO_SetBits(GPIOA,GPIO_Pin_5); TIM2_TIM3_PWM(500,200); break;/////2000¸öÂö³å 500ÊÇ0.5ms
case 1: GPIO_SetBits(GPIOA,GPIO_Pin_5); TIM2_TIM3_PWM(500,40); break;/////2000¸öÂö³å 500ÊÇ0.5ms
default:break;
}
if(err_kuoda<=-780)//////////50du
{
err_angle_fan=50;
// GPIO_ResetBits(GPIOA,GPIO_Pin_5);
// TIM2_TIM3_PWM(500,2000);
}
else if(err_kuoda>-780&&err_kuoda<-650)/////-40du
{
err_angle_fan=40;
// GPIO_ResetBits(GPIOA,GPIO_Pin_5);
// TIM2_TIM3_PWM(500,1600);
}
else if(err_kuoda>=-650&&err_kuoda<-520)/////-30du
{
err_angle_fan=30;
///TIM2_TIM3_PWM(500,1200);
}
else if(err_kuoda>=-520&&err_kuoda<-390)/////-20du
{
err_angle_fan=20;
//GPIO_ResetBits(GPIOA,GPIO_Pin_5);
//TIM2_TIM3_PWM(500,800);
}
else if(err_kuoda>=-390&&err_kuoda<-260)/////-10du
{
err_angle_fan=10;
//GPIO_ResetBits(GPIOA,GPIO_Pin_5);
///TIM2_TIM3_PWM(500,400);
}
else if(err_kuoda>=-260&&err_kuoda<-130)/////-5du
{
err_angle_fan=5;
//GPIO_ResetBits(GPIOA,GPIO_Pin_5);
//TIM2_TIM3_PWM(500,200);
}
else if(err_kuoda<=-13)////
{
err_angle_fan=1;
//GPIO_ResetBits(GPIOA,GPIO_Pin_5);
//TIM2_TIM3_PWM(500,40);
}
else
{
err_angle_fan=0;
}
switch(err_angle_fan)
{
case 50: GPIO_ResetBits(GPIOA,GPIO_Pin_5); TIM2_TIM3_PWM(500,400); break;/////2000¸öÂö³å 500ÊÇ0.5ms
case 40: GPIO_ResetBits(GPIOA,GPIO_Pin_5); TIM2_TIM3_PWM(500,400); break;/////2000¸öÂö³å 500ÊÇ0.5ms
case 30: GPIO_ResetBits(GPIOA,GPIO_Pin_5); TIM2_TIM3_PWM(500,400); break;/////2000¸öÂö³å 500ÊÇ0.5ms
case 20: GPIO_ResetBits(GPIOA,GPIO_Pin_5); TIM2_TIM3_PWM(500,400); break;/////2000¸öÂö³å 500ÊÇ0.5ms
case 10: GPIO_ResetBits(GPIOA,GPIO_Pin_5); TIM2_TIM3_PWM(500,400); break;/////2000¸öÂö³å 500ÊÇ0.5ms
case 5: GPIO_ResetBits(GPIOA,GPIO_Pin_5); TIM2_TIM3_PWM(500,200); break;/////2000¸öÂö³å 500ÊÇ0.5ms
case 1: GPIO_ResetBits(GPIOA,GPIO_Pin_5); TIM2_TIM3_PWM(500,40); break;/////2000¸öÂö³å 500ÊÇ0.5ms
default:break;
}
}
“`

2512

被折叠的 条评论
为什么被折叠?



