基于STM32F401RE开发板的X-NUCLEO-IKS01A3传感器测试之七LSM6DSO点击测试
[复制链接]
今天继续进行LSM6DSO的点击测试,按照范例,启动单片机后,按动用户按钮,依次进入单击状态、双击状态和停止状态,在单击状态时,敲击开发板,程序能识别,在双击状态时必须双击开发板程序才能识别,在停止状态时不识别敲击。为了让测试更直观,我添加了一个变量来记录敲击次数,并显示在屏幕的右下角。切换状态时,计数值清零。
下图为测试过程:
这是进入等待用户按键状态的界面:
按下用户按键,依次进入单击状态、双击状态和停止状态:
下面是单击计数:
下面是双击计数:
下面是添加了LCD显示代码的函数:
/**
* [url=home.php?mod=space&uid=159083]@brief[/url] Process of the LSM6DSO Single and Double Tap Detection application
* @retval None
*/
void MX_IKS01A3_LSM6DSO_SingleDoubleTap_Process(void)
{
IKS01A3_MOTION_SENSOR_Event_Status_t status;
if (PushButtonDetected != 0U)
{
/* Debouncing */
HAL_Delay(50);
/* Wait until the button is released */
while ((BSP_PB_GetState( BUTTON_KEY ) == PushButtonState));
/* Debouncing */
HAL_Delay(50);
/* Reset Interrupt flag */
PushButtonDetected = 0;
/* Enable/Disable single and double tap detection */
if (mode == MODE_DEFAULT)
{
SingleTapModeRequest = 1;
LCD_clear_line(5);
LCD_write_BG(0,4,(uint8_t *)"现在可以单击");
count = 0;
}
else if (mode == MODE_SINGLE_TAP)
{
DoubleTapModeRequest = 1;
LCD_clear_line(5);
LCD_write_BG(0,4,(uint8_t *)"现在可以双击");
count = 0;
}
else
{
DefaultModeRequest = 1;
LCD_clear_line(5);
LCD_write_BG(0,4,(uint8_t *)"停止接收点击");
count = 0;
}
}
if (MemsEventDetected != 0U)
{
MemsEventDetected = 0;
if (mode == MODE_SINGLE_TAP)
{
if (IKS01A3_MOTION_SENSOR_Get_Event_Status(IKS01A3_LSM6DSO_0, &status) != BSP_ERROR_NONE)
{
Error_Handler();
}
LCD_write_BG(0,4,(uint8_t *)"收到单击信号");
count++;
LCD_write_value(72,5,2,0,0,count);
if (status.TapStatus != 0U)
{
BSP_LED_On(LED2);
HAL_Delay(SINGLE_TAP_INDICATION_DELAY);
BSP_LED_Off(LED2);
HAL_Delay(INDICATION_WAIT_DELAY);
}
}
else if (mode == MODE_DOUBLE_TAP)
{
if (IKS01A3_MOTION_SENSOR_Get_Event_Status(IKS01A3_LSM6DSO_0, &status) != BSP_ERROR_NONE)
{
Error_Handler();
}
LCD_write_BG(0,4,(uint8_t *)"收到双击信号");
count++;
LCD_write_value(72,5,2,0,0,count);
if (status.DoubleTapStatus != 0U)
{
BSP_LED_On(LED2);
HAL_Delay(DOUBLE_TAP_INDICATION_DELAY);
BSP_LED_Off(LED2);
HAL_Delay(INDICATION_WAIT_DELAY);
BSP_LED_On(LED2);
HAL_Delay(DOUBLE_TAP_INDICATION_DELAY);
BSP_LED_Off(LED2);
HAL_Delay(INDICATION_WAIT_DELAY);
}
}
else
{
/* Do nothing */
}
}
if (SingleTapModeRequest != 0U)
{
if (IKS01A3_MOTION_SENSOR_Enable_Single_Tap_Detection(IKS01A3_LSM6DSO_0, IKS01A3_MOTION_SENSOR_INT1_PIN) != BSP_ERROR_NONE)
{
Error_Handler();
}
mode = MODE_SINGLE_TAP;
SingleTapModeRequest = 0;
}
if (DoubleTapModeRequest != 0U)
{
if (IKS01A3_MOTION_SENSOR_Disable_Single_Tap_Detection(IKS01A3_LSM6DSO_0) != BSP_ERROR_NONE)
{
Error_Handler();
}
if (IKS01A3_MOTION_SENSOR_Enable_Double_Tap_Detection(IKS01A3_LSM6DSO_0, IKS01A3_MOTION_SENSOR_INT1_PIN) != BSP_ERROR_NONE)
{
Error_Handler();
}
mode = MODE_DOUBLE_TAP;
DoubleTapModeRequest = 0;
}
if (DefaultModeRequest != 0U)
{
if (IKS01A3_MOTION_SENSOR_Disable_Double_Tap_Detection(IKS01A3_LSM6DSO_0) != BSP_ERROR_NONE)
{
Error_Handler();
}
mode = MODE_DEFAULT;
DefaultModeRequest = 0;
}
}
此内容由EEWORLD论坛网友hujj原创,如需转载或用于商业用途需征得作者同意并注明出处
|