极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 17838|回复: 17

想做一个温度警报器

[复制链接]
发表于 2014-5-11 16:31:53 | 显示全部楼层 |阅读模式
本帖最后由 Ranger__铎 于 2014-5-11 21:24 编辑

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

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

  5. void loop() {

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

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

  8.   Serial.println(vol);                   //串口输出温度数据
  9.   delay(2000);                           //等待2秒,控制刷新速度
  10.   if(vol>50);
  11.   {
  12.     digitalWrite(4,HIGH);
  13.      pinMode(4,OUTPUT);         //让4号IO口输出
  14.     tone(4,800);    //发出指定频响
  15.     delay(500);
  16.     pinMode(4,INPUT);           //关闭4号口输出
  17. }
  18. }
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

发表于 2014-5-11 19:55:27 | 显示全部楼层
看现在这样的帖子都没什么人回复了,你去精华篇找个写温度教程的帖子,也不知道你是什么温度的传感器,自己看看程序找到里面带温度的函数再用if语句自己写个吧!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-5-11 21:19:52 | 显示全部楼层
tgyfish 发表于 2014-5-11 19:55
看现在这样的帖子都没什么人回复了,你去精华篇找个写温度教程的帖子,也不知道你是什么温度的传感器,自己 ...

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

使用道具 举报

 楼主| 发表于 2014-5-11 21:21:10 | 显示全部楼层
Paderboy 发表于 2014-5-11 20:05
你先试试以下的代码 (LM35 温度传感器),我编译通过了。我也是新手。。。 你可以多参考论坛的 ...

嗯,谢谢你的用心,可是在我电脑里编译不成功
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-5-11 21:25:34 | 显示全部楼层
Ranger__铎 发表于 2014-5-11 21:21
嗯,谢谢你的用心,可是在我电脑里编译不成功

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

使用道具 举报

发表于 2014-5-11 22:16:37 | 显示全部楼层
pinmode命令在 setup函数里说明一次就可以了,在loop里的那2个是没有用的。

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

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

使用道具 举报

发表于 2014-5-11 22:49:43 | 显示全部楼层
同意楼上的!
回复 支持 反对

使用道具 举报

发表于 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);
  }
}
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-5-11 23:23:34 | 显示全部楼层
shihaipeng04 发表于 2014-5-11 22:16
pinmode命令在 setup函数里说明一次就可以了,在loop里的那2个是没有用的。

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

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

使用道具 举报

 楼主| 发表于 2014-5-11 23:25:57 | 显示全部楼层
Paderboy 发表于 2014-5-11 23:09
void setup() {

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

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

使用道具 举报

 楼主| 发表于 2014-5-11 23:26:59 | 显示全部楼层
谢谢大家的帮忙,我的温度警报器搞定了!
回复 支持 反对

使用道具 举报

发表于 2014-5-12 00:10:54 | 显示全部楼层
Ranger__铎 发表于 2014-5-11 23:23
notone这个词好像不行,编译不了。楼下有个说的有道理,我那if多了个;,加了else都没用

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

noTone(8) 注意大小写。
回复 支持 反对

使用道具 举报

发表于 2014-5-12 10:01:06 | 显示全部楼层
Ranger__铎 发表于 2014-5-11 21:19
我的代码就是在教程里拼出来的,温度传感器跟教程里的一样。不知为何用了if也达不到我要的效果

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

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

使用道具 举报

发表于 2014-5-12 10:04:30 | 显示全部楼层
第18行和第21行可以不要的 IO口不需要关闭。而且你这21行只是设置成输入模式
18行的在第4行已经定义了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-5-12 11:42:33 | 显示全部楼层
shihaipeng04 发表于 2014-5-12 00:10
tone(端口,频率) 是一直响的,知道遇到下一个tone改变了频率或者是noTone(端口)才会停止。

noTone ...

哦,难怪不行,原来是要注意大写
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-14 17:29 , Processed in 0.055846 second(s), 22 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表