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灯的操作可同时进行,因为获取温湿度的函数和读取key的函数都是非阻塞的,即不会阻塞程序的运行。同时,在获取温湿度的函数中也没有使用任何延时函数,因此不会影响key的读取和LED灯的控制。
STM32 温湿度传感器和按键控制LED灯程序

原文地址: https://www.cveoy.top/t/topic/owM1 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录