|
20黑幣
ds18b20的程序?qū)懲炅酥笤趯嶒炦^程中發(fā)現(xiàn)了一個問題:
因為溫度在限定值存在一定范圍的上下波動(±0.5~0.8度),從而影響到了蜂鳴器的報警。
比如設(shè)定上限值在20度,下限值在8度,在溫度到達(dá)20度的瞬間警報器持續(xù)響3秒后,繼電器啟動制冷,
但在啟動制冷的過程,溫度會在20度左右波動(如20度--19.8度--20度--20.6度--20度),在這個期間只要觸碰到大于20度這個限值,蜂鳴器就會瞎叫,
下限值8度范圍也是同樣情況。
我試過把蜂鳴器的三秒報警程序刪掉,直接寫成高于20度報警,低于20度取消報警。
但是繼電器從啟動制冷開始,到低于20度為止用的時間太長了,這個時間內(nèi)蜂鳴器一直在叫,很吵。
所以我想寫一組上下回差的判斷,在0.5~0.8度這個上下回差的溫度內(nèi),不啟動控制,從而防止設(shè)備頻繁啟動。
但不知道應(yīng)該怎么下手,所以想在這里問問各位,獲取一些參考。。
ds18b20讀時序,lcd顯示這些跟回差判斷沒什么聯(lián)系,所以在這里我就先不貼出來了。
以下是判斷的程序:
void fengming_start() // 蜂鳴器響2-3秒程序
{
fengming=0;
delay(2000);
fengming=1;
}
void main()
{
motor2=0;
fengming=1;
led1=led2=led3=1;
while(1)
{
delayMs(1000);
display(getTmpValue());
sendChangeCmd();
led1 = !led1; //工作指示燈閃爍
if(RunTemp != 85) //當(dāng)顯示的數(shù)值不等于85時
{
if(RunTemp >= 20) //當(dāng)溫度大于等于20度
{
led2 = 0;
led3 =1;
fengming_start(); //蜂鳴器響2-3秒
motor2 = 1; //繼電器閉合
}
else
led2 = 1;
if(RunTemp <= 8) //當(dāng)溫度小于等于8度
{
led3 = 0;
led2 = 1;
fengming_start(); //蜂鳴器響2-3秒
motor2 = 0; //繼電器打開
}
else
led3 = 1;
}
}
}
|
|