初版代码

This commit is contained in:
sunbeam 2024-07-27 00:45:26 +08:00
parent 86991acfd8
commit 9fa365cee6
3 changed files with 123 additions and 18 deletions

File diff suppressed because one or more lines are too long

View File

@ -10,7 +10,8 @@
uint8_t MotorState[6],MotorStateReal[6];
uint16_t current1;
uint8_t OC1flag;
uint8_t act_step;
uint16_t OC_Count1=0;
uint8_t act_step[6];
void MotorValueInit(void)
{
@ -28,7 +29,7 @@ void setMotorState(uint8_t motorid,uint8_t act)
if (act <= ACT_XH && motorid < 6)
{
MotorState[motorid] = act;
act_step = 0;
act_step[motorid] = 0;
}
}
@ -59,20 +60,21 @@ void MotorCtrl(void)//10ms
OC1flag = 0;
break;
case ACT_XQ://先1再2
switch (act_step)
switch (act_step[0])
{
case 0:
MotorStateReal[MOTOR1] = ACT_XQ;
MotorStateReal[MOTOR2] = ACT_NOACT;
act_step = 1;
act_step[0] = 1;
break;
case 1:
if (OC1flag == 1)
{
OC1flag = 0;
OC_Count1 = 0;
MotorStateReal[MOTOR1] = ACT_NOACT;
MotorStateReal[MOTOR2] = ACT_XQ;
act_step = 2;
act_step[0] = 2;
}
break;
@ -80,9 +82,10 @@ void MotorCtrl(void)//10ms
if (OC1flag == 1)
{
OC1flag = 0;
OC_Count1 = 0;
MotorStateReal[MOTOR1] = ACT_NOACT;
MotorStateReal[MOTOR2] = ACT_NOACT;
act_step = 3;
act_step[0] = 3;
}
break;
@ -95,20 +98,21 @@ void MotorCtrl(void)//10ms
break;
case ACT_XH://先2再1
switch (act_step)
switch (act_step[0])
{
case 0:
MotorStateReal[MOTOR2] = ACT_XH;
MotorStateReal[MOTOR1] = ACT_NOACT;
act_step = 1;
act_step[0] = 1;
break;
case 1:
if (OC1flag == 1)
{
OC1flag = 0;
OC_Count1 = 0;
MotorStateReal[MOTOR2] = ACT_NOACT;
MotorStateReal[MOTOR1] = ACT_XH;
act_step = 2;
act_step[0] = 2;
}
break;
@ -116,9 +120,10 @@ void MotorCtrl(void)//10ms
if (OC1flag == 1)
{
OC1flag = 0;
OC_Count1 = 0;
MotorStateReal[MOTOR1] = ACT_NOACT;
MotorStateReal[MOTOR2] = ACT_NOACT;
act_step = 3;
act_step[0] = 3;
}
break;
@ -135,6 +140,74 @@ void MotorCtrl(void)//10ms
break;
}
switch (MotorState[1])
{
case ACT_NOACT:
/* code */
break;
case ACT_XQ:
switch (act_step[1])
{
case 0:
MotorStateReal[MOTOR1] = ACT_XH;
MotorStateReal[MOTOR2] = ACT_NOACT;
act_step[1] = 1;
break;
case 1:
if (OC1flag == 1)
{
OC1flag = 0;
OC_Count1 = 0;
MotorStateReal[MOTOR1] = ACT_NOACT;
MotorStateReal[MOTOR2] = ACT_XQ;
act_step[1] = 2;
}
break;
case 2:
if (OC1flag == 1)
{
OC1flag = 0;
OC_Count1 = 0;
MotorStateReal[MOTOR1] = ACT_NOACT;
MotorStateReal[MOTOR2] = ACT_NOACT;
act_step[1] = 3;
}
break;
case 3:
break;
default:
break;
}
break;
case ACT_XH:
switch (act_step[1])
{
case 0:
MotorStateReal[MOTOR2] = ACT_XH;
MotorStateReal[MOTOR1] = ACT_NOACT;
act_step[1] = 1;
break;
case 1:
if (OC1flag == 1)
{
OC1flag = 0;
OC_Count1 = 0;
MotorStateReal[MOTOR2] = ACT_NOACT;
MotorStateReal[MOTOR1] = ACT_NOACT;
act_step[1] = 2;
}
break;
case 2:
break;
case 3:
break;
default:
break;
}
default:
break;
}
MOTOR1Ctrl(MotorStateReal[MOTOR1]);
MOTOR2Ctrl(MotorStateReal[MOTOR2]);
//MOTOR1Ctrl(MotorState[MOTOR1]);
@ -144,7 +217,7 @@ uint16_t getOC_th(void)
{
if (MotorStateReal[MOTOR1] != ACT_NOACT)
{
return 100U;
return 60U;
}
else
{
@ -157,7 +230,7 @@ uint16_t getOC_th(void)
void CurrentDetecte(void)
{
static uint16_t OC_Count1=0;
uint16_t OC_th;
current1 = getAdval(ADCH_RLY1);
OC_th = getOC_th();

View File

@ -64,20 +64,21 @@ void keyLogicRelease(uint8_t keyno)
}
}
#define KEY_DELAY_TIME 40
#define KEY_DELAY_TIME 60
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};
static uint8_t KeyShort2Counter1,KeyShort2Counter2;
uint8_t keyval,i;
keyval = GetIOState(SIGID_KEY1);
if (keyval == 1 && keyflag[KEY1] == 0)
{
keydelay[KEY1]++;
if (keydelay[KEY1] > KEY_DELAY_TIME)//30ms
if (keydelay[KEY1] > KEY_DELAY_TIME)//300ms
{
keyflag[KEY1] = 1;
keydelay[KEY1] = KEY_DELAY_TIME;
@ -90,6 +91,18 @@ void keyScan(void)//5ms
{
keyLogicRelease(KEY1);
}
if (keydelay[KEY1] > 0 && keydelay[KEY1] < KEY_DELAY_TIME)
{
if (KeyShort2Counter1 == 0)//第一次按下
{
KeyShort2Counter1 = 100;
}
else
{
setMotorState(1,ACT_XQ);
}
}
keyflag[KEY1] = 0;
keydelay[KEY1] = 0;
}
@ -112,10 +125,31 @@ void keyScan(void)//5ms
{
keyLogicRelease(KEY2);
}
if (keydelay[KEY2] > 0 && keydelay[KEY2] < KEY_DELAY_TIME)
{
if (KeyShort2Counter2 == 0)//第一次按下
{
KeyShort2Counter2 = 100;
}
else
{
setMotorState(1,ACT_XH);
}
}
keyflag[KEY2] = 0;
keydelay[KEY2] = 0;
}
if (KeyShort2Counter1 > 0)
{
KeyShort2Counter1--;
}
if (KeyShort2Counter2 > 0)
{
KeyShort2Counter2--;
}
}
void AppTask(void)