我正在尝试读取温度的ADC值,如果达到非常热的状态,则通过UART发送

所以我可以读取温度的 ADC 值,并且当它达到太热值时我也会发送一个字符串。但我的问题是;它多次发送字符串。我想只发送一次。我试图通过使用延迟来修复它,但效果不佳。

    if ( LM35_ADC_Value == 580 )
        {   
           USART_puts(USART2,"VERY_HOTn");
           delay(1680000000000);
                                                                                 
        }

回答

您需要实现一个可能滞后的状态,如下所示:

   bool veryhotsent = false;

   ...

   if ( veryhotsent )
   {
     if ( LM35_ADC_Value < 578 )        // change that value to whatever is suitable
        veryhotsent = false;            // for your application
   }
   else if ( LM35_ADC_Value >= 580 )    // use >=, otherwise you might miss the raise
   {   
      USART_puts(USART2,"VERY_HOTn");
      veryhotsent = true;
   }
  • 一旦温度升至 580 度以上,您就发送消息。
  • 除非温度降至 578 并再次升至 580 以上,否则消息不会被重新发送。

此外,使用>= 580代替非常重要== 580,否则如果温度在两次测量之间从 579 升高到 581,则不会发送任何消息,这可能是绝对致命的,具体取决于您的应用程序。


以上是我正在尝试读取温度的ADC值,如果达到非常热的状态,则通过UART发送的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>