#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); MOTOR_Start(); 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 { MOTOR_Start(); 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; } }