-2

我正在使用我朋友的代码建立一个气象站。但是,他是 Arduino 的旧版本,我无法弄清楚原因。我是编程新手,所以我不知道“'dht'没有命名类型”是什么意思?我正在使用 Arduino 1.04,我的朋友在 Arudino 0022 上编写了他的气象站。我的问题是,为什么我的验证无法编译?我做错了什么?

这是我的代码:

#include <dht.h>
dht DHT;  
#define DHT22_PIN 2
#include <Wire.h>
#define BMP085_ADDRESS 0x77  // I2C address of BMP085

const unsigned char OSS = 3;  // Oversampling Setting

// Calibration values
int ac1;
int ac2; 
int ac3; 
unsigned int ac4;
unsigned int ac5;
unsigned int ac6;
int b1; 
int b2;
int mb;
int mc;
int md;

// b5 is calculated in bmp085GetTemperature(...), this variable is also used in      bmp085GetPressure(...)
// so ...Temperature(...) must be called before ...Pressure(...).
long b5; 
short temperature;
long pressure;

void setup()
{
  pinMode(2, INPUT); 
  Wire.begin();
  bmp085Calibration();
  Serial.begin(115200);
  analogReference(INTERNAL);
}

void loop() {
  // READ DATA
  float bat_read=analogRead(6);
  //bat_read = analogRead(BAT_voltage);
  float chk = DHT.read22(DHT22_PIN);

  // DISPLAY DATA
  Serial.print(bat_read, DEC);
  Serial.print(", "); 
  Serial.print(DHT.humidity, 2);
  Serial.print(", ");
  temperature = bmp085GetTemperature(bmp085ReadUT());
  pressure = bmp085GetPressure(bmp085ReadUP());
  Serial.print(temperature, DEC);
  Serial.print(", "); 
  Serial.println(pressure, DEC);
  delay(1000);
}

错误是:

error: 'dht' does not name a type

sketch_jul05a.ino: In function 'void loop()': error: 'DHT' was not declared in this scope
4

3 回答 3

1

关于您的特定错误,您应该

'dht' 没有命名类型

这意味着您的单词dht不在编译器可以理解您的意思的地方。

我如何将其更改为类型?

您不想将其更改为类型,而是想解决您遇到的编译问题。

类型是什么意思?

您应该阅读有关该主题的K&R。类型是限制您编写连贯代码的规则。

您应该在您的问题中复制您遇到的完整错误,以便我们更好地帮助您。

假设错误在以下行:

#include <dht.h>
dht DHT;  

编译器不知道 是什么dht,因为它以前从未见过它被定义过。我假设,dht.h应包含一个需要包含dht类型定义的标题。您应该查看dht.h文件系统中是否有,并将其推送到您的草图目录中。最后将 into 更改#include <dht.h>#include "dht.h",因此它会dht.h在您的本地目录中查找 。

编辑:很抱歉,我认为我不能在这里为您提供比我刚才所说的更多的帮助。问题是你不明白我告诉你解决问题的方法,向你解释它会给你上一堂 C 编程课。因此,您应该首先开始阅读K&R,参加一些 C/C++/Arduino 编程课程(也许在您当地的黑客空间?),和/或请您的朋友帮助您并向您解释正在发生的事情

于 2013-07-05T09:02:34.703 回答
1

昨天我在使用 Arduino 0022 编写的 DHT22 传感器更新草图时遇到了同样的问题。我试图在 Arduino 1.0.5 IDE 中编辑它。多个编译错误,尤其是函数 millis()。我认为如果我刚刚打开 0022 IDE 可能会奏效,但我认为是时候将草图带入这个十年了;)

我从 Github 下载了 Adafruit DHT22 库并稍微重写了草图以使用该库的方法。这几乎是随叫随到的。库中包含一个示例草图,您可以派生它以使所有内容都适合。

在我的草图中,我得到了一些东西:

#include "DHT.h"
#define DHTPIN 7 // what pin we're connected to on the Arduino UNO

#define DHTTYPE DHT22 // DHT 22 (AM2302)

DHT dht(DHTPIN, DHTTYPE);

void setup() {
Serial.begin(9600);
Serial.println("DHTxx test!");
dht.begin();
}

旧版本和更新版本之间的区别是 'dht.begin();' 设置块中的语句。

Adafruit 库不如我以前使用的库那么健壮,尤其是在错误处理方面,但它可能在 45 分钟的摆弄后才起作用。

如果 XBee 库在未来的 Arduino IDE 版本中停止工作,请 doG 帮助我!

于 2014-12-18T15:55:31.020 回答
0

“类型”描述了您的变量是什么。像整数 (5)、字符串 ("Hello world")、字符 ("a")、布尔值(真或假)或浮点数 (3.1415)。

看起来“dht”应该是一种类型,但 arduino IDE 无法识别它,因为它不是普通类型。这应该通过导入创建该类型的库来解决。然后arduino可以识别它。

这就是您的“#include”出现的地方。我建议将其更改为“#include”dht.h”。

此外,请仔细检查以确保 dht.h 确实是 arduino 可以访问的文件。

于 2013-07-07T01:40:22.013 回答