Ranger__铎 发表于 2014-5-11 16:31:53

想做一个温度警报器

本帖最后由 Ranger__铎 于 2014-5-11 21:24 编辑

我想做一个温度警报器,当气温大于25℃时,蜂鸣器就会响,可是这个代码不会写,写出来的都是在贴吧里的Arduino教程里面东拼西凑的,希望能有高人指点一下。
我写的代码(编译成功,可是达不到我要的效果,不管多少度,都会叫)
void setup() {

Serial.begin(9600);         //使用9600速率进行串口通讯
   pinMode(4,OUTPUT);
}

void loop() {

int n = analogRead(A0);    //读取A0口的电压值

float vol = n * (5.0 / 1023.0*100);   //使用浮点数存储温度数据,温度数据由电压值换算得到

Serial.println(vol);                   //串口输出温度数据
delay(2000);                           //等待2秒,控制刷新速度
if(vol>50);
{
    digitalWrite(4,HIGH);
   pinMode(4,OUTPUT);         //让4号IO口输出
    tone(4,800);    //发出指定频响
    delay(500);
    pinMode(4,INPUT);         //关闭4号口输出
}
}

tgyfish 发表于 2014-5-11 19:55:27

看现在这样的帖子都没什么人回复了,你去精华篇找个写温度教程的帖子,也不知道你是什么温度的传感器,自己看看程序找到里面带温度的函数再用if语句自己写个吧!

Ranger__铎 发表于 2014-5-11 21:19:52

tgyfish 发表于 2014-5-11 19:55 static/image/common/back.gif
看现在这样的帖子都没什么人回复了,你去精华篇找个写温度教程的帖子,也不知道你是什么温度的传感器,自己 ...

我的代码就是在教程里拼出来的,温度传感器跟教程里的一样。不知为何用了if也达不到我要的效果

Ranger__铎 发表于 2014-5-11 21:21:10

Paderboy 发表于 2014-5-11 20:05 static/image/common/back.gif
你先试试以下的代码 (LM35 温度传感器),我编译通过了。我也是新手。。。 你可以多参考论坛的 ...

嗯,谢谢你的用心,可是在我电脑里编译不成功

Ranger__铎 发表于 2014-5-11 21:25:34

Ranger__铎 发表于 2014-5-11 21:21 static/image/common/back.gif
嗯,谢谢你的用心,可是在我电脑里编译不成功

我修改了一下,编译成功了,可是不管多少度都会叫,你能帮我看看吗?

shihaipeng04 发表于 2014-5-11 22:16:37

pinmode命令在 setup函数里说明一次就可以了,在loop里的那2个是没有用的。

tone函数还可以写成 tone(端口号,频率,时长)的样式。然后跟一个同长度的delay函数就可以听到声音了。

在if 温度>25 的部分里程序,没有问题,如果小于25了,程序就什么都不执行了,可能你需要加一句else notone()的这个函数让喇叭闭嘴,否则他还是响。

tgyfish 发表于 2014-5-11 22:49:43

同意楼上的!

Paderboy 发表于 2014-5-11 23:09:07

void setup() {

Serial.begin(9600);         //使用9600速率进行串口通讯
   pinMode(4,OUTPUT);
}

void loop() {

int n = analogRead(A0);    //读取A0口的电压值

float vol = n * (5.0 / 1023.0*100);   //使用浮点数存储温度数据,温度数据由电压值换算得到

Serial.println(vol);                   //串口输出温度数据
delay(2000);                           //等待2秒,控制刷新速度
if(vol>25) //这里是判断语句不能用(分号;)
{
    tone(4,800);    //发出指定频响
    delay(500);
}
else
{
digitalWrite(4,LOW);//或者直接把tone输出为0 tone(4,0);
delay(500);
}
}

Ranger__铎 发表于 2014-5-11 23:23:34

shihaipeng04 发表于 2014-5-11 22:16 static/image/common/back.gif
pinmode命令在 setup函数里说明一次就可以了,在loop里的那2个是没有用的。

tone函数还可以写成 tone(端 ...

notone这个词好像不行,编译不了。楼下有个说的有道理,我那if多了个;,加了else都没用

Ranger__铎 发表于 2014-5-11 23:25:57

Paderboy 发表于 2014-5-11 23:09 static/image/common/back.gif
void setup() {

Serial.begin(9600);         //使用9600速率进行串口通讯


万分感谢,原来if后面;是真凶。把频率改成0我也有想过,可是我当时不知道;的问题,难怪怎么都搞不定,现在ok了!

Ranger__铎 发表于 2014-5-11 23:26:59

谢谢大家的帮忙,我的温度警报器搞定了!

shihaipeng04 发表于 2014-5-12 00:10:54

Ranger__铎 发表于 2014-5-11 23:23 static/image/common/back.gif
notone这个词好像不行,编译不了。楼下有个说的有道理,我那if多了个;,加了else都没用

tone(端口,频率) 是一直响的,知道遇到下一个tone改变了频率或者是noTone(端口)才会停止。

noTone(8) 注意大小写。

darkorigin 发表于 2014-5-12 10:01:06

Ranger__铎 发表于 2014-5-11 21:19 static/image/common/back.gif
我的代码就是在教程里拼出来的,温度传感器跟教程里的一样。不知为何用了if也达不到我要的效果

说个调试的方法
就是输出中间数据
比如传感器得到的电压值,以及计算好的温度数值,是否蜂鸣 回传到PC
这样你就知道哪个环节出了问题
如果是传感器电压值不对 那么考虑重新接线 和换器件
如果是计算的温度值不对 那么考虑改程序
如果温度都对了 蜂鸣判断问题 那就是程序问题
如果都对了 还错误的蜂鸣 考虑下蜂鸣器

授人以鱼不如授人以渔
上述一般都是这种问题的排除思路多写程序 错多了 就都会了我当年写C程序 错的那叫一个多啊

darkorigin 发表于 2014-5-12 10:04:30

第18行和第21行可以不要的 IO口不需要关闭。而且你这21行只是设置成输入模式
18行的在第4行已经定义了

Ranger__铎 发表于 2014-5-12 11:42:33

shihaipeng04 发表于 2014-5-12 00:10 static/image/common/back.gif
tone(端口,频率) 是一直响的,知道遇到下一个tone改变了频率或者是noTone(端口)才会停止。

noTone ...

哦,难怪不行,原来是要注意大写
页: [1] 2
查看完整版本: 想做一个温度警报器