250K-T8S
This commit is contained in:
508
User.c
Normal file
508
User.c
Normal file
@@ -0,0 +1,508 @@
|
||||
#include "MAIN.H"
|
||||
//can<61><6E>Ϣ
|
||||
UnInfCan UnInfCan_1 = {0};
|
||||
UnSwSample UnSwSample_1 = {0};
|
||||
UnSwOut UnSwOut_1 = {0};
|
||||
UnRemoteControlOutput UnRemoteControlOutput_1 = {0,0,0,0,0,0,0,0};//ң<><D2A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݷ<EFBFBD><DDB7><EFBFBD>
|
||||
UnRemoteControlOutput UnRemoteControlOutput_2 = {0,0,0,0,0,0,0,0};//ң<><D2A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݷ<EFBFBD><DDB7><EFBFBD>
|
||||
|
||||
SBusData sbus_data;
|
||||
|
||||
//CAN<41><4E><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
uword CntCan_1 = 0;
|
||||
bit FlgCan_1 = 0;
|
||||
|
||||
//<2F><>һ<EFBFBD>βɼ<CEB2><C9BC><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7><EFBFBD><EFBFBD>ָʾ
|
||||
bit FlgOneTime = 0;
|
||||
ubyte uart2RxFlag = 0;
|
||||
uword RgCanPerid = 50;
|
||||
|
||||
ubyte can_error_cnt = 0;
|
||||
ubyte can_error_flg = 0;
|
||||
|
||||
//PWM 20181227
|
||||
ubyte PwmH[16] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
|
||||
//-----------------------------------------------------------------------
|
||||
//RTC<54><43>ʱ<EFBFBD><CAB1>
|
||||
//-----------------------------------------------------------------------
|
||||
void RTCProcess(void)
|
||||
{
|
||||
//************************************************************************
|
||||
//////CAN<41><4E><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if(FlgCan_1){CntCan_1++;if(CntCan_1 >= RgCanPerid){FlgCan_1=0; CntCan_1=0;}}else{CntCan_1=0;}
|
||||
|
||||
//************************************************************************
|
||||
}
|
||||
|
||||
// SBus <20><><EFBFBD>ݽ<EFBFBD><DDBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
SBusData* parseSBusData(const uint8_t *input_data)
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD>16<31><36>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD>ÿ<EFBFBD><C3BF>ͨ<EFBFBD><CDA8>Ϊ11λ
|
||||
sbus_data.channels[0] = (input_data[1] | input_data[2] << 8) & 0x07FF;
|
||||
sbus_data.channels[1] = (input_data[2] >> 3 | input_data[3] << 5) & 0x07FF;
|
||||
sbus_data.channels[2] = (input_data[3] >> 6 | input_data[4] << 2 | input_data[5] << 10) & 0x07FF;
|
||||
sbus_data.channels[3] = (input_data[5] >> 1 | input_data[6] << 7) & 0x07FF;
|
||||
sbus_data.channels[4] = (input_data[6] >> 4 | input_data[7] << 4) & 0x07FF;
|
||||
sbus_data.channels[5] = (input_data[7] >> 7 | input_data[8] << 1 | input_data[9] << 9) & 0x07FF;
|
||||
|
||||
sbus_data.channels[6] = (input_data[9] >> 2 | input_data[10] << 6) & 0x07FF;
|
||||
sbus_data.channels[7] = (input_data[10] >> 5 | input_data[11] << 3) & 0x07FF;
|
||||
sbus_data.channels[8] = (input_data[12] | input_data[13] << 8) & 0x07FF;
|
||||
sbus_data.channels[9] = (input_data[13] >> 3 | input_data[14] << 5) & 0x07FF;
|
||||
sbus_data.channels[10] = (input_data[14] >> 6 | input_data[15] << 2 | input_data[15] << 10) & 0x07FF;
|
||||
sbus_data.channels[11] = (input_data[16] >> 1 | input_data[17] << 7) & 0x07FF;
|
||||
sbus_data.channels[12] = (input_data[17] >> 4 | input_data[18] << 4) & 0x07FF;
|
||||
sbus_data.channels[13] = (input_data[18] >> 7 | input_data[19] << 1 | input_data[20] << 9) & 0x07FF;
|
||||
sbus_data.channels[14] = (input_data[20] >> 2 | input_data[21] << 6) & 0x07FF;
|
||||
sbus_data.channels[15] = (input_data[21] >> 5 | input_data[22] << 3) & 0x07FF;
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD>ֽ<EFBFBD>
|
||||
sbus_data.flags = input_data[23];
|
||||
uart2RxFlag = 1;
|
||||
|
||||
// for(ubyte i=0;i<8;i++)
|
||||
// {
|
||||
// printf( "%d ",i);
|
||||
// printf( "%04x\r\n",sbus_data.channels[i]);
|
||||
// }
|
||||
// printf("%d\r\n",sbus_data.channels[0]);
|
||||
return &sbus_data;
|
||||
}
|
||||
|
||||
//can<61><6E><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
void CanErrorProcess(void)
|
||||
{
|
||||
ubyte ubNSRL;
|
||||
ubyte ubNSRH;
|
||||
ubyte ubResetLEC = 0x3F;
|
||||
//-------------------------------------------
|
||||
EA = 0;
|
||||
|
||||
CAN_pushAMRegs(); // push the CAN Access Mediator Registers
|
||||
SFR_PAGE(_su0, SST0); // switch to page 0
|
||||
|
||||
CAN_vWriteCANAddress(CAN_NSR0);
|
||||
CAN_vReadEN();
|
||||
ubNSRL = CAN_DATA0;
|
||||
ubNSRH = CAN_DATA1;
|
||||
if (ubNSRL & 0x20) // if ALERT
|
||||
{
|
||||
CAN_vInit();
|
||||
}
|
||||
if (ubNSRL & 0x07) // if LEC
|
||||
{
|
||||
ubResetLEC = 0x38;
|
||||
}
|
||||
//// Reset LEC, TXOK, RXOK, ALERT, EWRN, BOFF, LLE, LOE (if set)
|
||||
CAN_vWriteCANAddress(CAN_NSR0); // Addressing CAN_NSR0
|
||||
CAN_DATA0 = ~(ubNSRL & ubResetLEC); // load CAN_NSR0 status register[7-0]
|
||||
CAN_DATA1 = ~(ubNSRH); // load CAN_NSR0 status register[15-8]
|
||||
CAN_vWriteEN(D0_VALID+D1_VALID); // Data0 and Data1 are Valid for
|
||||
|
||||
SFR_PAGE(_su0, RST0); // restore the old SCU page
|
||||
CAN_popAMRegs(); // restore the CAN Access Mediator Registers
|
||||
|
||||
EA = 1;
|
||||
}
|
||||
|
||||
|
||||
void CanTransmit(ubyte index,ubyte *buf)
|
||||
{
|
||||
ubyte CanTransmitbuf[8] = {0,0,0,0,0,0,0,0};
|
||||
//----------------- --------
|
||||
CanTransmitbuf[2] = buf[0];
|
||||
CanTransmitbuf[3] = buf[1];
|
||||
CanTransmitbuf[0] = buf[2];
|
||||
CanTransmitbuf[1] = buf[3];
|
||||
CanTransmitbuf[6] = buf[4];
|
||||
CanTransmitbuf[7] = buf[5];
|
||||
CanTransmitbuf[4] = buf[6];
|
||||
CanTransmitbuf[5] = buf[7];
|
||||
|
||||
CAN_waitTransmit(index);//<2F><><EFBFBD><EFBFBD>ǰ<EFBFBD>ȴ<EFBFBD><C8B4><EFBFBD>һ֡<D2BB><D6A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ᶪ֡
|
||||
CAN_vLoadData(index, (ulong *)CanTransmitbuf);// װ<><D7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
CAN_vTransmit(index);
|
||||
}
|
||||
|
||||
typedef enum {
|
||||
STT_INIT_LIGHT, // <20><><EFBFBD>뱣<EFBFBD><EBB1A3><EFBFBD>ij<EFBFBD>ʼ״̬
|
||||
STT_STABLE, // <20>ȶ<EFBFBD>̬
|
||||
STT_BLINK_CHECK, // <20><>˸<EFBFBD><CBB8><EFBFBD><EFBFBD>
|
||||
STT_BLINKING // <20><>˸<EFBFBD><CBB8><EFBFBD><EFBFBD>
|
||||
} BlinkState;
|
||||
|
||||
typedef struct {
|
||||
BlinkState current_state;
|
||||
uint8_t last_input;
|
||||
uint16_t unified_timer; // ͳһ<CDB3><D2BB>ʱ<EFBFBD><CAB1>[7](@ref)
|
||||
uint8_t trans_count; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
uint8_t stable_type;
|
||||
} BlinkDetector;
|
||||
|
||||
BlinkDetector blink_detector = {0};
|
||||
|
||||
/* LED״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD>ͳһ<CDB3><D2BB>ʱ<EFBFBD><CAB1><EFBFBD>Ż<EFBFBD><C5BB>棩
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* ctx - ״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD>루<EFBFBD>豣֤<E8B1A3>ǿգ<C7BF>
|
||||
* current_input- <20><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƽ<EFBFBD><C6BD>0:<3A><> 1:<3A><><EFBFBD><EFBFBD>
|
||||
* output - <20><><EFBFBD><EFBFBD>״ָ̬<CCAC>루0:<3A><>Ч 1:<3A>ȶ<EFBFBD><C8B6><EFBFBD> 2:<3A>ȶ<EFBFBD><C8B6><EFBFBD> 3:<3A><>˸<EFBFBD><CBB8>
|
||||
* <20><><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD><EFBFBD><EFBFBD>
|
||||
* 1. <20><>һ<EFBFBD><D2BB>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD>[8](@ref)
|
||||
* 2. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[1](@ref)
|
||||
* 3. ״̬Ǩ<CCAC><C7A8>ԭ<EFBFBD>Ӳ<EFBFBD><D3B2><EFBFBD>[9](@ref)
|
||||
*/
|
||||
void detectLedState(BlinkDetector* ctx, uint8_t current_input, uint8_t* output)
|
||||
{
|
||||
*output = 0;
|
||||
|
||||
switch(ctx->current_state)
|
||||
{
|
||||
/* <20>ؼ<EFBFBD><D8BC><EFBFBD>ʼ״̬<D7B4><CCAC>ȷ<EFBFBD><C8B7><EFBFBD>״<EFBFBD><D7B4><EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
||||
case STT_INIT_LIGHT:
|
||||
{
|
||||
ctx->last_input = current_input; // ǿ<>Ƽ<EFBFBD>¼<EFBFBD><C2BC>ʼֵ
|
||||
ctx->stable_type = current_input ? 1 : 2;
|
||||
ctx->current_state = STT_STABLE; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȶ<EFBFBD>̬
|
||||
ctx->unified_timer = 0; // <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
|
||||
*output = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
case STT_STABLE:
|
||||
{
|
||||
if(current_input != ctx->last_input)
|
||||
{
|
||||
ctx->current_state = STT_BLINK_CHECK;
|
||||
ctx->trans_count = 1;
|
||||
ctx->unified_timer = 0;
|
||||
ctx->last_input = current_input;
|
||||
ctx->stable_type = current_input ? 1 : 2; // ͬ<><CDAC>״̬<D7B4><CCAC><EFBFBD><EFBFBD>[4](@ref)
|
||||
}
|
||||
else if(ctx->unified_timer >= STABLE_CONFIRM_TIME)
|
||||
{
|
||||
*output = ctx->stable_type;
|
||||
ctx->unified_timer = 0;
|
||||
ctx->stable_type = current_input ? 1 : 2; // <20><><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7>[10](@ref)
|
||||
}
|
||||
else
|
||||
{
|
||||
ctx->unified_timer++;
|
||||
*output = ctx->stable_type;
|
||||
}
|
||||
break;
|
||||
}
|
||||
/* <20><>˸<EFBFBD><CBB8><EFBFBD><EFBFBD>̬<EFBFBD><CCAC><EFBFBD><EFBFBD>ʱ<EFBFBD>䴰<EFBFBD><E4B4B0><EFBFBD><EFBFBD>ͳ<EFBFBD>Ƶ<EFBFBD>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
||||
case STT_BLINK_CHECK:
|
||||
{
|
||||
if(ctx->unified_timer >= BLINK_WINDOW) // <20>ﵽ<EFBFBD><EFB5BD><EFBFBD>ⴰ<EFBFBD><E2B4B0>ʱ<EFBFBD><CAB1>[8](@ref)
|
||||
{
|
||||
if(ctx->trans_count >= MIN_BLINKS) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><D0A1>˸<EFBFBD><CBB8><EFBFBD><EFBFBD>
|
||||
{
|
||||
ctx->current_state = STT_BLINKING;// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˸<EFBFBD><CBB8><EFBFBD><EFBFBD>̬
|
||||
ctx->unified_timer = 0; // <20><><EFBFBD>ó<EFBFBD>ʱ<EFBFBD><CAB1>ʱ<EFBFBD><CAB1>
|
||||
}
|
||||
else // δ<><CEB4><EFBFBD><EFBFBD>˸<EFBFBD><CBB8>ֵ
|
||||
{
|
||||
ctx->current_state = STT_STABLE; // <20><><EFBFBD><EFBFBD><EFBFBD>ȶ<EFBFBD>̬
|
||||
ctx->unified_timer = 0; // <20><>״̬<D7B4><CCAC><EFBFBD>ü<EFBFBD>ʱ<EFBFBD><CAB1>
|
||||
}
|
||||
}
|
||||
else // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڼ<EFBFBD><DABC><EFBFBD>
|
||||
{
|
||||
ctx->unified_timer++; // <20><><EFBFBD><EFBFBD><EFBFBD>ڼ<EFBFBD>ʱ<EFBFBD>ۼ<EFBFBD>
|
||||
if(current_input != ctx->last_input)
|
||||
{
|
||||
ctx->trans_count++; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ۼ<EFBFBD>
|
||||
ctx->last_input = current_input; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
/* <20><>˸<EFBFBD><CBB8><EFBFBD><EFBFBD>̬<EFBFBD><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˸<EFBFBD><EFBFBD><EEB6AF><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
||||
case STT_BLINKING:
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>仯<EFBFBD><E4BBAF><EFBFBD><EFBFBD>
|
||||
if(current_input != ctx->last_input)
|
||||
{
|
||||
ctx->unified_timer = 0; // <20><><EFBFBD>ó<EFBFBD>ʱ<EFBFBD><CAB1>ʱ<EFBFBD><CAB1>
|
||||
ctx->last_input = current_input;
|
||||
*output = 3; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˸״̬
|
||||
}
|
||||
else if(ctx->unified_timer >= BLINK_TIMEOUT)
|
||||
{
|
||||
ctx->current_state = STT_STABLE;
|
||||
ctx->stable_type = current_input ? 1 : 2; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[4](@ref)
|
||||
ctx->unified_timer = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
ctx->unified_timer ++; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȶ<EFBFBD>ʱ<EFBFBD>ۼƼ<DBBC>ʱ
|
||||
*output = 3; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˸״̬
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
default:break;
|
||||
}
|
||||
}
|
||||
|
||||
//SBUS<55><53>CAN<41><4E><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>
|
||||
void sbusCanDecode(void)
|
||||
{
|
||||
float SBUS2CANdecodeTemp = 0.0;
|
||||
|
||||
//----------------------------------------------
|
||||
if(uart2RxFlag == 1)
|
||||
{
|
||||
uart2RxFlag = 0;
|
||||
|
||||
//ת<><D7AA>
|
||||
SBUS2CANdecodeTemp = (float)(sbus_data.channels[0]);
|
||||
SBUS2CANdecodeTemp = (DF_ZeroValue - SBUS2CANdecodeTemp)*23;//<2F><>Ҫ<EFBFBD>任һ<E4BBBB>·<EFBFBD><C2B7>ţ<EFBFBD><C5A3><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
DF_Curvature = (int16_t)SBUS2CANdecodeTemp;//<2F><><EFBFBD><EFBFBD>
|
||||
if( (DF_Curvature > (-50)) && (DF_Curvature < 50) ) //<2F><><EFBFBD>ӻ<EFBFBD>0<EFBFBD><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>⡣
|
||||
{
|
||||
DF_Curvature = 0;
|
||||
}
|
||||
|
||||
//ת<><D7AA>
|
||||
SBUS2CANdecodeTemp = (float)(sbus_data.channels[1]);
|
||||
SBUS2CANdecodeTemp = (DF_ZeroValue - SBUS2CANdecodeTemp)*2.3;//<2F><>Ҫ<EFBFBD>任һ<E4BBBB>·<EFBFBD><C2B7>ţ<EFBFBD><C5A3><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
DF_Speed = (int16_t)SBUS2CANdecodeTemp;//ת<><D7AA>
|
||||
if( (DF_Speed > (-50)) && (DF_Speed < 50) ) //<2F><><EFBFBD>ӻ<EFBFBD>0<EFBFBD><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>⡣
|
||||
{
|
||||
DF_Speed = 0;
|
||||
}
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD>
|
||||
SBUS2CANdecodeTemp = (float)(sbus_data.channels[7]);
|
||||
SBUS2CANdecodeTemp = (DF_ZeroValue - SBUS2CANdecodeTemp);//<2F><>Ҫ<EFBFBD>任һ<E4BBBB>·<EFBFBD><C2B7>ţ<EFBFBD><C5A3><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
DF_Reserve = (int16_t)SBUS2CANdecodeTemp;//ת<><D7AA>
|
||||
if( (DF_Reserve > (-50)) && (DF_Reserve < 50) ) //<2F><><EFBFBD>ӻ<EFBFBD>0<EFBFBD><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>⡣
|
||||
{
|
||||
DF_Reserve = 0;
|
||||
}
|
||||
|
||||
|
||||
//SwA
|
||||
if(sbus_data.channels[1] >= 1700)//<2F><><EFBFBD><EFBFBD>
|
||||
{
|
||||
DF_SwA = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
DF_SwA = 0;
|
||||
}
|
||||
|
||||
//SwB
|
||||
if(sbus_data.channels[6] >= 1700)//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
{
|
||||
DF_SwB = 2;
|
||||
}
|
||||
else if(sbus_data.channels[6] <= 250)//<2F>ڶ<EFBFBD><DAB6><EFBFBD>
|
||||
{
|
||||
DF_SwB = 0;
|
||||
}
|
||||
else//<2F><>һ<EFBFBD><D2BB>
|
||||
{
|
||||
DF_SwB = 1;
|
||||
}
|
||||
|
||||
//SwC
|
||||
if(sbus_data.channels[4] >= 1700)//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
{
|
||||
DF_SwC = 2;
|
||||
}
|
||||
else if(sbus_data.channels[4] <= 250)//<2F>ڶ<EFBFBD><DAB6><EFBFBD>
|
||||
{
|
||||
DF_SwC = 0;
|
||||
}
|
||||
else//<2F><>һ<EFBFBD><D2BB>
|
||||
{
|
||||
DF_SwC = 1;
|
||||
}
|
||||
|
||||
//SwD
|
||||
if(sbus_data.channels[5] >= 1700)//<2F><><EFBFBD><EFBFBD>
|
||||
{
|
||||
DF_SwD = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
DF_SwD = 0;
|
||||
}
|
||||
|
||||
if(0 == sbus_data.flags)//23ͨ<33><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ϊ0<CEAA><30>־<EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
{
|
||||
DF_RCHSta = 1;//<2F>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD><EFBFBD>
|
||||
}
|
||||
else
|
||||
{
|
||||
DF_RCHSta = 0;//<2F>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD><EFBFBD>
|
||||
}
|
||||
|
||||
SBUS2CANdecodeTemp = (float)(sbus_data.channels[2]);
|
||||
UnRemoteControlOutput_2.bit_data.speed = (int16_t)SBUS2CANdecodeTemp;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
SBUS2CANdecodeTemp = (float)(sbus_data.channels[3]);
|
||||
UnRemoteControlOutput_2.bit_data.curvature = (int16_t)SBUS2CANdecodeTemp;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
}
|
||||
|
||||
UnRemoteControlOutput_2.bit_data.switch_a = P1_2;//
|
||||
UnRemoteControlOutput_2.bit_data.switch_d = P1_3;//
|
||||
}
|
||||
|
||||
|
||||
//CAN<41><4E><EFBFBD>ͽ<EFBFBD><CDBD><EFBFBD>
|
||||
void CanRXTX(void)
|
||||
{
|
||||
stCAN_SWObj StrCanRx = {0};
|
||||
uword tmp = 0;
|
||||
ubyte i = 0,j = 0;
|
||||
ubyte sbus_temp[2] = {0,0};
|
||||
|
||||
static ubyte match_freq_sta = 0;
|
||||
static uword match_freq_cnt = 0;
|
||||
static uword match_freq_time = 0;
|
||||
//------------------------------------
|
||||
if(CAN_ubNewData(DF_SwRx))
|
||||
{
|
||||
CAN_vGetMsgObj(DF_SwRx, &StrCanRx);
|
||||
|
||||
UnInfCan_1.ArrData.ArrRX[0][3] = StrCanRx.ulDATAL.ubDB[0];
|
||||
UnInfCan_1.ArrData.ArrRX[0][2] = StrCanRx.ulDATAL.ubDB[1];
|
||||
UnInfCan_1.ArrData.ArrRX[0][1] = StrCanRx.ulDATAL.ubDB[2];
|
||||
UnInfCan_1.ArrData.ArrRX[0][0] = StrCanRx.ulDATAL.ubDB[3];
|
||||
UnInfCan_1.ArrData.ArrRX[0][7] = StrCanRx.ulDATAH.ubDB[0];
|
||||
UnInfCan_1.ArrData.ArrRX[0][6] = StrCanRx.ulDATAH.ubDB[1];
|
||||
UnInfCan_1.ArrData.ArrRX[0][5] = StrCanRx.ulDATAH.ubDB[2];
|
||||
UnInfCan_1.ArrData.ArrRX[0][4] = StrCanRx.ulDATAH.ubDB[3];
|
||||
|
||||
CAN_vReleaseObj(DF_SwRx);
|
||||
}
|
||||
|
||||
if(CAN_ubNewData(DF_SwRxPwm))
|
||||
{
|
||||
// CAN_vGetMsgObj(DF_SwRxPwm, &StrCanRx);
|
||||
|
||||
// UnInfCan_1.ArrData.ArrRX[1][2] = StrCanRx.ulDATAL.ubDB[0];
|
||||
// UnInfCan_1.ArrData.ArrRX[1][3] = StrCanRx.ulDATAL.ubDB[1];
|
||||
// UnInfCan_1.ArrData.ArrRX[1][0] = StrCanRx.ulDATAL.ubDB[2];
|
||||
// UnInfCan_1.ArrData.ArrRX[1][1] = StrCanRx.ulDATAL.ubDB[3];
|
||||
// UnInfCan_1.ArrData.ArrRX[1][6] = StrCanRx.ulDATAH.ubDB[0];
|
||||
// UnInfCan_1.ArrData.ArrRX[1][7] = StrCanRx.ulDATAH.ubDB[1];
|
||||
// UnInfCan_1.ArrData.ArrRX[1][4] = StrCanRx.ulDATAH.ubDB[2];
|
||||
// UnInfCan_1.ArrData.ArrRX[1][5] = StrCanRx.ulDATAH.ubDB[3];
|
||||
|
||||
// CAN_vReleaseObj(DF_SwRxPwm);
|
||||
//// //<2F><><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1>浽PWM<57><4D><EFBFBD>ݽṹ<DDBD><E1B9B9>20181227
|
||||
//// PwmH[0 ] = (ubyte)UnInfCan_1.BitData.Pwm_01;
|
||||
//// PwmH[1 ] = (ubyte)UnInfCan_1.BitData.Pwm_02;
|
||||
//// PwmH[2 ] = (ubyte)UnInfCan_1.BitData.Pwm_03;
|
||||
//// PwmH[3 ] = (ubyte)UnInfCan_1.BitData.Pwm_04;
|
||||
//// PwmH[4 ] = (ubyte)UnInfCan_1.BitData.Pwm_05;
|
||||
//// PwmH[5 ] = (ubyte)UnInfCan_1.BitData.Pwm_06;
|
||||
//// PwmH[6 ] = (ubyte)UnInfCan_1.BitData.Pwm_07;
|
||||
//// PwmH[7 ] = (ubyte)UnInfCan_1.BitData.Pwm_08;
|
||||
//// PwmH[8 ] = (ubyte)UnInfCan_1.BitData.Pwm_09;
|
||||
//// PwmH[9 ] = (ubyte)UnInfCan_1.BitData.Pwm_10;
|
||||
//// PwmH[10] = (ubyte)UnInfCan_1.BitData.Pwm_11;
|
||||
//// PwmH[11] = (ubyte)UnInfCan_1.BitData.Pwm_12;
|
||||
//// PwmH[12] = (ubyte)UnInfCan_1.BitData.Pwm_13;
|
||||
//// PwmH[13] = (ubyte)UnInfCan_1.BitData.Pwm_14;
|
||||
//// PwmH[14] = (ubyte)UnInfCan_1.BitData.Pwm_15;
|
||||
//// PwmH[15] = (ubyte)UnInfCan_1.BitData.Pwm_16;
|
||||
|
||||
}
|
||||
|
||||
//50ms<6D><73><EFBFBD><EFBFBD>һ֡
|
||||
if(!FlgCan_1)
|
||||
{
|
||||
FlgCan_1 = 1;
|
||||
|
||||
sbus_temp[0] = P1_3;
|
||||
|
||||
// sbus_temp[1] = 3;
|
||||
detectLedState(&blink_detector, sbus_temp[0], &sbus_temp[1]);
|
||||
// UnRemoteControlOutput_2.bit_data.enable = blink_detector.current_state;//
|
||||
// UnRemoteControlOutput_2.bit_data.reserve1 = sbus_temp[1];
|
||||
|
||||
|
||||
if( (MATCH_CMD == UnInfCan_1.ArrData.ArrRX[0][0]) || (CHANGE_CMD == UnInfCan_1.ArrData.ArrRX[0][0]) )//<2F><>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD>л<EFBFBD>
|
||||
{
|
||||
if(MATCH_CMD == UnInfCan_1.ArrData.ArrRX[0][0])//<2F><>Ƶ
|
||||
{
|
||||
match_freq_time = MATCH_TIME;
|
||||
}
|
||||
else
|
||||
{
|
||||
match_freq_time = CHANGE_TIME;
|
||||
}
|
||||
|
||||
switch(match_freq_sta)
|
||||
{
|
||||
case 0:
|
||||
if(match_freq_cnt >= match_freq_time)//ʱ<><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7>
|
||||
{
|
||||
SwOut01 = 0;//ȡ<><C8A1><EFBFBD><EFBFBD>Ƶ
|
||||
match_freq_sta = 1;
|
||||
match_freq_cnt = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
SwOut01 = 1;//<2F><>Ƶָ<C6B5><D6B8>
|
||||
match_freq_sta = 0;
|
||||
match_freq_cnt ++;
|
||||
}
|
||||
break;
|
||||
|
||||
case 1:
|
||||
if(match_freq_cnt >= MATCH_WAIT_TIME)//
|
||||
{
|
||||
SwOut01 = 0;//ȡ<><C8A1><EFBFBD><EFBFBD>Ƶ
|
||||
match_freq_sta = 0;
|
||||
match_freq_cnt = 0;
|
||||
UnInfCan_1.ArrData.ArrRX[0][0] = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
SwOut01 = 0;//<2F><>Ƶָ<C6B5><D6B8>
|
||||
match_freq_sta = 1;
|
||||
match_freq_cnt ++;
|
||||
}
|
||||
break;
|
||||
default:;
|
||||
}
|
||||
}
|
||||
|
||||
CanTransmit(DF_SwTx,(ubyte *)&UnRemoteControlOutput_1.arr[0]);
|
||||
CanTransmit(DF_SwTx1,(ubyte *)&UnRemoteControlOutput_2.arr[0]);
|
||||
}
|
||||
|
||||
if( (0x40 == can_error_cnt) || (0x80 == can_error_cnt) )//20250625<32>ж<EFBFBD><D0B6>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߴ<EFBFBD><DFB4><EFBFBD>
|
||||
{
|
||||
can_error_flg = can_error_cnt;
|
||||
CAN_vInit();
|
||||
can_error_cnt = 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user