2017-08-08 81 views
0

包括在這個問題是我已經放在一起經營蘑菇溫室愛好種植者的代碼。我已經有了一個現有的工作程序,但是已經升級了一些硬件元素,並且認爲我可以減少程序中的一些脂肪,並添加一些更復雜的功能。在這樣做的時候,我創建了一個程序,該程序可以在沒有錯誤的情況下進行編譯,但不會在設置中卡住。Arduino草圖將不會循環

該程序由Arduino Mega 2560運行。其他硬件包括RTC模塊,HTU21DF溼度/溫度傳感器和繼電器模塊。該設備根據來自RTC時間的邏輯陳述來操作燈和風扇,並根據HTU21DF傳感器的讀數激活霧化泵。 (更多的是在晚些時候發佈)。

如果有人可以查看此代碼並告訴我問題出在哪裏,因爲我非常希望使用更準確的HTU傳感器來替換我的DHT11(boo)。


#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()不如預期。 您應該確保它連接正確,包括電源引腳和兩條數據線。

但是,您還應該在串行輸出中顯示一條消息,指出:「找不到傳感器!」

從你身邊的進一步信息,將需要例如爲:

  • 根據你的結論是什麼信息,「這卡在設置」?
  • 你從串口輸出得到什麼?
  • 您升級了哪些硬件元件,並且您是否單獨進行了測試?

爲了便於排除故障,我可以推薦一個一個地測試每個主要組件 - 例如運行隨HTU21D-F傳感器庫捆綁的示例草圖,看看它是否有效。

+0

每個組件都經過單獨測試,唯一改變的硬件是從DHT11到HTU21DF的溼度傳感器。在示例草圖和「測試」程序中,我寫的傳感器工作得很好。 – Cameron

+0

我想說它正在「陷入困境」是一種措辭不佳的方式。它顯然使它過去設置,因爲串行監視器將打印2行,但這2行只打印一次,就是這樣。初始設定時間將打印,並顯示「HTU21D-F測試」。這就對了。它不會循環並打印更新的時間或溼度值。 – Cameron

+0

我相信這是HTU測試中的一些事情,因爲如果我評論一切與溼度傳感器有關的事情,時間將運行良好,循環工作。 – Cameron

0

這是無法令人尷尬的,但經過審查我的佈線(我不相信我這樣做),我已經在麪包板上打開了+/-線。我換了電線,沒有更多的問題....我發誓,佈線一直是我的問題!