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 */
}

将获取温湿度的操作放在一个单独的线程或定时器中进行,避免影响按键操作的响应速度。或者使用中断来处理按键事件,更加及时地响应按键操作。
同时,可以考虑使用RTOS来管理多个任务和线程,提高系统的稳定性和可维护性。例如,可以将获取温湿度、处理串口指令、处理按键事件等操作分别放在不同的任务中进行,通过消息队列或信号量来进行任务之间的通信和同步。这样可以更好地实现系统的模块化和可扩展性,方便后续的系统升级和维护。
STM32温湿度控制系统:按键控制和串口通信

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

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