作者sinzen (冒险传人)
看板ASM
标题[问题] 硬体中断频繁,无法顺利网路连线
时间Sat Jun 9 09:44:13 2018
网路上的各位先进您好:
我试着用 Arduino UNO R3 来当计数器,当一个信号进来时,
他在板子上的 5V 与 D13 形成通路,这样子一来,我可以藉由
板子上的 LED 灯来判断是否有信号过来。
我想请教的是:当进来的频率不高时,他能够顺利建立网路连线,
把值抛给 Server 上的资料库,以利我用网页来监控。可是当我的频率
高到约略一秒十次左右时,他的网路连线建立就被迫中断,也因为这样子,
我无法把值即时抛给 Server,也就无法达到当初要即时监的目的。
请问,我该如何来进行,才能避掉这个问题呢?
还望您能拨冗不吝告知,谢谢您。
程式与资料库是参加崑山科大的产业人才投资计中画的
物联网智慧之鱼菜共生远端控制系统的内容而来。
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 59.125.235.67
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/ASM/M.1528508655.A.63C.html
1F:→ 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
2F:→ smtmike: 解开了吗?如尚未站内信 08/06 06:25
感恩您的回覆,後来我把问题请我同事处理。
他有解决了,虽然不清楚是怎麽回事。
谢谢您。
※ 编辑: sinzen (59.125.235.67), 08/27/2018 16:56:57