→ cs8425: 會不會是你中斷的code跑太久? 問這類的問題最好附上完整程 06/09 16:42
承蒙回答,不勝感激。
這邊是我的程式碼,因為功能簡單,相對應的程式也很簡單
#include <SPI.h>
#include <Ethernet.h>
byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};
IPAddress ip(192,168,101,101);
EthernetServer server(80);
EthernetClient client;
char SFDserver[] = "192.168.0.81";
unsigned long lastConnectionTime = 0;
boolean lastConnected = false;
const unsigned long postingInterval = 5*1000;
const int SFD05 = 13;
static unsigned long countValue = 0; // 計數器數值
static unsigned long lastCountValue = 0; // 上次計數器數值
unsigned long lastCountTime = 0; // 計數器數時間
int SFD05Status=0;
int SFD05LastStatus=0;
boolean realCount = false;
String sSFD05Count;
const String sSFDNo="F27B_A";
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
delay(1000);
Ethernet.begin(mac,ip);
server.begin();
Serial.print("My IP Address: ");
Serial.println(Ethernet.localIP());
}
void loop()
{
if(client.available())
{
char c = client.read();
Serial.write(c);
}
// 失去連線
if(!client.connected() && lastConnected)
{
Serial.println();
Serial.println("disconnecting");
client.stop();
}
// 當目前沒有連線且距離上次連線已有 5 秒鐘,重新連線
if(!client.connected() && (millis() - lastConnectionTime > postingInterval))
{
if (countValue != lastCountValue)
{
httpRequest();
lastCountValue = countValue;
}
}
lastConnected = client.connected();
countRequest();
}
void httpRequest()
{
if(client.connect(SFDserver,80))
{
Serial.println("connecting...");
//請求連線標頭檔
client.print("GET /SFD/u1.php?type=sensor&"+sSFDNo+"=");
client.print(countValue);
client.println(" HTTP/1.1");
client.println("Host:192.168.0.190");
client.println("User-Agent:arduino-ethernet");
client.println("Connection:close");
client.println();
lastConnectionTime = millis();
} //http://192.168.0.81/SFD/u1.php?type=sensor&F27B_A=4489
else
{
Serial.println("connection failed");
Serial.println("disconnecting");
client.stop();
}
}
void countRequest()
{
SFD05Status = digitalRead(SFD05);
if((SFD05Status == 0) && (SFD05LastStatus == 1) )
{
countValue++;
/*Serial.print("SFD05 Count Value: ");
Serial.println(countValue);
//lastCountTime= millis(); */
}
SFD05LastStatus = SFD05Status;
delay(1);
}
在輸入不頻繁的情況下,可以正常運作,
可惜在較頻繁狀態下,網路就無法順利對外作溝通了。
麻煩您了,感恩。
※ 編輯: sinzen (59.125.235.67), 06/10/2018 21:01:01
→ smtmike: 解開了嗎?如尚未站內信 08/06 06:25
感恩您的回覆,後來我把問題請我同事處理。
他有解決了,雖然不清楚是怎麼回事。
謝謝您。
※ 編輯: sinzen (59.125.235.67), 08/27/2018 16:56:57