2017-08-08 18 views
0

趣味の栽培者のためにキノコの温室を運営するために一緒に作ったコードです。私はすでに既存の作業プログラムを持っていますが、その後いくつかのハードウェア要素をアップグレードして、私のプログラムからいくらかの脂肪を取り除き、より洗練された機能を追加するかもしれないと考えました。そうすることで、エラーなくコンパイルされるが、セットアップに邪魔されても実行されないプログラムを作成した。Arduinoスケッチがループしない

プログラムはArduino Mega 2560によって実行されています。その他のハードウェアには、RTCモジュール、HTU21DF湿度/温度センサー、およびリレーモジュールが含まれています。デバイスは、RTC時間からのロジックステートメントに従って、ライトとファンを動作させ、HTU21DFセンサの読みに基づいてフォグポンプを起動します。 (後でこれでもっと来る)。

誰かがこのコードを見直して、私のDHT11(boo)を置き換えるために、より正確なHTUセンサーでこれをインストールしたいと思っていたら、どこに問題があるのか​​教えてください。


#include <LiquidCrystal_I2C.h> 
#include <Adafruit_HTU21DF.h> 
#include <DS3232RTC.h> 
#include <Time.h> 
#include <Wire.h> 

LiquidCrystal_I2C lcd(0x27,16,2); 
Adafruit_HTU21DF htu = Adafruit_HTU21DF(); 


void setup() { 

    pinMode(22, OUTPUT); 
    pinMode(23, OUTPUT); 
    pinMode(24, OUTPUT); 
    pinMode(50, OUTPUT); 

    Serial.begin(38400); 

setTime(18,30,50,4,1,16); 

Serial.println("HTU21D-F test"); 

if (!htu.begin()) { 
    Serial.println("Couldn't find sensor!"); 
    while (1); 
} 
} 

void loop() 
{ 
digitalClockDisplay(); 
fanTimer(); 
lightTimer(); 
humiditySensor(); 
} 

void digitalClockDisplay(){ 

// digital clock display of the time 
// lcd.setCursor(0, 0); 
Serial.print("Time "); 
Serial.print(hour()); 
printDigits(minute()); 
printDigits(second()); 
Serial.println(); 
} 

void printDigits(int digits){ 
// utility function for digital clock display: prints preceding colon and leading 0 
Serial.print(":"); 
if(digits < 10) 
Serial.print('0'); 
Serial.print(digits); 
} 

void fanTimer(){ 
if (
    (minute() >= 0 && minute() < 4) 
    //|| (minute() >= 12 && minute() < 14) 
    || (minute() >= 20 && minute() < 24) 
    //|| (minute() >= 32 && minute() < 34) 
    || (minute() >= 40 && minute() < 44)) 
    //|| (minute() >= 52 && minute() < 54)) 
{ 
    digitalWrite (23, LOW); 
} 
else 
{ 
    digitalWrite (23, HIGH); 
}  
} 

void lightTimer(){ 
if (hour() >= 6 && hour() < 18) 
{ 
digitalWrite (22, LOW); 
} 
else 
{ 
    digitalWrite (22, HIGH); 
} 
} 

void humiditySensor() { 
float h = htu.readHumidity(); 

    // lcd.setCursor(0,1); 
    Serial.print("Hum: "); 
    Serial.println(htu.readHumidity()); 
    delay(500); 


    if (h <= 95) 
    { 
    digitalWrite (50, HIGH); 
    } 
    else 
    { 
    digitalWrite (50, LOW); 
    } 
} 
+0

「センサーが見つかりませんでした!」と表示されますか? – Piglet

答えて

1

基本的には、あなたのコードがセットアップでをはまり込むことができる唯一の場所は、それがセンサーへの接続に失敗したり、センサの応答がないようである湿度センサーの初期化手順htu.begin()であります期待される。 電源ピンと2本のデータラインを含め、正しく接続されていることを確認してください。

ただし、次のようなメッセージがシリアル出力で表示されます。「センサーが見つかりませんでした!」あなたの側からのさらなる情報は、例えば必要とされるであろう

  • あなたは「それはセットアップで立ち往生」と結論している情報によると?
  • シリアル出力からはどうしますか?
  • どのハードウェア要素をアップグレードして個別にテストしましたか?

それが簡単に私は1つですべての主要なコンポーネント1をテストすることをお勧めすることができ、トラブルシューティングできるようにする - 例えばHTU21D-Fセンサーのライブラリにバンドルし、それが動作するかどうかを確認してきた例のスケッチを実行します。

+0

各コンポーネントは個別にテストされ、変更する唯一のハードウェアはDHT11からHTU21DFまでの湿度センサーでした。サンプルのスケッチと "test"プログラムでは、センサはうまく動作しました。 – Cameron

+0

「セットアップに詰まってしまった」という言葉は、言葉遣いが貧弱なことだと思います。シリアルモニタは2行を出力するので、明らかに過去の設定になりますが、これらの2行は1回だけ印刷されます。初期設定時間と "HTU21D-F Test"が印刷されます。それだ。更新された時間または湿度の値をループバックして印刷しません。 – Cameron

+0

私はHTUテストで何かと信じています。なぜなら、私が湿度センサを使用しなければならないことすべてをコメントすれば、時間はうまく動作し、ループが機能するからです。 – Cameron

0

これは恥ずかしいことですが、私の配線を見直した後、私はブレッドボードで+/-ラインを切り替えました。私はワイヤーを交換しました、それ以上の問題はありません....私は誓い、配線は常に私の問題です!

関連する問題