📄 mirror.c
字号:
#include"mirror.h"
LIN_BYTE MsgSent[8];
LIN_BYTE MsgRecv[8];
LINDriverStatusType ret;
void mirror_command(LIN_BYTE ID){
LIN_PutMsg(ID,MsgSent);
LIN_RequestMsg(ID);
do
{
ret = LIN_DriverStatus();
}
while( ret & LIN_STATUS_PENDING );
}
void mirror_status(LIN_BYTE ID){
LIN_RequestMsg(ID);
do
{
ret = LIN_DriverStatus();
}
while( ret & LIN_STATUS_PENDING );
ret=LIN_MsgStatus(ID);
if(ret==LIN_OK){
LIN_GetMsg(ID,MsgRecv);
}
}
void mirror_recall(LIN_BYTE position_x,LIN_BYTE position_y,LIN_BYTE command_ID,LIN_BYTE status_ID){
MsgSent[1]=0x05;
MsgSent[6]=position_x;
MsgSent[7]=position_y;
mirror_old_x=position_x;
mirror_old_y=position_y;
mirror_command(command_ID);
mirror_timer=0;
TBCR_TBON=1;
do{
mirror_status(status_ID);
if(current_recall_stopped){
break;
}
if(mirror_timer>=3){
TBCR_TBON=0;
//判断镜子在x方向是否到达边缘
if(MsgRecv[2]>mirror_old_x) {
if ((MsgRecv[2]-mirror_old_x)<0x05) x_nochange=1;
}else if ((mirror_old_x-MsgRecv[2])<0x05) x_nochange=1;
//判断镜子在y方向是否到达边缘
if(MsgRecv[3]>mirror_old_y) {
if ((MsgRecv[3]-mirror_old_y)<0x05) y_nochange=1;
} else if((mirror_old_y-MsgRecv[3])<0x05) y_nochange=1;
if(x_nochange&&y_nochange){ //镜子到达边缘
x_nochange=0;
y_nochange=0;
break;
}else{
mirror_old_x=MsgRecv[2];
mirror_old_y=MsgRecv[3];
x_nochange=0;
y_nochange=0;
mirror_timer=0;
TBCR_TBON=1;
}
}
}while(MsgRecv[0]&0x04);
TBCR_TBON=0;
MsgSent[1]=0x06;
mirror_command(command_ID);
MsgSent[1]=0x00;
mirror_command(command_ID);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -