-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

昨日、Arduino 0022 で記述された DHT22 センサーを使用してスケッチを更新しているときに、まったく同じ問題が発生しました。Arduino 1.0.5 IDE で編集しようとしていました。複数のコンパイル エラー、特に関数 millis() で。0022 IDE を開けばうまくいったかもしれないと思いますが、スケッチをこの 10 年間に持ち込む時が来たと思いました ;)

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();」でした。setup ブロックのステートメント。

Adafruit ライブラリは、特にエラー処理に関して、私が使用していた以前のライブラリほど堅牢ではありませんが、おそらく 45 分間いじっただけで機能しました。

XBee ライブラリが将来の Arduino IDE リリースで動作しなくなった場合、doG が私を助けてくれますように!

于 2014-12-18T15:55:31.020 に答える
1

あなたがすべき特定のバグについて

'dht' は型を指定していません

つまりdht、コンパイラが意味を理解できる場所にない単語があることを意味します。

タイプに変更するにはどうすればよいですか?

あなたはそれを型に変更したくありません.あなたが得ているコンパイルの問題を解決したいのです.

タイプとはどういう意味ですか?

この件に関するK&Rを読む必要があります。型とは、一貫性のあるコードを作成するように制約するルールです。

より適切なサポートを提供するために、発生しているエラー全体を質問にコピーしてください。

エラーが次の行にあると仮定しましょう。

#include <dht.h>
dht DHT;  

コンパイラはdht、 が定義されているのを見たことがないため、 が何であるかを知りません。タイプ定義dht.hを含める必要があるヘッダーを含める必要があると思います。dhtファイルシステムにあるかどうかをdht.h確認し、スケッチのディレクトリにプッシュする必要があります。最後に を に変更する#include <dht.h>と、ローカル ディレクトリで#include "dht.h"が検索されます。dht.h

編集:申し訳ありませんが、ここで私が言ったこと以上にあなたを助けることができるとは思いません. 問題は、問題を解決するために私が言っていることを理解していないことです。それを説明することは、C プログラミングのレッスンを提供することになります。そのため、まず K&Rを読み始め、C/C++/Arduino プログラミング コースに参加し (おそらくあなたの地元のハッカー スペースで?)、友人に助けを求め、何が起こっているのかを説明してもらいます。

于 2013-07-05T09:02:34.703 に答える
0

「タイプ」は、変数が何であるかを説明します。整数 (5)、文字列 ("Hello world")、文字 ("a")、ブール値 (true または false)、または float (3.1415) のように。

「dht」はタイプであると思われますが、通常のタイプではないため、arduino IDE はそれを認識しません。これは、そのタイプを作成するライブラリをインポートすることで解決する必要があります。その後、arduinoはそれを認識できます。

ここで「#include」の出番です。「#include "dht.h"」に変更することをお勧めします。

また、dht.h が実際に arduino がアクセスできるファイルであることを再確認してください。

于 2013-07-07T01:40:22.013 に答える