想做一个温度警报器
本帖最后由 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号口输出
}
} 看现在这样的帖子都没什么人回复了,你去精华篇找个写温度教程的帖子,也不知道你是什么温度的传感器,自己看看程序找到里面带温度的函数再用if语句自己写个吧! tgyfish 发表于 2014-5-11 19:55 static/image/common/back.gif
看现在这样的帖子都没什么人回复了,你去精华篇找个写温度教程的帖子,也不知道你是什么温度的传感器,自己 ...
我的代码就是在教程里拼出来的,温度传感器跟教程里的一样。不知为何用了if也达不到我要的效果 Paderboy 发表于 2014-5-11 20:05 static/image/common/back.gif
你先试试以下的代码 (LM35 温度传感器),我编译通过了。我也是新手。。。 你可以多参考论坛的 ...
嗯,谢谢你的用心,可是在我电脑里编译不成功 Ranger__铎 发表于 2014-5-11 21:21 static/image/common/back.gif
嗯,谢谢你的用心,可是在我电脑里编译不成功
我修改了一下,编译成功了,可是不管多少度都会叫,你能帮我看看吗? pinmode命令在 setup函数里说明一次就可以了,在loop里的那2个是没有用的。
tone函数还可以写成 tone(端口号,频率,时长)的样式。然后跟一个同长度的delay函数就可以听到声音了。
在if 温度>25 的部分里程序,没有问题,如果小于25了,程序就什么都不执行了,可能你需要加一句else notone()的这个函数让喇叭闭嘴,否则他还是响。 同意楼上的! 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);
}
} shihaipeng04 发表于 2014-5-11 22:16 static/image/common/back.gif
pinmode命令在 setup函数里说明一次就可以了,在loop里的那2个是没有用的。
tone函数还可以写成 tone(端 ...
notone这个词好像不行,编译不了。楼下有个说的有道理,我那if多了个;,加了else都没用 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:23 static/image/common/back.gif
notone这个词好像不行,编译不了。楼下有个说的有道理,我那if多了个;,加了else都没用
tone(端口,频率) 是一直响的,知道遇到下一个tone改变了频率或者是noTone(端口)才会停止。
noTone(8) 注意大小写。 Ranger__铎 发表于 2014-5-11 21:19 static/image/common/back.gif
我的代码就是在教程里拼出来的,温度传感器跟教程里的一样。不知为何用了if也达不到我要的效果
说个调试的方法
就是输出中间数据
比如传感器得到的电压值,以及计算好的温度数值,是否蜂鸣 回传到PC
这样你就知道哪个环节出了问题
如果是传感器电压值不对 那么考虑重新接线 和换器件
如果是计算的温度值不对 那么考虑改程序
如果温度都对了 蜂鸣判断问题 那就是程序问题
如果都对了 还错误的蜂鸣 考虑下蜂鸣器
授人以鱼不如授人以渔
上述一般都是这种问题的排除思路多写程序 错多了 就都会了我当年写C程序 错的那叫一个多啊 第18行和第21行可以不要的 IO口不需要关闭。而且你这21行只是设置成输入模式
18行的在第4行已经定义了 shihaipeng04 发表于 2014-5-12 00:10 static/image/common/back.gif
tone(端口,频率) 是一直响的,知道遇到下一个tone改变了频率或者是noTone(端口)才会停止。
noTone ...
哦,难怪不行,原来是要注意大写
页:
[1]
2