Car/Peripheral/Src/control.c

190 lines
3.6 KiB
C
Raw Normal View History

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;
}
}