ST的傳感器驅(qū)動與HAL一直成功后,能拿到數(shù)據(jù)了,但是設(shè)備是橫屏,系統(tǒng)默認(rèn)是豎屏。就會出現(xiàn)屏幕自動轉(zhuǎn)動時方向是錯的的情況,設(shè)備橫立展示的是豎屏,設(shè)備豎立展示的是橫屏。
這個是PCB上設(shè)計的傳感器貼片方向和橫屏不一致導(dǎo)致的,只需要在HAL層旋轉(zhuǎn)矩陣就行。利用地球重力加速度為9.8g的特性,用手機(jī)和設(shè)備做平放、豎立放、橫立放同步對比,可推算出需要的旋轉(zhuǎn)矩陣。
修改文件路徑為:/hardware/STMicroelectronics/SensorHAL_IIO/configuration.h
修改前默認(rèn)數(shù)據(jù)是:
#define CONFIG_ST_HAL_ACCEL_ROT_MATRIX 1,0,0,0,1,0,0,0,1
#define CONFIG_ST_HAL_MAGN_ROT_MATRIX 1,0,0,0,1,0,0,0,1
#define CONFIG_ST_HAL_GYRO_ROT_MATRIX 1,0,0,0,1,0,0,0,1
修改后數(shù)據(jù)是:
#define CONFIG_ST_HAL_ACCEL_ROT_MATRIX 0,1,0,-1,0,0,0,0,1
#define CONFIG_ST_HAL_MAGN_ROT_MATRIX 0,1,0,-1,0,0,0,0,1
#define CONFIG_ST_HAL_GYRO_ROT_MATRIX 0,1,0,-1,0,0,0,0,1
由名稱定義很好理解,他們分別是加速度旋轉(zhuǎn)矩陣,磁力旋轉(zhuǎn)矩陣,陀螺儀旋轉(zhuǎn)矩陣。這段有點數(shù)學(xué)基礎(chǔ)的都好理解。[x,y,z]是原始采樣數(shù)據(jù),[X,Y,Z]是最后上送到app的數(shù)據(jù),旋轉(zhuǎn)矩陣數(shù)據(jù)為[a1,a2,a3,a4,a5,a6,a7,a8,a9]則有:
?=
—>
帶入原始數(shù)據(jù):[a1,a2,a3,a4,a5,a6,a7,a8,a9] = [1,0,0,0,1,0,0,0,1]則有:
也就是數(shù)據(jù)原因上送。
帶入修改后的數(shù)據(jù)[a1,a2,a3,a4,a5,a6,a7,a8,a9] = [0,1,0,-1,0,0,0,0,1]則有:
這樣就把坐標(biāo)系旋轉(zhuǎn)了90度了,實現(xiàn)了默認(rèn)豎屏變默認(rèn)橫屏。沒搞清楚的,在一張紙上畫下XY坐標(biāo)系旋轉(zhuǎn)下,實踐出真知。
這段在readme里面有介紹,這里寫下自己的備忘,大佬勿噴!
新人入行,經(jīng)驗分享,如有所誤,歡迎指出~文章來源:http://www.zghlxwxcb.cn/news/detail-673111.html
?版權(quán)歸屬:深圳市琪智科技有限公司-花花文章來源地址http://www.zghlxwxcb.cn/news/detail-673111.html
到了這里,關(guān)于【android12-linux-5.1】【ST芯片】驅(qū)動與HAL移植后數(shù)據(jù)方向異常的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!