极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 15494|回复: 13

求助,温度传感器问题

[复制链接]
发表于 2016-2-27 12:40:12 | 显示全部楼层 |阅读模式
    刚刚制作了一个DS18B20的温度传感报警器,将测得温度通过1602lcd显示,在温度大于30摄氏度时蜂鸣器报警,但实际操作中并不会报警,请大家帮忙看看,问题到底出在哪里,谢谢大家。
  1. #include <LiquidCrystal.h>

  2. #include <OneWire.h>
  3. #include <SPI.h>//这里我使用了arduino.cc上的lcd与寄存器配合使用的库
  4. #include <DallasTemperature.h>//感谢海神提供的DS18B20库

  5. LiquidCrystal lcd(10);

  6. int pin_tem=7;
  7. int i;
  8. OneWire onewire(pin_tem);
  9. DallasTemperature sensors(&onewire);
  10. int pin=2;
  11. void setup() {
  12. lcd.begin(16,2);
  13. lcd.setCursor(0,0);
  14. sensors.begin();//初始化设置
  15. }
  16. void loop() {

  17.   lcd.setCursor(0,0);
  18. sensors.requestTemperatures();//温度请求
  19. lcd.print("T=");
  20. lcd.setCursor(2,0);
  21. lcd.print(sensors.getTempCByIndex(0));//输出温度
  22. if(sensors.getTempCByIndex(0)>30){
  23. for(i;i<100;i++){

  24. digitalWrite(pin,HIGH);

  25. }
  26. }
  27. else{

  28. digitalWrite(pin,LOW);

  29. }  
  30. }
复制代码
回复

使用道具 举报

发表于 2016-2-27 13:00:15 | 显示全部楼层
for循环是干嘛用的。。。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-2-28 09:14:59 | 显示全部楼层
设置蜂鸣器的频率
回复 支持 反对

使用道具 举报

发表于 2016-2-29 10:11:26 | 显示全部楼层
lonelyman 发表于 2016-2-28 09:14
设置蜂鸣器的频率

for(i=0;i<100;i++)
回复 支持 反对

使用道具 举报

发表于 2016-3-10 14:09:48 | 显示全部楼层
lonelyman 发表于 2016-2-28 09:14
设置蜂鸣器的频率

无源蜂鸣器?为啥不直接用tone更简单点
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-3-18 19:31:23 | 显示全部楼层
用tone怎么控制蜂鸣器开关啊
回复 支持 反对

使用道具 举报

发表于 2016-3-18 22:44:03 | 显示全部楼层
lonelyman 发表于 2016-3-18 19:31
用tone怎么控制蜂鸣器开关啊

你去看看api就不会提问了 notone
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-3-21 18:42:03 | 显示全部楼层
lovezypj 发表于 2016-3-18 22:44
你去看看api就不会提问了 notone

好吧,有时间我试一下行不行,感谢你的回复
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-4-23 10:42:03 | 显示全部楼层
那个,现在的确成功了,但是又有一个问题:为什么使用tone()可以,而使用digitalWrite和for循环配合就不行呢?
回复 支持 反对

使用道具 举报

发表于 2016-4-23 11:11:32 | 显示全部楼层
lonelyman 发表于 2016-4-23 10:42
那个,现在的确成功了,但是又有一个问题:为什么使用tone()可以,而使用digitalWrite和for循环配合就不行 ...

for没有意义,建议删除。超30 蜂鸣器打开,低于30蜂鸣器关了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-4-29 16:45:06 | 显示全部楼层
林定祥 发表于 2016-4-23 11:11
for没有意义,建议删除。超30 蜂鸣器打开,低于30蜂鸣器关了。

那么我要是加一个led灯,岂不是不能用digitalWrtie()?
回复 支持 反对

使用道具 举报

发表于 2016-5-1 08:30:17 | 显示全部楼层
lonelyman 发表于 2016-4-29 16:45
那么我要是加一个led灯,岂不是不能用digitalWrtie()?

for(i;i<100;i++){

digitalWrite(pin,HIGH);

}
意思为对digitalWrite(pin,HIGH)操作一百次!
回复 支持 反对

使用道具 举报

发表于 2016-5-2 11:02:24 | 显示全部楼层
#include <LiquidCrystal.h>

#include <OneWire.h>
#include <SPI.h>//这里我使用了arduino.cc上的lcd与寄存器配合使用的库
#include <DallasTemperature.h>//感谢海神提供的DS18B20库

LiquidCrystal lcd(10);

int pin_tem = 7;
int i;
OneWire onewire(pin_tem);
DallasTemperature sensors(&onewire);
int pin = 2;
void setup()
{
        lcd.begin(16, 2);
        lcd.setCursor(0, 0);
        sensors.begin();//初始化设置
}
void loop()
{

        lcd.setCursor(0, 0);
        sensors.requestTemperatures();//温度请求
        lcd.print("T=");
        lcd.setCursor(2, 0);
        lcd.print(sensors.getTempCByIndex(0));//输出温度
        if (sensors.getTempCByIndex(0) > 30)
        {
                for (i=0; i < 100; i++)
                {
                        digitalWrite(pin, HIGH);
                        delay(10);
                        digitalWrite(pin, LOW);
                        delay(10);
                }
        }
}
回复 支持 反对

使用道具 举报

发表于 2016-5-5 17:12:57 | 显示全部楼层
直接换个有源的蜂鸣器,多简单。
有源蜂鸣器:直接高电压就可以响
无源蜂鸣器:需要自己产生人可以听到的频率。相当于喇叭。
回复 支持 反对

使用道具 举报

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

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-4-26 03:07 , Processed in 0.044821 second(s), 22 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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