Arduino+DHT11+LCD+蜂鸣器(蜂鸣器没反应)DHT11+蜂鸣器的时候是好的,然后加上LCD1602后超过设置的温度蜂鸣器就没有反应了,如何解决?

#include <LiquidCrystal.h>
#include <dht11.h>

dht11 DHT11;

#define DHT11PIN 8
// 实例化一个名为lcd的LiquidCrysta类型对象,并初始化相关引脚
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

volatile unsigned int temp;
int dht_12_gettemperature() {
  // 得到DHT11检测到的温度
  int value = DHT11.temperature;
  return value;
}
void setup()
{
  // 初始化温度
  temp = 0;
  // 设置引脚模式,7号为输出
  pinMode(7, OUTPUT);
  // 设置LCD有几列几行,1602LCD为16列2行
  lcd.begin(16, 2);
  // 串口设置为9600
  Serial.begin(9600);
}
void loop()
{
  // 温度超过22蜂鸣器报警
   if (temp >= 20) {
    tone(7,10,1000);//参数一:引脚号,参数二:频率,参数三:时间(可选:默认无限长)
  }else if (temp < 20) {
    noTone(7);// 停止输出方波 参数引脚号
  }
  // 读取传感器数据
  int chk = DHT11.read(DHT11PIN);
  Serial.print("Read sensor: ");
  // 检测数据是否正常接收
  switch (chk)
  {
    case DHTLIB_OK: 
    Serial.println("OK"); 
    break;
    case DHTLIB_ERROR_CHECKSUM: 
    Serial.println("Checksum error"); 
    break;
    case DHTLIB_ERROR_TIMEOUT: 
    Serial.println("Time out error");
    break;
    default: 
    Serial.println("Unknown error"); 
    break;
  }

  // 在串口监视器上输出湿度与温度信息
  Serial.print("Humidity (%): ");
  Serial.println(DHT11.humidity);
  Serial.print("Temperature (℃): ");
  Serial.println(DHT11.temperature);
  
  // 将光标设置在列 0, 行 1
  lcd.setCursor(0, 0);
  // 在LCD上输出湿度信息
  lcd.print("Humidity (%): ");
  lcd.println(DHT11.humidity);
  // 将光标设置在列 0, 行 1
  lcd.setCursor(0, 1);
  // 在LCD上输出温度信息
  lcd.print("Temperature : ");
  lcd.println(DHT11.temperature);

  delay(1000);
}

该回答引用GPTᴼᴾᴱᴺᴬᴵ
根据您提供的代码,蜂鸣器在温度超过20摄氏度时会报警。但是您的描述是超过设置的温度时蜂鸣器没有反应,这里有一个可能的问题是您在代码中的温度判断条件是'temp >= 20

temp = DHT11.temperature;


另外,您也可以检查一下蜂鸣器的连接是否正确,以及是否需要使用一个电位器来调整蜂鸣器的音量。

以下答案引用自GPT-3大模型,请合理使用:

的示例?

可能原因:
1、蜂鸣器接口是否正确及引脚接口位置判断是否正确;
2、大于预设温度没有发出蜂鸣器声音,可能是条件不满足;
3、lcd1602正确配置并连接。

可以尝试将代码中LCD1602的初始化部分放在 if (temp >= 20) { 这一个大括号后面,再次测试程序的运行情况:
#include <LiquidCrystal.h>
#include <dht11.h>

dht11 DHT11;

#define DHT11PIN 8
// 实例化一个名为lcd的LiquidCrysta类型对象,并初始化相关引脚
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

volatile unsigned int temp;

int dht_12_gettemperature() {
  // 得到DHT11检测到的温度
  int value = DHT11.temperature;
  return value;
}

void setup()
{
  // 初始化温度
  temp = 0;
  // 设置引脚模式,7号为输出
  pinMode(7, OUTPUT);
  // 串口设置为9600
  Serial.begin(9600);
}

void loop()
{
  // 温度超过22蜂鸣器报警
   if (temp >= 20) {
    tone(7,10,1000);//参数一:引脚号,参数二:频率,参数三:时间(可选:默认无限长)
    // 设置LCD有几列几行,1602LCD为16列2行
    lcd.begin(16, 2);
  }else if (temp < 20) {
    noTone(7);// 停止输出方波 参数引脚号
  }
  // 读取传感器数据
  int chk = DHT11.read(DHT11PIN);
  Serial.print("Read sensor: ");
  // 检测数据是否正常接收
  switch (chk)
  {
    case DHTLIB_OK: 
    Serial.println("OK"); 
    break;
    case DHTLIB_ERROR_CHECKSUM: 
    Serial.println("Checksum error"); 
    break;
    case DHTLIB_ERROR_TIMEOUT: 
    Serial.println("Time out error");
    break;
    default: 
    Serial.println("Unknown error"); 
    break;
  }

  // 在串口监视器上输出湿度与温度信息
  Serial.print("Humidity (%): ");
  Serial.println(DHT11.humidity);
  Serial.print("Temperature (℃): ");
  Serial.

如果我的回答解决了您的问题,请采纳我的回答

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^