|
分享一個3D鼠標(biāo)的方案
包括軟件,原理圖
51hei.png (57.87 KB, 下載次數(shù): 82)
下載附件
2021-12-19 05:35 上傳
51hei.png (41.98 KB, 下載次數(shù): 70)
下載附件
2021-12-19 05:36 上傳
單片機源程序如下:
- /*
- [3D空間鼠標(biāo)固件-發(fā)送端]
- MCU :STM32F103C8T6
- IMU :MPU6050
- RF2.4G:NRF24L01
- [ 秋陽 2013-11 ]
- */
- #include "stm32f10x.h"
- #include "stdlib.h"
- #include "math.h"
- #include "delay.h"
- #include "NRF24L01.H"
- #include "MPU6050.H"
- #include "IIC.H"
- #include "spi.H"
- #include "ALL_config.h"
- #include "var_global.h"
- #include "Cal.h"
- #include "KEY.h"
- //-----------------------------------------------------------------//
- u16 dir_time=0;
- u8 RC_CON=0;
- float Button=0;
- u16 TO=0;
- u16 C_count,L_count;
- u8 D_Clk;
- u8 clk1,clk2;
- //---------------------------------------------------------------------//
- int main()
- {
- RCC_Configuration(); //配置系統(tǒng)時鐘
- delay_ms(50);
- I2C_Configuration();
- GPIO_Configuration();
- SPIx_Init();
- //設(shè)置為發(fā)射模式
- NRF24L01Int();
- NRFSetTxMode(TxDate);
- //設(shè)置IMU
- IIC_Reboot();
- IIC_Reboot();
- Init_MPU6050();
- //設(shè)置陀螺儀零點
- Set_Offset();
- //設(shè)置5ms中斷
- TIM3_INT();
- while(1)
- {
- //簡單閃燈
- GPIO_ResetBits(GPIOB,GPIO_Pin_0);
- Delay_s(5);
- GPIO_SetBits(GPIOB,GPIO_Pin_0);
- Delay_s(5);
- }
- }
- //----------------------------5ms中斷--------------------------------------
- void TIM3_IRQHandler()
- {
- TIM_ClearITPendingBit(TIM3,TIM_FLAG_Update);
- dir_time++;
- //讀取傳感器
- READ_MPU6050();
- Cal_TsData();
- sensfusion6UpdateQ(-GRY_F.X,-GRY_F.Y,GRY_F.Z,ACC_AVG.X*100,ACC_AVG.Y*100,ACC_AVG.Z*100,0.005f);
- sensfusion6GetEulerRPY(&Q_ANGLE.Roll, &Q_ANGLE.Pitch, &Q_ANGLE.Yaw);
- //----------------單擊雙擊優(yōu)化,防止雙擊時指針漂移---------------------------------
- //-無線數(shù)據(jù)包標(biāo)志:【左單1】【 左雙2】 【左長3】 【右單4】 【左右長5】
- if(dir_time>=5) //按鍵掃描周期:5ms*5=25ms
- {
- dir_time=0;
- Get_KEY(); //取得按鍵狀態(tài)
- if (!K_Trg && !K_TrgR) Button=0;
- if (K_Trg) {Button=1;D_Clk=1;} //左鍵鍵按下,雙擊計時開始
- if (K_TrgR)Button=4; //右鍵按下
- if (K_Cont) L_count++;else L_count=0;
- if (D_Clk && C_count<15) C_count++; else {D_Clk=0;C_count=0;} //雙擊超時
- if (K_Trg && C_count>2) {Button=2;C_count=0;D_Clk=0;}//第一下點完,未超時且又被觸發(fā),為左鍵雙擊
- if (L_count>15) Button=3;//左鍵長按
- if( K_Cont && K_ContR) Button=5; //左右鍵按下
- }
- //------------------------------------------------------
- if(Button==1)clk1++;
- if(Button==2)clk2++;
- Send_RFdata(); // 發(fā)送RF數(shù)據(jù)包
- }
復(fù)制代碼
Keil代碼下載:
STM32空中3D鼠標(biāo).7z
(1.6 MB, 下載次數(shù): 34)
2021-12-19 05:38 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|
評分
-
查看全部評分
|