欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標(biāo)題:
基于STM32的PS2遙控手柄,平衡車(chē)程序源碼
[打印本頁(yè)]
作者:
xyl4702140088
時(shí)間:
2018-7-8 19:18
標(biāo)題:
基于STM32的PS2遙控手柄,平衡車(chē)程序源碼
基于STM32的PS2遙控手柄,平衡車(chē)程序源碼
單片機(jī)源程序如下:
/******************** (C) COPYRIGHT (2015)BST BALANCECAR **************************
* 文件名 :main.c
**********************************************************************************/
//#include "stm32f10x.h"
#include "mpu6050.h"
#include "i2c_mpu6050.h"
#include "motor.h"
#include "upstandingcar.h"
#include "SysTick.h"
#include "led.h"
#include "usart.h"
#include "i2c.h"
//#include "outputdata.h"
#include "timer.h"
#include "UltrasonicWave.h"
//#include "stm32f10x_usart.h"
#include "ps2.h"
#include "delay.h"
float gyz;
int acc;
int acc1;
/*協(xié)議相關(guān)*/
//extern u8 newLineReceived = 0;
/*
* 函數(shù)名:main
* 描述 :主函數(shù)
*/
int main(void)
{
u8 PS2_KEY = 0, X1=0,Y1=0,X2=0,Y2=0;
u16 num = 0;
SystemInit(); //=====系統(tǒng)初始化
Timerx_Init(5000,7199); //定時(shí)器TIM1
// UltrasonicWave_Configuration(); //超聲波初始化設(shè)置 IO口及中斷設(shè)置
//USART1_Config(); //串口1初始化 上位機(jī)
USART3_Config(); //串口3初始化 藍(lán)牙與USART3公用相同IO口
TIM2_PWM_Init(); //PWM輸出初始化
MOTOR_GPIO_Config(); //電機(jī)IO口初始化
LED_GPIO_Config();
// TIM3_External_Clock_CountingMode(); //左電機(jī)脈沖輸出外部中斷口PA7使用TIM3定時(shí)器用作為脈沖數(shù)計(jì)算
// TIM4_External_Clock_CountingMode(); //右電機(jī)脈沖輸出外部中斷口PB7使用TIM4定時(shí)器用作為脈沖數(shù)計(jì)算
TIM3_Encoder_Init(); //編碼器獲取脈沖數(shù) PA6 7
TIM4_Encoder_Init(); //編碼器獲取脈沖數(shù) PB6 7
////////////////////DMP/////////////////////////////////
i2cInit(); //IIC初始化 用于掛靠在總線上的設(shè)備使用
delay_nms(10); //延時(shí)10ms
MPU6050_Init(); //MPU6050 DMP陀螺儀初始化
PS2_Init(); //PS2手柄初始化
SysTick_Init(); //SysTick函數(shù)初始化
CarUpstandInit(); //小車(chē)直立參數(shù)初始化
SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk; //使能總算法時(shí)鐘
PrintChar("FFFFFFF \n");
while (1)
{
// GPIO_ResetBits(GPIOC, GPIO_Pin_13);
MPU6050_Pose(); //獲取MPU6050角度狀態(tài)
// gy0=gyro[0];
// UltrasonicWave_StartMeasure(); //調(diào)用超聲波發(fā)送程序 給Trig腳 <10us 高電平
// chaoshengbo(); //計(jì)算超聲波測(cè)距距離
// printf("%d",ucBluetoothValue);
// printf("\t");
// printf("%f",BST_fSpeedControlOutNew);
// printf("\t");
// printf("%f",BST_fCarAngle);
// printf("\t");
// printf("%f",BST_fLeftMotorOut);
// printf("\t");
// printf("\n");
num++;
if(num == 500)
{
num =0;
PS2_KEY = PS2_DataKey(); //手柄按鍵捕獲處理
switch(PS2_KEY)
{
case PSB_SELECT: PrintChar("PSB_SELECT \n"); break;
case PSB_L3: g_newcarstate = enSTOP; PrintChar("PSB_L3 \n"); break;
case PSB_R3: g_newcarstate = enSTOP; PrintChar("PSB_R3 \n"); break;
case PSB_START: PrintChar("PSB_START \n"); break;
case PSB_PAD_UP: g_newcarstate = enRUN; PrintChar("PSB_PAD_UP \n"); break;
case PSB_PAD_RIGHT: g_newcarstate = enRIGHT; PrintChar("PSB_PAD_RIGHT \n"); break;
case PSB_PAD_DOWN: g_newcarstate = enBACK; PrintChar("PSB_PAD_DOWN \n"); break;
case PSB_PAD_LEFT: g_newcarstate = enLEFT; PrintChar("PSB_PAD_LEFT \n"); break;
case PSB_L2: PrintChar("PSB_L2 \n"); break;
case PSB_R2: PrintChar("PSB_R2 \n"); break;
case PSB_L1: PrintChar("PSB_L1 \n"); break;
case PSB_R1: PrintChar("PSB_R1 \n"); break;
case PSB_TRIANGLE: PrintChar("PSB_TRIANGLE \n"); break;
case PSB_CIRCLE: PrintChar("PSB_CIRCLE \n"); break;
case PSB_CROSS: PrintChar("PSB_CROSS \n"); break;
case PSB_SQUARE: PrintChar("PSB_SQUARE \n"); break;
default: g_newcarstate = enSTOP; break;
}
//獲取模擬值
if(PS2_KEY == PSB_L1 || PS2_KEY == PSB_R1)
{
X1 = PS2_AnologData(PSS_LX);
Y1 = PS2_AnologData(PSS_LY);
X2 = PS2_AnologData(PSS_RX);
Y2 = PS2_AnologData(PSS_RY);
/*左搖桿*/
if (Y1 < 5 && X1 > 80 && X1 < 180) //上
{
g_newcarstate = enRUN;
}
else if (Y1 > 230 && X1 > 80 && X1 < 180) //下
{
g_newcarstate = enBACK;
}
else if (X1 < 5 && Y1 > 80 && Y1 < 180) //左
{
g_newcarstate = enLEFT;
}
else if (Y1 > 80 && Y1 < 180 && X1 > 230)//右
{
g_newcarstate = enRIGHT;
}
else if (Y1 <= 80 && X1 <= 80) //左上
{
g_newcarstate = enUPLEFT;
}
else if (Y1 <= 80 && X1 >= 180) //右上
{
g_newcarstate = enUPRIGHT;
}
else if (X1 <= 80 && Y1 >= 180) // 左下
{
g_newcarstate = enDOWNLEFT;
}
else if (Y1 >= 180 && X1 >= 180) //右下
{
g_newcarstate = enDOWNRIGHT;
}
else//停
{
g_newcarstate = enSTOP;
}
/*右搖桿*/
if (X2 < 5 && Y2 > 110 && Y2 < 150) //左
{
g_newcarstate = enTLEFT;
}
else if (Y2 > 110 && Y2 < 150 && X2 > 230)//右
{
g_newcarstate = enTRIGHT;
}
else//歸位
{
//
}
}
}
CarStateOut();
}
}
復(fù)制代碼
所有資料51hei提供下載:
PS2_STM32平衡車(chē)程序源碼.rar
(695.06 KB, 下載次數(shù): 150)
2018-7-9 02:11 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
作者:
admin
時(shí)間:
2018-7-9 02:13
此貼需要補(bǔ)充說(shuō)明資料后才可獲得積分
作者:
TT1998
時(shí)間:
2018-7-29 12:23
樓主會(huì)用51連接PS2手柄嗎
作者:
mjmajic
時(shí)間:
2019-9-19 14:14
這個(gè)具體的波形是怎么樣的?
作者:
王二狗.。。。
時(shí)間:
2019-9-21 19:36
單片機(jī)用的103還是f407
作者:
yuhang98
時(shí)間:
2020-4-11 16:37
是stm32f103?
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1