我正在尝试读取温度的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,则不会发送任何消息,这可能是绝对致命的,具体取决于您的应用程序。