2014-04-16 27 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 
} 

如果你将要传输非常频繁的小数据,则因为更短的时间被浪费在连接的打开/关闭这第二种方法比较好。