RMUL2025/User/device/joystick.c
2025-03-09 17:01:52 +08:00

62 lines
1.4 KiB
C
Raw Blame History

/*
OLED模块<E6A8A1>?带的摇杆<E69187>?
*/
/* Includes ----------------------------------------------------------------- */
#include "joystick.h"
/* Include BSP相关的头文件*/
#include <adc.h>
#include "bsp_delay.h"
/* Private typedef ---------------------------------------------------------- */
/* Private define ----------------------------------------------------------- */
/* Private macro ------------------------------------------------------------ */
/* Private variables -------------------------------------------------------- */
static uint32_t adc_raw;
static Joystick_Status_t js;
int8_t Joystick_Update(Joystick_Status_t *val) {
if (val == NULL) return -1;
HAL_ADC_Start(&hadc1);
if (HAL_ADC_PollForConversion(&hadc1, 1)) return -1;
adc_raw = HAL_ADC_GetValue(&hadc1);
HAL_ADC_Stop(&hadc1);
if (adc_raw < 500)
*val = JOYSTICK_PRESSED;
else if (adc_raw < 1000)
*val = JOYSTICK_LEFT;
else if (adc_raw < 2000)
*val = JOYSTICK_RIGHT;
else if (adc_raw < 3000)
*val = JOYSTICK_UP;
else if (adc_raw < 4000)
*val = JOYSTICK_DOWN;
else
*val = JOYSTICK_MID;
return 0;
}
uint8_t Joystick_WaitInput(void) {
do {
BSP_Delay(20);
Joystick_Update(&js);
} while (js == JOYSTICK_MID);
return 0;
}
uint8_t Joystick_WaitNoInput(void) {
do {
BSP_Delay(20);
Joystick_Update(&js);
} while (js != JOYSTICK_MID);
return 0;
}