【问题标题】:what does type error mean in ArduinoArduino中的类型错误是什么意思
【发布时间】:2013-07-03 06:30:27
【问题描述】:

我正在使用我朋友的代码建立一个气象站。但是,他是 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

【问题讨论】:

  • 没有魔法。 'dht' does not name a type 表示您试图在需要类型的地方使用标识符 dht,但显然它不是类型。
  • @userXXX 如果您不知道 C 编程语言上下文中的类型是什么,那么就会出现严重的问题。抓住 K&R 并阅读和学习它。

标签: arduino weather


【解决方案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 帮助我!

【讨论】:

    【解决方案2】:

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

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

    这是您的“#include”的用武之地。我建议将其更改为“#include”dht.h。

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

    【讨论】:

      【解决方案3】:

      关于你应该知道的具体错误

      'dht' 没有命名类型

      这意味着你有dht这个词,它不在编译器可以理解你的意思的地方。

      如何将其更改为类型?

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

      类型是什么意思?

      您应该阅读the subject 上的K&R。类型是限制您编写连贯代码的规则。

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

      假设错误在以下行:

      #include <dht.h>
      dht DHT;  
      

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

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

      【讨论】:

      • 我应该如何修复它?
      • 我将#include 更改为#include ,使其与草图的目录相匹配。但是错误仍然存​​在。在我摆脱 dht DHT 之后;错误变为:DHT 未在此范围内声明。
      • 当然可以,DHT 是您的代码中使用的一个实例!您需要找到包含DHT 类定义的dht.h。而且你真的应该学习 C/C++ 的基础知识,这样你才能明白你在做什么......
      • 好的,我想我纠正了这个问题。但随后又出现了一个。 stackoverflow.com/questions/17488039/…
      • 我刚刚意识到我的计算机无法识别代码开头的“DHT22.h”。它说没有这样的文件或目录。但是,我创建了一个包含 .h 和 .cpp 文件的单独库。所以,一定是Arduino程序本身有问题吧?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-07
      • 2018-11-11
      相关资源
      最近更新 更多