2024-07-15 20:10:12 +08:00
|
|
|
#include "control.h"
|
|
|
|
#include "hcsr04.h"
|
|
|
|
#include "led.h"
|
|
|
|
#include "motor.h"
|
|
|
|
|
|
|
|
#define CMD_MOVE 0
|
|
|
|
#define CMD_ROTATE 1
|
|
|
|
#define CMD_BUZZER 2
|
|
|
|
#define CMD_SPEED 3
|
|
|
|
// #define CMD_SHAKE 4
|
|
|
|
// #define CMD_SING 5
|
|
|
|
#define CMD_LED 6
|
|
|
|
// #define CMD_FIRE 7
|
|
|
|
// #define CMD_SERVO 8
|
|
|
|
|
|
|
|
// 小车默认速度
|
|
|
|
static int8_t speed = 20;
|
|
|
|
uint8_t mode = MODE_REMOTE;
|
|
|
|
|
|
|
|
void carMove(uint8_t state);
|
|
|
|
void carSpin(uint8_t state);
|
|
|
|
void callBuzzer(uint8_t state);
|
|
|
|
void setSpeed(uint8_t state);
|
|
|
|
// void shake(uint8_t state);
|
|
|
|
// void sing(uint8_t state);
|
|
|
|
void setLed(uint8_t state);
|
|
|
|
// void fire(uint8_t state);
|
|
|
|
// void servo(uint8_t state);
|
|
|
|
|
|
|
|
void CONTROL_CommonCmd(uint8_t type, uint8_t state)
|
|
|
|
{
|
|
|
|
switch (type)
|
|
|
|
{
|
|
|
|
case CMD_MOVE:
|
|
|
|
carMove(state);
|
|
|
|
break;
|
|
|
|
case CMD_ROTATE:
|
|
|
|
carSpin(state);
|
|
|
|
break;
|
|
|
|
case CMD_BUZZER:
|
|
|
|
callBuzzer(state);
|
|
|
|
break;
|
|
|
|
case CMD_SPEED:
|
|
|
|
setSpeed(state);
|
|
|
|
break;
|
|
|
|
// case CMD_SHAKE:
|
|
|
|
// break;
|
|
|
|
// case CMD_SING:
|
|
|
|
// break;
|
|
|
|
case CMD_LED:
|
|
|
|
setLed(state);
|
|
|
|
break;
|
|
|
|
// case CMD_FIRE:
|
|
|
|
// break;
|
|
|
|
// case CMD_SERVO:
|
|
|
|
// break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void CONTROL_RGB(uint8_t r, uint8_t g, uint8_t b)
|
|
|
|
{
|
|
|
|
LED_Start(LED_ALL);
|
|
|
|
LED_SetDuty(r, g, b);
|
|
|
|
}
|
|
|
|
|
|
|
|
void CONTROL_Mode(uint8_t new_mode, uint8_t state)
|
|
|
|
{
|
|
|
|
if (state == 0)
|
|
|
|
{
|
|
|
|
mode = MODE_STOP;
|
|
|
|
MOTOR_Stop();
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
mode = new_mode;
|
|
|
|
switch (new_mode)
|
|
|
|
{
|
|
|
|
case MODE_REMOTE:
|
|
|
|
speed = 20;
|
|
|
|
MOTOR_SetDuty(speed, speed);
|
2024-07-17 22:14:32 +08:00
|
|
|
MOTOR_Init();
|
2024-07-15 20:10:12 +08:00
|
|
|
break;
|
|
|
|
case MODE_PATROL:
|
|
|
|
break;
|
|
|
|
case MODE_AVOID:
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
mode = MODE_STOP;
|
|
|
|
MOTOR_Stop();
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void carMove(uint8_t state)
|
|
|
|
{
|
|
|
|
if (state == 0)
|
|
|
|
MOTOR_Stop();
|
|
|
|
else
|
|
|
|
{
|
2024-07-17 22:14:32 +08:00
|
|
|
MOTOR_Init();
|
2024-07-15 20:10:12 +08:00
|
|
|
switch (state)
|
|
|
|
{
|
|
|
|
// 前进
|
|
|
|
case 1:
|
|
|
|
MOTOR_SetDuty(speed, speed);
|
|
|
|
break;
|
|
|
|
// 后退
|
|
|
|
case 2:
|
|
|
|
MOTOR_SetDuty(-speed, -speed);
|
|
|
|
break;
|
|
|
|
// 左转
|
|
|
|
case 3:
|
|
|
|
MOTOR_SetDuty(0, speed);
|
|
|
|
break;
|
|
|
|
// 右转
|
|
|
|
case 4:
|
|
|
|
MOTOR_SetDuty(speed, 0);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void carSpin(uint8_t state)
|
|
|
|
{
|
|
|
|
if (state == 1)
|
|
|
|
MOTOR_SetDuty(speed, -speed);
|
|
|
|
else if (state == 2)
|
|
|
|
MOTOR_SetDuty(-speed, speed);
|
|
|
|
}
|
|
|
|
|
|
|
|
void callBuzzer(uint8_t state)
|
|
|
|
{
|
|
|
|
HAL_GPIO_WritePin(FM_K2_POWERC_GPIO_Port, FM_K2_POWERC_Pin, GPIO_PIN_RESET);
|
|
|
|
HAL_Delay(200);
|
|
|
|
HAL_GPIO_WritePin(FM_K2_POWERC_GPIO_Port, FM_K2_POWERC_Pin, GPIO_PIN_SET);
|
|
|
|
}
|
|
|
|
|
|
|
|
void setSpeed(uint8_t state)
|
|
|
|
{
|
|
|
|
if (state == 1)
|
|
|
|
speed += 10;
|
|
|
|
else if (state == 2)
|
|
|
|
speed -= 10;
|
|
|
|
if (speed > 100)
|
|
|
|
speed = 100;
|
|
|
|
else if (speed < 20)
|
|
|
|
speed = 20;
|
|
|
|
}
|
|
|
|
|
|
|
|
void setLed(uint8_t state)
|
|
|
|
{
|
|
|
|
LED_Start(LED_ALL);
|
|
|
|
switch (state)
|
|
|
|
{
|
|
|
|
// 白
|
|
|
|
case 1:
|
|
|
|
LED_SetDuty(255, 255, 255);
|
|
|
|
break;
|
|
|
|
// 红
|
|
|
|
case 2:
|
|
|
|
LED_SetDuty(255, 0, 0);
|
|
|
|
break;
|
|
|
|
// 绿
|
|
|
|
case 3:
|
|
|
|
LED_SetDuty(0, 255, 0);
|
|
|
|
break;
|
|
|
|
// 蓝
|
|
|
|
case 4:
|
|
|
|
LED_SetDuty(0, 0, 255);
|
|
|
|
break;
|
|
|
|
// 青
|
|
|
|
case 5:
|
|
|
|
LED_SetDuty(0, 255, 255);
|
|
|
|
break;
|
|
|
|
// 品红
|
|
|
|
case 6:
|
|
|
|
LED_SetDuty(255, 0, 255);
|
|
|
|
break;
|
|
|
|
// 黄
|
|
|
|
case 7:
|
|
|
|
LED_SetDuty(255, 255, 0);
|
|
|
|
break;
|
|
|
|
// 关
|
|
|
|
default:
|
|
|
|
LED_SetDuty(0, 0, 0);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|