#include "common.h"
#include "include.h"
#define RX_SU 1
#define RX_ER 0
uint8 flag_rx_succsess=RX_ER;
int8 FloatSave[12];
int8 RX[14];
int8 RX_FLAG=0;
int8 sa[8];
float kk=2;//
uint8 count_RX;
int str_ln=0;
int MinStable4;
double Error0;
int x;
unsigned char SpeedNow0;
unsigned char ObstacleCountMax;
float dianji_kp;
float dianji_ki;
float dianji_kd;
struct NUM_GET NUM_A;
struct NUM_GET NUM_B;
struct NUM_GET NUM_C;
struct NUM_GET NUM_D;
struct NUM_GET NUM_E;
void uart_IN_init(void)
{
uart_init (UART4, 115200); // UART4_RX_TX_VECTORn
set_vector_handler(UART4_RX_TX_VECTORn,uart4_handler);
uart_rx_irq_en (UART4); //uart_rx_irq_en (UARTn_e);
}
void uart4_handler(void)
{
uart_getchar(UART4, &RX[count_RX]);
if( RX[0] == '#' )
count_RX++;
else
count_RX=0;
if(count_RX==14)
{
kk++;
count_RX=0;
flag_rx_succsess =RX_SU;
NUM_GET();
count_RX=0;
}
}
void ReceFloat(void)
{
{
RX_FLAG=RX[1];
FloatSave[0]=RX[2];
FloatSave[1]=RX[3];
FloatSave[2]=RX[4];
FloatSave[3]=RX[5];
FloatSave[4]=RX[6];
FloatSave[5]=RX[7];
FloatSave[6]=RX[8];
FloatSave[7]=RX[9];
FloatSave[8]=RX[10];
FloatSave[9]=RX[11];
FloatSave[10]=RX[12];
FloatSave[11]=RX[13];
}
}
void NUM_GET(void)
{
if(flag_rx_succsess==RX_SU)
{
ReceFloat();
if(RX_FLAG=='A')
{
memcpy((char*)(&yl_Pspeed),&FloatSave[0],4); //void *memcpy(void *dest, const void *src, size_t n); ?o??src?u?????u????????ee??????ae????N?????u????��edest?u?????u??????ee??????D
memcpy((char*)(&yl_Ispeed),&FloatSave[4],4);
memcpy((char*)(&yl_Dspeed),&FloatSave[8],4);
}
else if(RX_FLAG=='B')
{
memcpy((char*)(&TurnP2),&FloatSave[0],4);
memcpy((char*)(&TurnD2),&FloatSave[4],4);
memcpy((char*)(&yl_Dspeed),&FloatSave[8],4);
}
else if(RX_FLAG=='C')
{
memcpy((char*)(&TurnP1),&FloatSave[0],4);
memcpy((char*)(&TurnP1),&FloatSave[4],4);
//memcpy((char*)(&dianjiPID.Kd),&FloatSave[8],4);
}
else if(RX_FLAG=='D')
{
// memcpy((char*)(&DMA_GET_Left),&FloatSave[0],4);
//memcpy((char*)(&suibian),&FloatSave[4],4);
//memcpy((char*)(&dianji_kd),&FloatSave[8],4);
}
else if(RX_FLAG=='E')
{
memcpy(((char*)&NUM_E.A),&FloatSave[0],4);
memcpy((char*)(&NUM_E.B),&FloatSave[4],4);
memcpy((char*)(&NUM_E.C),&FloatSave[8],4);
}
else
flag_rx_succsess=RX_ER;
}
}
void FloatToChar(float floatNum, char* byteArry)
{
int FloatToChar_a,FloatToChar_b,FloatToChar_c,FloatToChar_d,FloatToChar_e,FloatToChar_f,FloatToChar_g;
FloatToChar_a=(int)floatNum;
FloatToChar_b=(int)(floatNum*10-FloatToChar_a*10);
FloatToChar_c=(int)(floatNum*100-((int)(floatNum*10))*10);
FloatToChar_d=(int)(floatNum*1000-((int)(floatNum*100))*10);
FloatToChar_e=(int)(floatNum*10000-((int)(floatNum*1000))*10);
FloatToChar_f=(int)(floatNum*100000-((int)(floatNum*10000))*10);
FloatToChar_g=(int)(floatNum*1000000-((int)(floatNum*100000))*10);
str_ln=sprintf(byteArry,"%d.%d%d%d%d%d%d",FloatToChar_a,FloatToChar_b,FloatToChar_c,FloatToChar_d,FloatToChar_e,FloatToChar_f,FloatToChar_g);
//printf("%d\n\n\n",str_ln);
}
void putstr(char *s, char a)
{
uart_putchar(UART4,'#');
uart_putchar(UART4,a);
uart_putbuff (UART4,s,8);
uart_putchar(UART4,a);
uart_putchar(UART4,'#');
}
void NUM_Send(void)
{
FloatToChar(zl_zhuansu*10,sa);
putstr(sa,'A');
FloatToChar(yl_zhuansu*10,sa);
putstr(sa,'B');
FloatToChar(motorightout,sa);
putstr(sa,'C');
FloatToChar(yl_zhuansu,sa);
putstr(sa,'D');
}
pid检测上位机C++
需积分: 12 81 浏览量
2018-04-01
11:15:36
上传
评论 2
收藏 32KB ZIP 举报
Bello_ran
- 粉丝: 0
- 资源: 2
最新资源
- 基于Android的学生信息管理2.rar
- 3e9ef566-ba13-47b0-a252-77aa9e4b040f8412130.apk
- 毕业设计基于SSM的房屋租赁系统源【源码+lw+部署+讲解】
- 基于Android男装出口管理系统的app.rar
- 工资表生成工资条Excel模版
- 位运算、状态压缩、枚举子集汇总.html
- C++毕业设计快递分拣机器人系统源码+论文文件+资料.zip
- 锐龙处理器 体质分析工具,体质越好越稳定,越容易超频 tool1007/Win V/F
- IOS Swift3 四种单例模式详解及实例《PPT文档》
- Swin-Unet网络预训练模型,swin-tiny-patch-window7-224.pth
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈