2024-07-12 22:59:46 +08:00
|
|
|
#include "bluetooth.h"
|
|
|
|
#include "usart.h"
|
|
|
|
#include "control.h"
|
2024-07-13 15:59:44 +08:00
|
|
|
#include <stdio.h>
|
|
|
|
#include <string.h>
|
2024-07-15 12:41:34 +08:00
|
|
|
#include "syscalls.h"
|
2024-07-12 22:59:46 +08:00
|
|
|
|
|
|
|
#define BUFFER_SIZE 100
|
|
|
|
#define MESSAGE_SIZE 19
|
|
|
|
#define CMD_NUM 9
|
|
|
|
|
2024-07-15 12:41:34 +08:00
|
|
|
static int8_t rxBuffer[BUFFER_SIZE], txBuffer[10000];
|
|
|
|
static uint16_t txLen;
|
2024-07-12 22:59:46 +08:00
|
|
|
static uint8_t cmdIndex;
|
|
|
|
|
|
|
|
void BLUETOOTH_Init(void)
|
|
|
|
{
|
2024-07-13 15:59:44 +08:00
|
|
|
HAL_UARTEx_ReceiveToIdle_DMA(&huart2, rxBuffer, 100);
|
2024-07-15 12:41:34 +08:00
|
|
|
// HAL_UART_Receive_IT(&huart2, txBuffer + txLen, 1);
|
2024-07-12 22:59:46 +08:00
|
|
|
}
|
|
|
|
|
2024-07-15 12:41:34 +08:00
|
|
|
// void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
|
|
|
|
// {
|
|
|
|
// if (huart == &huart2)
|
|
|
|
// {
|
|
|
|
// ++txLen;
|
|
|
|
// if (txLen == 10000)
|
|
|
|
// txLen = 0;
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
|
2024-07-13 15:59:44 +08:00
|
|
|
void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size)
|
2024-07-12 22:59:46 +08:00
|
|
|
{
|
2024-07-13 15:59:44 +08:00
|
|
|
if (huart == &huart2 && rxBuffer[0] == '$' && rxBuffer[Size - 1] == '#')
|
2024-07-12 22:59:46 +08:00
|
|
|
{
|
2024-07-15 12:41:34 +08:00
|
|
|
rxBuffer[Size] = '\0';
|
2024-07-13 15:59:44 +08:00
|
|
|
// 通用协议
|
2024-07-15 12:41:34 +08:00
|
|
|
if (mode == MODE_REMOTE && rxBuffer[2] == ',')
|
2024-07-12 22:59:46 +08:00
|
|
|
{
|
2024-07-13 15:59:44 +08:00
|
|
|
cmdIndex = 0;
|
|
|
|
for (uint8_t i = 1; i < MESSAGE_SIZE; i += 2)
|
|
|
|
if (rxBuffer[i] == '0')
|
|
|
|
++cmdIndex;
|
|
|
|
else
|
|
|
|
break;
|
|
|
|
if (cmdIndex == CMD_NUM)
|
|
|
|
cmdIndex = 0;
|
2024-07-15 12:41:34 +08:00
|
|
|
CONTROL_CommonCmd(cmdIndex, rxBuffer[cmdIndex * 2 + 1] - '0');
|
2024-07-12 22:59:46 +08:00
|
|
|
}
|
2024-07-13 15:59:44 +08:00
|
|
|
else
|
2024-07-12 22:59:46 +08:00
|
|
|
{
|
2024-07-13 15:59:44 +08:00
|
|
|
static uint16_t num[6];
|
|
|
|
|
2024-07-15 12:41:34 +08:00
|
|
|
// 模式选择
|
|
|
|
if (rxBuffer[5] == 'M')
|
|
|
|
{
|
2024-07-13 15:59:44 +08:00
|
|
|
sscanf(rxBuffer + 5, "%*4s%c%c", num, num + 1);
|
|
|
|
CONTROL_Mode(num[0] - '0', num[1] - '0');
|
|
|
|
}
|
2024-07-15 12:41:34 +08:00
|
|
|
else if (mode == MODE_REMOTE)
|
|
|
|
switch (rxBuffer[5])
|
|
|
|
{
|
|
|
|
// 机械手
|
|
|
|
case 'S':
|
|
|
|
break;
|
|
|
|
// 舵机云台
|
|
|
|
case 'P':
|
|
|
|
break;
|
|
|
|
// 七彩灯
|
|
|
|
case 'C':
|
|
|
|
sscanf(rxBuffer + 5, "%*3s%hu,%*3s%hu,%*3s%hu", num, num + 1, num + 2);
|
|
|
|
CONTROL_RGB(num[0], num[1], num[2]);
|
|
|
|
break;
|
|
|
|
}
|
2024-07-12 22:59:46 +08:00
|
|
|
}
|
2024-07-15 12:41:34 +08:00
|
|
|
// my_printf(&huart2, rxBuffer);
|
|
|
|
// strcpy(txBuffer + txLen, rxBuffer);
|
|
|
|
// if (txLen + Size >= 9999)
|
|
|
|
// txLen = 0;
|
|
|
|
// else
|
|
|
|
// txLen += Size;
|
|
|
|
// txBuffer[txLen] = '\0';
|
|
|
|
// if (strcmp(rxBuffer, "$send#") == 0)
|
|
|
|
// my_printf(&huart2, txBuffer);
|
2024-07-13 15:59:44 +08:00
|
|
|
BLUETOOTH_Init();
|
2024-07-12 22:59:46 +08:00
|
|
|
}
|
|
|
|
}
|