|
20黑幣
ds18b20的程序?qū)懲炅酥笤趯?shí)驗(yàn)過程中發(fā)現(xiàn)了一個(gè)問題:
因?yàn)闇囟仍谙薅ㄖ荡嬖谝欢ǚ秶纳舷虏▌?dòng)(±0.5~0.8度),從而影響到了蜂鳴器的報(bào)警。
比如設(shè)定上限值在20度,下限值在8度,在溫度到達(dá)20度的瞬間警報(bào)器持續(xù)響3秒后,繼電器啟動(dòng)制冷,
但在啟動(dòng)制冷的過程,溫度會(huì)在20度左右波動(dòng)(如20度--19.8度--20度--20.6度--20度),在這個(gè)期間只要觸碰到大于20度這個(gè)限值,蜂鳴器就會(huì)瞎叫,
下限值8度范圍也是同樣情況。
我試過把蜂鳴器的三秒報(bào)警程序刪掉,直接寫成高于20度報(bào)警,低于20度取消報(bào)警。
但是繼電器從啟動(dòng)制冷開始,到低于20度為止用的時(shí)間太長(zhǎng)了,這個(gè)時(shí)間內(nèi)蜂鳴器一直在叫,很吵。
所以我想寫一組上下回差的判斷,在0.5~0.8度這個(gè)上下回差的溫度內(nèi),不啟動(dòng)控制,從而防止設(shè)備頻繁啟動(dòng)。
但不知道應(yīng)該怎么下手,所以想在這里問問各位,獲取一些參考。。
ds18b20讀時(shí)序,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時(shí)
{
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;
}
}
}
|
|