系统上电默认为关闭状态,需要按键或蓝牙开启播放器,播放器默认为单曲循环模式。
按键操作:
短按B3按键:播放或停止
短按B4按键:下一曲
短按B5按键:上一曲
短按B6按键:调高音量
短按B7按键:调低音量
手势控制:
检测到向上手势后插播“调高音量”后执行调高音量操作
检测到向下手势后插播“调低音量”后执行调低音量操作
检测到向左手势后插播“上一曲”后执行上一曲操作
检测到向右手势后插播“下一曲”后执行下一曲操作
检测到正确手势后板载LED点亮,动作执行完成后板载LED熄灭
OLED显示:
第一行显示手势
第二行显示执行的动作
蓝牙操作:
主机通过蓝牙模块连接手机后,蓝牙上发控制命令可控制播放器
*Play:开启播放
*Stop:停止播放
*VolU:调高音量
*VolD:调低音量
*Next:下一曲
*Last:上一曲
主要功能模块原理图:
电源时钟烧录接口:
单片机和按键输入电路:
其它主要电路:
资料获取地址:
https://shop272529339.taobao.com
初始化代码:
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
InitVar();
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_USART1_UART_Init();
MX_USART2_UART_Init();
/* USER CODE BEGIN 2 */
HAL_Delay(100);
SetUart1RxToInput();
HAL_Delay(50);
//uart1打开接收中断
HAL_UART_Receive_IT(&huart1, (uint8_t*)&uart1RecBuff, 1);
//初始化显示
InitOled();
InitOledDisp();
InitJQ8X00();
if(InitPAJ7620()==1)
{
// printf("%s", "PAJ7620 Init OK");
InitGesture();
}
else
{
// printf("%s", "PAJ7620 Init FAIL");
}
/* USER CODE END 2 */
读取手势数据:
void GetGestureData(void)
{
uint8_t statusTemp;
uint8_t dataTemp[2] = {0x00};
uint16_t gestureTemp;
//成功读取一次手势后需要完成整个操作才能读取下次手势操作
if(gestureState!=GESTURE_CHECK)
{
return;
}
//读取手势状态
statusTemp = GS_Read_nByte(PAJ_GET_INT_FLAG1, 2, &dataTemp[0]);
if(!statusTemp)
{
gestureTemp = (uint16_t)dataTemp[1]<<8 | dataTemp[0];
if(gestureTemp)
{
switch(gestureTemp)
{
case GES_UP: //调高音量
// printf("Up\r\n");
break; //向上
case GES_DOWN: //调低音量
// printf("Dowm\r\n");
break; //向下
case GES_LEFT: //上一曲
// printf("Left\r\n");
break; //向左
case GES_RIGHT: //下一曲
// printf("Right\r\n");
break; //向右
case GES_FORWARD:
// printf("Forward\r\n");
break; //向前
case GES_BACKWARD:
// printf("Backward\r\n");
break; //向后
case GES_CLOCKWISE:
// printf("Clockwise\r\n");
break; //顺时针
case GES_COUNT_CLOCKWISE:
// printf("AntiClockwise\r\n");
break; //逆时针
case GES_WAVE:
// printf("Wave\r\n");
break; //挥动
default:
break;
}
LED_ON();
gestureState = GESTURE_CONTROL;
gestureData = gestureTemp;
}
}
}
此设计提供的资料包含原理图PCB(包含PDF,AD,立创EDA三个版本),源代码,系统框图,主程序流程图,物料清单(包含使用到的器件手册),功能操作说明等。