双轴XY摇杆按键模块(stm32)

您所在的位置:网站首页 摇杆按键叫什么名字 双轴XY摇杆按键模块(stm32)

双轴XY摇杆按键模块(stm32)

2023-12-16 19:53| 来源: 网络整理| 查看: 265

今天,翻出来一个双轴摇杆模块,某宝上几块钱一个,就给大家分享一下这个模块的驱动程序吧。

 

双轴驱动模块:可随着上面的键帽转动 获得模拟值 通过adc转换就可以查看到具体的数据 从而得到上下左右的值。

引脚:

MS:按键

VRy:y轴模拟量输出

VRx:x轴模拟量输出

5v

GND

展示:

void Init_ADC(void) { GPIO_InitTypeDef GPIO_InitS; ADC_InitTypeDef ADC_InitS; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO|RCC_APB2Periph_ADC1,ENABLE); RCC_ADCCLKConfig(RCC_PCLK2_Div6); GPIO_InitS.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1; GPIO_InitS.GPIO_Mode=GPIO_Mode_AIN; //模拟输入 GPIO_InitS.GPIO_Speed=GPIO_Speed_50MHz; GPIO_Init(GPIOA,&GPIO_InitS); ADC_InitS.ADC_Mode = ADC_Mode_Independent; ADC_InitS.ADC_ScanConvMode = DISABLE; //多通道(ENABLE)/单通道(DISABLE) ADC_InitS.ADC_ContinuousConvMode = DISABLE; //连续(ENABLE)/单次(DISABLE) ADC_InitS.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; ADC_InitS.ADC_DataAlign = ADC_DataAlign_Right; //数据右对齐 ADC_InitS.ADC_NbrOfChannel = 2; //通道数 ADC_Init(ADC1, &ADC_InitS); ADC_Cmd(ADC1,ENABLE); ADC_ResetCalibration(ADC1); while(ADC_GetResetCalibrationStatus(ADC1)); ADC_StartCalibration(ADC1);//开始指定ADC的校准状态 while(ADC_GetCalibrationStatus(ADC1));//获取指定ADC的校准程序 ADC_SoftwareStartConvCmd(ADC1, ENABLE);//使能或者失能指定的ADC的软件转换启动功能 } u16 readAdc(u8 cmd) { ADC_RegularChannelConfig(ADC1,cmd,1,ADC_SampleTime_239Cycles5); ADC_SoftwareStartConvCmd(ADC1, ENABLE); while(!ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC));//转换结束标志位 return ADC_GetConversionValue(ADC1);//返回最近一次ADCx规则组的转换结果 }

上面为初始化以及读ADC值,我用的是PA1和PA2分别来获取X和Y轴。

经过测试我发现摇杆不动的情况值为3000左右,这个值会随着摇杆的扭动而改变

#define LEFT 3400//大于3400 左 #define RIGHT 2800//小于2800 右 #define FORWARD 2800//小于2800 上 #define BANKE 3400//小于3400 下 if(readAdc(1)>LEFT)printf(" 左"); if(readAdc(1)


【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3