M12-04P/user/appTask.c

198 lines
3.9 KiB
C
Raw Normal View History

2024-01-09 15:50:14 +08:00
#include "r_cg_macrodriver.h"
#include "appTask.h"
#include "event.h"
#include "r_cg_port.h"
#include "r_cg_timer.h"
#include "r_cg_wdt.h"
#include "hwCtrl.h"
#include "r_cg_adc.h"
#include "r_cg_serial.h"
#include "PINdef.h"
#include "MotorCtrl.h"
extern uint16_t g_AdVal[3];
uint8_t txbuf[10];
void TxTask(void);
void HardWare_Init(void)
{
//时基初始化
R_TAU0_Channel0_Start();
//UART初始化
R_UART0_Start();
//AD 初始化
R_ADC_Start();
R_ADC_Set_OperationOn();
R_TAU0_Channel1_Start();
//电机初始化
MotorValueInit();
MOTOR1Ctrl(ACT_NOACT);
}
void Variable_Init(void)
{
txbuf[0] = 0xaa;
txbuf[1] = 0x55;
}
#define KEY1 0
#define KEY2 1
void keyLogic(uint8_t keyno)
{
switch (keyno)
{
case KEY1:
setMotorState(0,ACT_XQ);
break;
case KEY2:
setMotorState(0,ACT_XH);
break;
default:
break;
}
}
void keyLogicRelease(uint8_t keyno)
{
switch (keyno)
{
case KEY1:
setMotorState(0,ACT_NOACT);
break;
case KEY2:
setMotorState(0,ACT_NOACT);
break;
default:
break;
}
}
2024-01-10 16:48:16 +08:00
#define KEY_DELAY_TIME_30ms 10
#define KEY_DELAY_TIME_200ms 60
2024-01-09 15:50:14 +08:00
void keyScan(void)//5ms
{
static uint16_t keydelay[9]={0,0,0,0,0,0,0,0,0};
static uint8_t keyflag[9]={0,0,0,0,0,0,0,0,0};
static uint8_t keep_count[9]={0,0,0,0,0,0,0,0,0};
uint8_t keyval,i;
2024-01-10 16:48:16 +08:00
//向后
2024-01-09 15:50:14 +08:00
keyval = GetIOState(SIGID_KEY1);
2024-01-10 16:48:16 +08:00
if (keyval == 1 )//&& keyflag[KEY1] == 0
2024-01-09 15:50:14 +08:00
{
keydelay[KEY1]++;
2024-01-10 16:48:16 +08:00
if (keydelay[KEY1] > KEY_DELAY_TIME_30ms)//30ms
2024-01-09 15:50:14 +08:00
{
keyflag[KEY1] = 1;
}
2024-01-10 16:48:16 +08:00
if (keydelay[KEY1] > KEY_DELAY_TIME_200ms)//200ms
{
keyflag[KEY1] = 1;
keydelay[KEY1] = KEY_DELAY_TIME_200ms;
setMotorState(0,ACT_XQ);
}
2024-01-09 15:50:14 +08:00
}
else if (keyval == 0)
{
2024-01-10 16:48:16 +08:00
if (keyflag[KEY1] == 1 && keydelay[KEY1] < KEY_DELAY_TIME_200ms)
2024-01-09 15:50:14 +08:00
{
2024-01-10 16:48:16 +08:00
//自动
setMotorAutoXH();
}
if (keyflag[KEY1] == 1 && keydelay[KEY1] >= KEY_DELAY_TIME_200ms)
{
setMotorState(0,ACT_NOACT);
2024-01-09 15:50:14 +08:00
}
keyflag[KEY1] = 0;
keydelay[KEY1] = 0;
}
2024-01-10 16:48:16 +08:00
//向前
2024-01-09 15:50:14 +08:00
keyval = GetIOState(SIGID_KEY2);
2024-01-10 16:48:16 +08:00
if (keyval == 1 )//&& keyflag[KEY2] == 0
2024-01-09 15:50:14 +08:00
{
keydelay[KEY2]++;
2024-01-10 16:48:16 +08:00
if (keydelay[KEY2] > KEY_DELAY_TIME_30ms)//30ms
2024-01-09 15:50:14 +08:00
{
keyflag[KEY2] = 1;
2024-01-10 16:48:16 +08:00
}
if (keydelay[KEY2] > KEY_DELAY_TIME_200ms)//200ms
{
keyflag[KEY2] = 1;
keydelay[KEY2] = KEY_DELAY_TIME_200ms;
setMotorState(0,ACT_XH);
2024-01-09 15:50:14 +08:00
}
}
else if (keyval == 0)
{
2024-01-10 16:48:16 +08:00
if (keyflag[KEY2] == 1 && keydelay[KEY2] < KEY_DELAY_TIME_200ms)
{
//自动
setMotorAutoXQ();
}
if (keyflag[KEY2] == 1 && keydelay[KEY2] >= KEY_DELAY_TIME_200ms)
2024-01-09 15:50:14 +08:00
{
2024-01-10 16:48:16 +08:00
setMotorState(0,ACT_NOACT);
2024-01-09 15:50:14 +08:00
}
keyflag[KEY2] = 0;
keydelay[KEY2] = 0;
}
}
void AppTask(void)
{
static uint8_t ledno = 1,last = 0;
if (TimeBase1msFlag == 1)
{
TimeBase1msFlag = 0;
HallDetecte();
CurrentDetecte();
}
if (TimeBase5msFlag == 1)
{
TimeBase5msFlag = 0;
keyScan();
}
if (TimeBase10msFlag == 1)
{
TimeBase10msFlag = 0;
MotorCtrl();
}
if (TimeBase100msFlag == 1)
{
TimeBase100msFlag = 0;
TxTask();
R_WDT_Restart();
}
if (TimeBase1000msFlag == 1)
{
TimeBase1000msFlag = 0;
}
}
void TxTask(void)
{
uint16_t temp;
//txbuf[2] = GetIOState(SIGID_KEY1);
//txbuf[3] = GetIOState(SIGID_KEY2);
temp = getMotorLoc();
txbuf[2] = temp>>8;
txbuf[3] = temp&0xff;
txbuf[4] = GetIOState(SIGID_HALL1);
R_UART0_Send(txbuf,5);
}