系统功能:
系统操作说明:
上电后OLED显示 “欢迎使用电视支架系统请稍后”,两秒后进入正常界面显示
第一页面第一行显示 Mode:Key,
第二行显示 TV:Middle
短按B5按键可控制步进电机左转,
第二行显示 TV:Left 后正常显示 TV:Middle
短按B6按键可控制步进电机右转,
第二行显示 TV:Right 后正常显示 TV:Middle
短按B4按键可切换到第二页面显示。
第二页面第一行显示 Mode:IR,
第二行显示 TV:Middle
短按遥控器按键“+”可控制步进电机左转,第二行显示 TV:Left 后正常显示 TV:Middle
短按遥控器按键“-”可控制步进电机右转,第二行显示 TV:Right 后正常显示 TV:Middle
短按B4按键可切换到第三页面显示。
第三页面第一行显示 Mode:Gesture,
第二行显示 TV:Middle
手掌在PAJ7620手势模块上方左滑可控制步进电机左转,第二行显示 TV:Left 后正常显示 TV:Middle手掌在PAJ7620手势模块上方右滑可控制步进电机右转,第二行显示 TV:Right 后正常显示 TV:Middle短按B4按键可切换到第四页面显示。
第四页面第一行显示 Mode:Gyro,
第二行显示 TV:Middle,
第三行显示pitch角度,
第四行显示Dir方向。
第四行显示 Dir:Left时,倾斜MPU6050模块后恢复可控制步进电机左转,第二行显示 TV:Left 后正常显示 TV:Middle短按B5按键, 第四行显示 Dir:Right 倾斜MPU6050模块后恢复可控制步进电机右转,第二行显示 TV:Right 后正常显示 TV:Middle
短按B4按键可切换到第一页面显示。
主要功能模块原理图:
电源时钟烧录接口:
单片机和按键输入电路:
传感器电路:
资料获取地址
系统主要功能模块代码
初始化代码:
/* 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();
MX_USART3_UART_Init();
/* USER CODE BEGIN 2 */
HAL_Delay(100);
SetUart1RxToInput();
HAL_Delay(50);
//uart2打开接收中断
HAL_UART_Receive_IT(&huart2, (uint8_t*)&uart2RecBuff, 1);
//uart3打开接收中断
HAL_UART_Receive_IT(&huart3, (uint8_t*)&uart3RecBuff, 1);
//初始化手势模块
if(InitPAJ7620()==1)
{
printf("%s", "PAJ7620 Init OK");
InitGesture();
}
else
{
printf("%s", "PAJ7620 Init FAIL");
}
//初始化显示
InitOled();
InitOledDisp();
/* USER CODE END 2 */
系统显示:
//处理OLED显示内容
void SystemDisplay(void)
{
char textBuf[20];
static uint8_t dispCnt = 0;
dispCnt++;
if(dispCnt>=DISP_UPDATE_INTER)
{
dispCnt = 0;
//显示第一行
if(sysMode==KEY_MODE)
{
sprintf(textBuf, "Mode:Key ");
}
else if(sysMode==IR_MODE)
{
sprintf(textBuf, "Mode:IR ");
}
else if(sysMode==GESTURE_MODE)
{
sprintf(textBuf, "Mode:Gesture ");
}
else if(sysMode==MPU6050_MODE)
{
sprintf(textBuf, "Mode:Gyro ");
}
OledShowString(0, 0, (uint8_t*)textBuf, OLED_FONT_8X16);
//显示第二行
if(turnLeft==true)
{
sprintf(textBuf, "TV:Left ");
}
else if(turnRight==true)
{
sprintf(textBuf, "TV:Right ");
}
else
{
sprintf(textBuf, "TV:Middle ");
}
OledShowString(0, 2, (uint8_t*)textBuf, OLED_FONT_8X16);
//显示第三行
if(sysMode==MPU6050_MODE)
{
sprintf(textBuf, "pitch:%6.1f ", pitchVal);
}
else
{
sprintf(textBuf, " ");
}
OledShowString(0, 4, (uint8_t*)textBuf, OLED_FONT_8X16);
//显示第四行
if(sysMode==MPU6050_MODE)
{
if(mpu6050Dir==false)
{
sprintf(textBuf, "Dir:Left ");
}
else
{
sprintf(textBuf, "Dir:Right ");
}
}
else
{
sprintf(textBuf, " ");
}
OledShowString(0, 6, (uint8_t*)textBuf, OLED_FONT_8X16);
}
}
此设计提供的资料包含原理图PCB(包含PDF,AD,立创EDA三个版本),源代码,系统框图,主程序流程图,物料清单(包含使用到的器件手册),功能操作说明等。