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灯的操作可同时进行,因为它们都是通过不同的IO口实现的。获取温湿度的值是通过调用函数call_sht11()实现的,而控制LED灯的操作是通过读取KEY1和KEY2的状态来实现的,这两个操作互不影响,可以同时进行。同时,串口接收指令的操作也可以在主循环中进行,不会影响其他操作的执行。
STM32 温湿度传感器与LED控制程序:串口指令控制,按键控制

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

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