2014-04-16 139 views
0

該代碼將數據發送到我的服務器,它正在使用PHP獲取併發送到MySQL。 主要問題是,我使用循環void loop(),但它只執行一次任務。如果我將重置Arduino,然後它發送數據兩次等..我試圖發送多個數據延遲沒有一個週期,但它重複發送數據,這是發送第一..幫助:)發送數據到WEB服務器:數據正在發送,但只有一次

#include <SPI.h> 
#include <Ethernet.h> 
#include <stdlib.h>  //Including libraries 

int moi_int = 12; 
int temp_int = 13;       //doing some convertion         
int moi_int1 = moi_int %10;                     
int moi_int2 = moi_int - moi_int1; 
int moi_int3 = moi_int2/10; 
char moi1 = (char)(((int)'0')+moi_int1); 
char moi2 = (char)(((int)'0')+moi_int3); 
int temp_int1 = temp_int %10;                     
int temp_int2 = temp_int - temp_int1; 
int temp_int3 = temp_int2/10; 
char temp1 = (char)(((int)'0')+temp_int1);  //convertion 
char temp2 = (char)(((int)'0')+temp_int3);  

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; 
byte server[] = { my server };  
IPAddress ip(my ip); 
EthernetClient client; 


void setup() { 
    Serial.begin(9600); 
} 




void SendInfo()  //Info 
{ 
    char string[29];  //Here is displayed by char some adress (data) I need to send  

string[0] = 'G'; string[1] = 'E'; string[2] = 'T';  string[3] = ' ';  string[4] = '/';  string[5] = 'a'; string[6] = 'd';  string[7] = 'd'; 
    string[8] = '.';  string[9] = 'p';  string[10] = 'h';  string[11] = 'p';  string[12] = '?';  string[13] = 't';  string[14] = 'e';  string[15] = 'm'; 
    string[16] = 'p';  string[17] = '1';  string[18] = '=';  string[19] = temp2;  string[20] = temp1;  string[21] = '&';  string[22] = '&';  
    string[23] = 'm';  string[24] = 'o';  string[25] = 'i';  string[26] = '1';  string[27] = '=';  string[28] = moi2;  string[29] = moi1; 

    String adresas(string);  
    client.println(adresas);  // Sending Data 
    client.print(" HTTP/1.1"); 
    client.println("Host: my server"); 
    client.println("Connection: close"); 
    client.println(); 
} 



void Connect()    //Connecting 
{ 
    Ethernet.begin(mac, ip); 
    delay(1000); 
    if (client.connect(server, 80)) {      
    delay(1000); 
    SendInfo(); 
    delay(1000); 
    } 
    else Serial.println("connection failed"); 
} 


void loop()    //Main Loop 
{ 
Connect();     
} 

回答

0

你應該在建立呼叫開始()只有一次:

void setup() { 
    ... 
    Ethernet.begin() 

你叫

client.connect(server, 80) 

,但從來沒有一個匹配的脫節。您需要添加這些一個清理的連接:

if (client.connect(server, 80)) {      
    ... 
    client.stop(); 
} 

另一種方法是重新用戶在每次循環之前打開的連接。

// open the connection if needed 
if(!client.connected()) { 
    client.connect(server, 80); 
} 

// ensure connection is available before trying to write 
if(client.connected()) { 
    // do something with connection 
} 

如果你將要傳輸非常頻繁的小數據,則因爲更短的時間被浪費在連接的打開/關閉這第二種方法比較好。