2014-02-26 68 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