2014-02-26 40 views
1

我已經實現了一個網絡客戶端爲arduino發送數據從我的傳感器到數據庫拋出GET Http請求。環路上DEBUG 4arduino網頁客戶端隨機凍結

隨機

凍結這是代碼的一部分,並且here是完整的草圖鏈接。

有什麼建議嗎?

sprintf(pageAdd,"/write3.php?value0=%d&value1=%d&value2=%f&value3=%lu&value4=%f&value5=%f&value6=%f&value7=%f&value8=%f", value0, dht_humidity, temperature, pressure, altitude, gust, dir, rain, knots); 

if(!getPage(server,serverPort,pageAdd)) Serial.print(F("Fail ")); 
else Serial.print(F("Pass ")); 



byte getPage(IPAddress ipBuf,int thisPort, char *page) 
{ 
    int inChar; 
    char outBuf[128]; 

    Serial.print(F("connecting...")); 

    if(client.connect(ipBuf,thisPort)) 
    { 

    Serial.println(F("connected")); 
    sprintf(outBuf,"GET %s HTTP/1.1",page); 
    Serial.println(F("DEBUG 1")); 
    client.println(outBuf); 
    Serial.println(F("DEBUG 2")); 
    sprintf(outBuf,"Host: %s",serverName); 
    Serial.println(F("DEBUG 3")); 
    client.println(outBuf); 
    Serial.println(F("DEBUG 4")); 
    client.println(F("Connection: close\r\n")); 

    } 
    else 
    { 
    Serial.println(F("failed")); 
    return 0; 
    } 
+0

您在素描中使用了多少ram,可用的數量有多少?過去當我跑出公羊而不知道它出現意外行爲時,我遇到了問題。 –

+0

哈哈96%使用我會盡量關閉一些東西 – Manos

+0

現在每隔5.5秒發送一次http請求。 90成功完成。讓我們看 – Manos

回答

0

sprintf是危險的。它會讓你受到一次快速的黑客攻擊,但是如果黑客發生了變化,那麼你可能很難排除故障。相反,如果你寫入本地緩衝區使用snprintf(緩衝區,sizeof(緩衝區),.....最好是截斷輸出比損壞內存。

這可能是你的問題:因爲pageAdd不是非常大的緩衝區。

的sprintf(清除浮動,「/ write3.php?value0 =%d &值1 =%d &值2 =%F &值3 =%魯& VALUE4 =%F &值5 =%F & value6 =%f & value7 =%f & value8 =%f「,value0,dht_humidity,temperature,pressure,altitude,gust,dir,rain,knots);

+0

也試過這種方式: 'code' client.print(「GET /write3.php?value0=」); client.print(value0); client.print(「&value1 =」); client.print(dht_humidity); 'code' – Manos

+0

其他任何建議傢伙?仍然有問題! – Manos