int main(void)
{
float ole_roll,diff_roll_value;
USER_DATA_t time_infor;
char str1[10];
//variables to calculate the on-board LED brightness that reflects the heartbeats
uint32_t un_min, un_max, un_prev_data;
int i;
int32_t n_brightness;
float f_temp;
u8 temp_num=0;
u8 temp[6];
u8 str[100];
u8 dis_hr=0,dis_spo2=0;
/* Configure the Priority Group to 2 bits */
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
OLED_Init(); //初始化OLED
OLED_Clear(); //OLED 清屏
delay_ms(500);
USART1_Config(); //串口1(电脑)配置
Bluetooth_Init(); //蓝牙初始化
Rtc_Init(); //RTC初始化(用于显示时间和日期、闹钟)
Beep_Init(); //闹钟提醒
LED_Init(); //LED灯初始化
MPU_Init(); //MPU6050初始化(用于抬手唤醒屏幕、计步)
TIM4_Int_Init(5000,8400);//500ms
KEY_EXIT_Init();
delay_ms(1863);
while(mpu_dmp_init())
{
printf("MPU6050 ERROR \r\n");
delay_ms(500);
}
GPIO_Keyboard_Configuration(); //游戏方向控制键盘
GUI_Init();//游戏界面初始化
TIM_Cmd(TIM2,ENABLE);//打开定时器2,用于判断20秒无操作熄灭屏幕
while(1)
{
/*计步*/
dmp_get_pedometer_step_count(&STEPS); //MPU6050自带计步功能,并且从第7步才可以读取的到数据
sprintf(str1,"步数:%ld",STEPS);
printf("%s\r\n",str);
OLED_ShowCHinese(0,6,0);//步
OLED_ShowCHinese(18,6,1);//数
OLED_ShowCHinese(36,6,2);//:
if(STEPS>=10)
{
OLED_ShowNum(40,6,STEPS,3,16);
}
else
{
OLED_ShowNum(40,6,0,3,16);
//printf("dsgkhsd kjhdksahgkljfahglkfadhgkldfag\r\n");
}
if(BLUETOOTH_STATE==1)
{
OLED_DrawBMP(0,0,127,2,BLUETOOTH_ON);
}
else
{
OLED_DrawBMP(0,0,127,2,BLUETOOTH_OFF);
}
/*显示时间、日期和手机修改时间、日期、闹钟*/
Clock_Infor_display(time_infor);
/*操作20秒无操作,熄灭oled*/
if(operrate_flag > 50)
{
operrate_flag = 0;
TIM_Cmd(TIM2,DISABLE);//关闭定时器2,停止计数
OLED_Display_Off(); //关闭oled显示
}
/*游戏*/
if(g_key0_flag==1)
{
g_key0_flag=0;
g_key2_flag=0;
operrate_flag = 0;
TIM_Cmd(TIM2,DISABLE);//关闭定时器2,停止计数
OLED_Display_On();
OLED_DrawBMP(0,0,128,8,STARTGAME);//开头动画
delay_s(2);
while(1)
{
Get_Command();
Show_Score();
GUI_Refresh(map);//刷新地图
if(GameOver())
{
OLED_Clear();
OLED_DrawBMP(0,0,128,8,GAMEOVER);
}
if(g_key2_flag==1)
{
g_key2_flag=0;
OLED_Clear();
break;
}
}
TIM_Cmd(TIM2,ENABLE);//开启定时器2,停止计数
}
/*抬手唤醒*/
if(res==0)
{
diff_roll_value = abs(ole_roll-roll);//取绝对值
if(diff_roll_value >= 9)
{
diff_roll_value=0;
operrate_flag = 0;
TIM_Cmd(TIM2,DISABLE);//关闭定时器2,停止计数
OLED_Display_On();
TIM_Cmd(TIM2,ENABLE);//开启定时器2,停止计数
}
ole_roll = roll;
printf("pitch=%f,roll=%f,yaw=%f\r\n",pitch,roll,yaw);
delay_ms(1000);
res=1;
}
delay_s(5);
}
}
|