布列松 发表于 2015-4-13 23:43 static/image/common/back.gif
是会乱码但是,对效果无影响,我用串口接上一个“TTL转RS485模块”然后再到RS485那里
乱码是不会影响没错
不过如果不想串在一起,
也可以用 SoftwareSerial , 可接任意 两 pin 做 Tx, Rx
布列松 发表于 2015-4-13 23:44 static/image/common/back.gif
有两个问题,那个刷新可能不太好,我用nano板 好像会死机,但是在不自动刷新的情况下也会死机,
(1)刷新 1 秒确实太快,
但如果把 1 改为 10 那似乎又太久没意义了, 不如不刷新
(2)你确定是 nano 死机 ? 不是网络断讯 ? 不是 Server 问题 ?
tsaiwn 发表于 2015-4-14 01:30 static/image/common/back.gif
(1)刷新 1 秒确实太快,
但如果把 1 改为 10 那似乎又太久没意义了, 不如不刷新
(2)你确定是 nano 死机...
http://image.geek-workshop.com/forum/201504/13/221050sxennqugng8iv33a.png
可能是在我很快速的按动这些开关是,就很快死机了,应该不是网络那边断网,可能更主板有关,会不会程序上有问题,在那里可以优化的
布列松 发表于 2015-4-14 01:41 static/image/common/back.gif
可能是在我很快速的按动这些开关是,就很快死机了,应该不是网络那边断网,可能更主板有关,会不会程 ...
程序看不出问题
EtherCard 就是那样写啊
顶多在 void loop( ) {内多加 一行 delay(888); 拖延个 0.888 秒
本帖最后由 布列松 于 2015-4-14 11:39 编辑
tsaiwn 发表于 2015-4-14 02:02 static/image/common/back.gif
程序看不出问题
EtherCard 就是那样写啊
顶多在 void loop( ) {内多加 一行 delay(888); 拖延个 0.88 ...
死机的时候 串口通讯正常,用IDE打开串口通讯能看到文字,只要在死机的时候打开关闭一次串口通讯,那页面就恢复正常了,但没多久又死机....... (我怀疑是不是IP地址登录用户的数量有限制(模块的缓存问题?),(只能登陆一个用户?)因为有时我电脑上一下,手机也上一下)
能不能设置代码也是每几秒后发送一次 当前按钮状态 串口数据
布列松 发表于 2015-4-14 11:35 static/image/common/back.gif
死机的时候 串口通讯正常,用IDE打开串口通讯能看到文字,只要在死机的时候打开关闭一次串口通讯,那页 ...
串口关闭再次打开, 则 Arduino 会自动 RESET
此时相当于你去按 Arduino 那红色的 RESET 复位键
整个重跑, 所以这样不准确 !
必须让LED13 (pin 13)不断的闪烁,
如果没在闪才能确定是死机,
否则是网络的问题或 Ethernet card通讯问题
更简单方法是在 loop( ) {
内 :
static long kkk = 0;
delay(888); Serial.println(++kkk);
然后串口监视器不要关闭
持续观察一阵子
不过如果这样会影响你的继电器那还是改闪烁 LED13
tsaiwn 发表于 2015-4-14 16:18 static/image/common/back.gif
更简单方法是在 loop( ) {
内 :
static long kkk = 0;
现在查出些问题了,1、如果用旧的那个程序(只开1个LED的),就不会死机,2、用现在这个程序加了闪LED,LED正常闪,但是完全死机了,进不了IP了。
布列松 发表于 2015-4-14 17:35 static/image/common/back.gif
现在查出些问题了,1、如果用旧的那个程序(只开1个LED的),就不会死机,2、用现在这个程序加了闪LED,L ...
LED正常闪,
那不是死机 !
tsaiwn 发表于 2015-4-14 22:53 static/image/common/back.gif
LED正常闪,
那不是死机 !
嗯 我想办法其它的试一试
本帖最后由 tsaiwn 于 2015-4-16 01:37 编辑
布列松 发表于 2015-4-15 23:19 static/image/common/back.gif
嗯 我想办法其它的试一试
You can try like this version:
(See those line ending with////////////////////////////////////////////)#include <EtherCard.h>
static byte mymac[] = {0x74,0x69,0x69,0x2D,0x30,0x31};
static byte myip[] = {192,168,1,180};
byte Ethernet::buffer;
const int ledPin = 3;
const int ledPin2 = 4;
const int ledPin3 = 5;
const int ledPin4 = 6;
boolean ledStatus;
boolean ledStatus2;
boolean ledStatus3;
boolean ledStatus4;
char* on = "ON";
char* off = "OFF";
char* statusLabel;
char* buttonLabel;
char* statusLabel2;
char* buttonLabel2;
char* statusLabel3;
char* buttonLabel3;
char* statusLabel4;
char* buttonLabel4;
unsigned char rs485_ON_01 = {0x01,0x05,0x00,0x10,0xFF,0x00,0x8D,0xFF};
unsigned char rs485_OFF_01 = {0x01,0x05,0x00,0x10,0x00,0x00,0xCC,0x0F};
unsigned char rs485_ON_02 = {0x01,0x05,0x00,0x11,0xFF,0x00,0xDC,0x3F};
unsigned char rs485_OFF_02 = {0x01,0x05,0x00,0x11,0x00,0x00,0x9D,0xCF};
unsigned char rs485_ON_03 = {0x01,0x05,0x00,0x12,0xFF,0x00,0x2C,0x3F};
unsigned char rs485_OFF_03 = {0x01,0x05,0x00,0x12,0x00,0x00,0x6D,0xCF};
unsigned char rs485_ON_04 = {0x01,0x05,0x00,0x13,0xFF,0x00,0x7D,0xFF};
unsigned char rs485_OFF_04 = {0x01,0x05,0x00,0x13,0x00,0x00,0x3C,0x0F};
void setup () {
Serial.begin(9600);
Serial.println("WebLed Demo");
if (!ether.begin(sizeof Ethernet::buffer, mymac, 10))
Serial.println( "Failed to access Ethernet controller");
else
Serial.println("Ethernet controller initialized");
if (!ether.staticSetup(myip))
Serial.println("Failed to set IP address");
Serial.println();
pinMode(ledPin, OUTPUT);
digitalWrite(ledPin, LOW);
pinMode(ledPin2, OUTPUT);
digitalWrite(ledPin2, LOW);
pinMode(ledPin3, OUTPUT);
digitalWrite(ledPin3, LOW);
pinMode(ledPin4, OUTPUT);
digitalWrite(ledPin4, LOW);
ledStatus = false;
ledStatus2 = false;
ledStatus3 = false;
ledStatus4 = false;
} // setup(
void loop() {
static long noReact = 0;///////////////////////////
word len = ether.packetReceive();
word pos = ether.packetLoop(len);
if(pos) noReact = 0; //////////////////////////////
++noReact; ////////////////////////////////////////
delay(100);// 0.1 秒 ////////////////////////////
if(noReact > 3*60*1000/100) setup( );// 三分鐘沒收到; /100 : because delay(100)//////////////////////////////////////
doLed(pos);
doLed2(pos);
doLed3(pos);
doLed4(pos);
BufferFiller bfill = ether.tcpOffset();
bfill.emit_p(PSTR("HTTP/1.0 200 OK\r\n"
"Content-Type: text/html\r\nPragma: no-cache\r\n\r\n"
"<html><head><title>WebLed</title></head>"
"<body>"
"LED Status: $S "
"<a href=\"/?status=$S\"><input type=\"button\" value=\"$S\"></a>"
"<br><br>"
"LED2 Status: $S "
"<a href=\"/?status2=$S\"><input type=\"button\" value=\"$S\"></a>"
"<br><br>"
"LED3 Status: $S "
"<a href=\"/?status3=$S\"><input type=\"button\" value=\"$S\"></a>"
"<br><br>"
"LED4 Status: $S "
"<a href=\"/?status4=$S\"><input type=\"button\" value=\"$S\"></a>"
"<br><br>"
"</body></html>\r\n\r\n"
), statusLabel, buttonLabel, buttonLabel,
statusLabel2, buttonLabel2, buttonLabel2,
statusLabel3, buttonLabel3, buttonLabel3,
statusLabel4, buttonLabel4, buttonLabel4
);
ether.httpServerReply(bfill.position());
} // loop(
void doLed( word pos) {
if(pos) {
if(strstr((char *)Ethernet::buffer + pos, "GET /?status=ON") != 0) {
Serial.write(rs485_ON_01, 8);
ledStatus = true;
}// if(strstr
if(strstr((char *)Ethernet::buffer + pos, "GET /?status=OFF") != 0) {
Serial.write(rs485_OFF_01, 8);
ledStatus = false;
}
if(ledStatus) {
digitalWrite(ledPin, HIGH);
statusLabel = on;
buttonLabel = off;
} else {
digitalWrite(ledPin, LOW);
statusLabel = off;
buttonLabel = on;
}// if(..else..
}// if(pos
} // doLed(
///////////////////////////
void doLed2(word pos ) {
if(pos) {
if(strstr((char *)Ethernet::buffer + pos, "GET /?status2=ON") != 0) {
Serial.write(rs485_ON_02, 8);
ledStatus2 = true;
}
if(strstr((char *)Ethernet::buffer + pos, "GET /?status2=OFF") != 0) {
Serial.write(rs485_OFF_02, 8);
ledStatus2 = false;
}
if(ledStatus2) {
digitalWrite(ledPin2, HIGH);
statusLabel2 = on;
buttonLabel2 = off;
} else {
digitalWrite(ledPin2, LOW);
statusLabel2 = off;
buttonLabel2 = on;
}
}// if(pos
} // doLed2(
void doLed3(word pos ) {
if(pos) {
if(strstr((char *)Ethernet::buffer + pos, "GET /?status3=ON") != 0) {
Serial.write(rs485_ON_03, 8);
ledStatus3 = true;
}
if(strstr((char *)Ethernet::buffer + pos, "GET /?status3=OFF") != 0) {
Serial.write(rs485_OFF_03, 8);
ledStatus3 = false;
}
if(ledStatus3) {
digitalWrite(ledPin3, HIGH);
statusLabel3 = on;
buttonLabel3 = off;
} else {
digitalWrite(ledPin3, LOW);
statusLabel3 = off;
buttonLabel3 = on;
}
} // if(pos
} // doLed3(
void doLed4(word pos ) {
if(pos) {
if(strstr((char *)Ethernet::buffer + pos, "GET /?status4=ON") != 0) {
Serial.write(rs485_ON_04, 8);
ledStatus4 = true;
}
if(strstr((char *)Ethernet::buffer + pos, "GET /?status4=OFF") != 0) {
Serial.write(rs485_OFF_04, 8);
ledStatus4 = false;
}
if(ledStatus4) {
digitalWrite(ledPin4, HIGH);
statusLabel4 = on;
buttonLabel4 = off;
} else {
digitalWrite(ledPin4, LOW);
statusLabel4 = off;
buttonLabel4 = on;
}
}// if(pos
}// doLed4(
tsaiwn 发表于 2015-4-16 01:34 static/image/common/back.gif
You can try like this version:
(See those line ending with/////////////////////////////////// ...
串口通讯不断输出 主板上看得出 不过ip地址进不去了,换回之前4个LED控制的代码,恢复正常
tsaiwn 发表于 2015-4-16 01:34 static/image/common/back.gif
You can try like this version:
(See those line ending with/////////////////////////////////// ...
先说声谢谢先,好在有你,我才可以实现4个LED开关,{:soso_e181:}