STM32温湿度传感器读取与按键控制LED灯优化
printf('hello world!\n'); while (1) { //获取温湿度 call_sht11(&Tem,&Hum); printf('%d℃ %d%%RH\r\n',Tem,Hum);
if(HAL_GPIO_ReadPin(KEY1_GPIO_Port,KEY1_Pin)==0)
{
HAL_Delay(300);
HAL_GPIO_TogglePin(LED1_GPIO_Port,LED1_Pin);
if(HAL_GPIO_ReadPin(LED1_GPIO_Port,LED1_Pin)==GPIO_PIN_SET)
printf('OUT');
else
printf('ENTER');
}
if(HAL_GPIO_ReadPin(KEY2_GPIO_Port,KEY2_Pin)==0)
{
HAL_Delay(300);
HAL_GPIO_TogglePin(LED2_GPIO_Port,LED2_Pin);
if(HAL_GPIO_ReadPin(LED2_GPIO_Port,LED2_Pin)==GPIO_PIN_SET)
printf('STOP');
else
printf('FIRE');
}
if(uart1RxState==1)
{
if(strstr((const char *)uart1RxBuff, cmdLightupStr)!= NULL) // 判断串口是否有发送'LIGHT UP'指令
{
HAL_GPIO_WritePin(LED3_GPIO_Port,LED3_Pin,GPIO_PIN_RESET);
printf('LIGHT UP OK');
}
else if(strstr((const char *)uart1RxBuff, cmdLightoffStr)!= NULL)
{
HAL_GPIO_WritePin(LED3_GPIO_Port,LED3_Pin,GPIO_PIN_SET);
printf('LIGHT OFF OK');
}
if(strstr((const char *)uart1RxBuff, cmdWaterONStr)!= NULL)
{
HAL_GPIO_WritePin(LED4_GPIO_Port,LED4_Pin,GPIO_PIN_RESET);
printf('WATER ON OK');
}
else if(strstr((const char *)uart1RxBuff, cmdWateroffStr)!= NULL)
{
HAL_GPIO_WritePin(LED4_GPIO_Port,LED4_Pin,GPIO_PIN_SET);
printf('WATER OFF OK');
}
uart1RxState=0;
uart1RxCounter =0;
memset(uart1RxBuff,0,128);
}
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
} /* USER CODE END 3 */ } 获取温湿度的值之后,key控制LED灯的操作变慢了
可能是因为获取温湿度的操作比较耗时,而在获取温湿度的过程中,CPU会一直占用,导致无法及时响应按键事件。建议将获取温湿度的操作放在一个单独的线程或定时器中进行,这样就可以避免影响按键操作的响应速度。另外,可以考虑使用中断来处理按键事件,这样可以更加及时地响应按键操作。
原文地址: https://www.cveoy.top/t/topic/owNb 著作权归作者所有。请勿转载和采集!