|
0.96OLED MPU6050 MAX30102 藍(lán)牙
單片機(jī)源程序如下:
- #include "sys.h"
- #include "delay.h"
- #include "usart.h"
- #include "tim.h"
- #include "pwm.h"
- #include "spi.h"
- #include "iic.h"
- #include "led.h"
- #include "wk_up.h"
- #include "key.h"
- #include "rtc.h"
- #include "usart2.h"
- #include "24cxx.h"
- #include "w25qxx.h"
- #include "dht11.h"
- #include "algorithm.h"
- #include "max30102.h"
- #include "max30102test.h"
- #include "mpu6050.h"
- #include "inv_mpu.h"
- #include "inv_mpu_dmp_motion_driver.h"
- #include "ANO_TC.h"
- #include "draw_api.h"
- #include "featureset.h"
- #include "test.h"
- /*******************************************************************************
- STM32階段項(xiàng)目:電子手環(huán)
- 2021/10/27 完成部分底層驅(qū)動(dòng),移植OLED圖形庫(kù),用于后面0.96寸屏幕的顯示,編譯通過(guò)。
- 2021/10/28 增加RTC,DHT11,WK_UP休眠喚醒(有BUG,按一下會(huì)觸發(fā)多次)。
- 2021/10/29 完成MPU6050的移植,DMP移植,匿名上位機(jī)通訊(V2.6版本),其他版本的上
- 位機(jī)不不可用。
- 2021/10/30 完成OLED時(shí)鐘顯示界面,OLED圖形庫(kù)增加電量顯示圖標(biāo),信號(hào)顯示圖標(biāo),底層
- 驅(qū)動(dòng)基本完成。
- 2021/10/31 完成屏幕顯示的雛形,心率和設(shè)置功能未添加(后續(xù)完善),很多細(xì)節(jié)未處理
- MPU6050必須要喊平穩(wěn)才能校準(zhǔn)。(后續(xù)增加MPU6050上傳至更高版本的匿名上
- 位機(jī)),原因:高版本的上位機(jī)擁有更好看的圖形化界面。
-
- 2021/11/1 完善時(shí)鐘,計(jì)步,姿態(tài)邏輯模塊功能。移植MAX30102(測(cè)試未通過(guò),初始化無(wú)
- 反應(yīng)),之前用輪詢掃描按鍵,系統(tǒng)響應(yīng)太慢,修改成外部中斷。
- 計(jì)劃:增加藍(lán)牙設(shè)置時(shí)間,亮度,定時(shí)息屏,抬起喚醒(屏幕由滅到亮,實(shí)際
- 還沒(méi)有休眠),鬧鐘功能。
- 2021/11/2 完善藍(lán)牙設(shè)置時(shí)間,亮度,息屏,鬧鐘,休眠,抬起喚醒,跟隨旋轉(zhuǎn)。
- 待完善:心率,按鍵設(shè)置功能。
- 按鍵設(shè)置功能:亮度、時(shí)間設(shè)置已完成。
- 待完善:日期設(shè)置,心率。
-
- 2021/11/3 完成設(shè)置功能,修復(fù)菜單循環(huán)顯示出現(xiàn)亂碼問(wèn)題。
- 待完善:心率檢測(cè)。
-
- 2021/11/4 心率驅(qū)動(dòng)完成,邏輯實(shí)現(xiàn)完成,項(xiàng)目基本完成。
- *****************************************************************************/
- /*******************************************************************************
- 實(shí)現(xiàn)功能:OLED顯示,按鍵切換功能,抬起喚醒,自適應(yīng)切換屏幕,心率血氧測(cè)量,計(jì)步功能。
- 實(shí)現(xiàn)過(guò)程:用STM43F407ZET6作為主控芯片,采用外部中斷檢測(cè)按鍵,用來(lái)切換功能,利用RTC
- 得到當(dāng)前時(shí)間和日期,利用MPU6050姿態(tài)傳感器采集數(shù)據(jù),經(jīng)過(guò)姿態(tài)融合結(jié)算出歐
- 拉角,分析歐拉角的值得到當(dāng)前的狀態(tài),判斷不同狀態(tài)要進(jìn)行不同的處理,驅(qū)動(dòng)
- MAX30102得到心率血氧值,使用UART2連接藍(lán)牙與手機(jī)通訊,自定義手機(jī)的發(fā)送格式
- 利用串口中斷接收手機(jī)發(fā)過(guò)來(lái)的指令,在中斷服務(wù)函數(shù)中判斷,并執(zhí)行相應(yīng)的功能。
- *******************************************************************************/
- #define ANO_OK 0 //開(kāi)啟上傳功能則將此宏改為1
- extern void OLED_ShowBatteryRatio(u8 x,u8 y,u8 ratio);
- extern void OLED_ShowSignal(u8 x,u8 y,u8 strength);
- //函數(shù)聲明
- void MySystemInit(void); //各種外設(shè)的初始化
- void TestTask(void); //測(cè)試函數(shù),測(cè)試使用
-
- /*********************************主函數(shù)***************************************/
- int main(void)
- {
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//設(shè)置系統(tǒng)中斷優(yōu)先級(jí)分組2
- MySystemInit();//系統(tǒng)初始化
- while(1)
- {
- MainShow();
- }
- }
- //各種接口初始化
- void MySystemInit(void)
- {
- delay_init(168); //初始化延時(shí)函數(shù)
- uart_init(115200); //串口初始化
- USART2_Init(9600); //藍(lán)牙串口初始化
- LED_Init(); //LED初始化
- EXTI_InIt(); //按鍵中斷初始化
- WK_UP_Init(); //開(kāi)機(jī)時(shí)按下KEY2按鍵,非正常開(kāi)機(jī),直接進(jìn)入休眠狀態(tài)
- InitGraph(); //OLED初始化
- OLED_ON();
-
- ClearScreen();
- DrawBitmap(0,0,Panda,128,64);//顯示開(kāi)機(jī)畫面
- UpdateScreen();
- Tim6_Init(100-1,840-1); //為圖形庫(kù)提供1ms時(shí)鐘節(jié)拍
- // W25QXX_Init(); //Flash初始化
- // AT24CXX_Init(); //EEPROM初始化
- maxim_max30102_init();
- MPU_Init(); //初始化MPU6050
- while(mpu_dmp_init()) //初始化MPU DMP
- {
- LED2 =! LED2; //若DMP初始化不成功,則LED2閃爍 每隔200ms
- delay_ms(200);
- }
- ClearScreen();//清屏
- printf("system init ok \r\n");
- }
- /*************************************************END*******************************************************/
復(fù)制代碼
Keil代碼下載:
最終版.7z
(431.47 KB, 下載次數(shù): 233)
2021-11-16 21:47 上傳
點(diǎn)擊文件名下載附件
|
評(píng)分
-
查看全部評(píng)分
|