所以我可以读取温度的 ADC 值,并且当它达到太热值时我也会发送一个字符串。但我的问题是;它多次发送字符串。我想只发送一次。我试图通过使用延迟来修复它,但效果不佳。
if ( LM35_ADC_Value == 580 )
{
USART_puts(USART2,"VERY_HOT\n");
delay(1680000000000);
}
Run Code Online (Sandbox Code Playgroud)
您需要实现一个可能滞后的状态,如下所示:
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_HOT\n");
veryhotsent = true;
}
Run Code Online (Sandbox Code Playgroud)
此外,使用>= 580代替非常重要== 580,否则如果温度在两次测量之间从 579 升高到 581,则不会发送任何消息,这可能是绝对致命的,具体取决于您的应用程序。