tsaiwn 发表于 2015-4-14 01:17:31

布列松 发表于 2015-4-13 23:43 static/image/common/back.gif
是会乱码但是,对效果无影响,我用串口接上一个“TTL转RS485模块”然后再到RS485那里

乱码是不会影响没错
不过如果不想串在一起,
也可以用 SoftwareSerial , 可接任意 两 pin 做 Tx, Rx

tsaiwn 发表于 2015-4-14 01:30:14

布列松 发表于 2015-4-13 23:44 static/image/common/back.gif
有两个问题,那个刷新可能不太好,我用nano板 好像会死机,但是在不自动刷新的情况下也会死机,

(1)刷新 1 秒确实太快,
但如果把 1 改为 10 那似乎又太久没意义了, 不如不刷新
(2)你确定是 nano 死机 ? 不是网络断讯 ? 不是 Server 问题 ?

布列松 发表于 2015-4-14 01:41:48

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

可能是在我很快速的按动这些开关是,就很快死机了,应该不是网络那边断网,可能更主板有关,会不会程序上有问题,在那里可以优化的

tsaiwn 发表于 2015-4-14 02:02:18

布列松 发表于 2015-4-14 01:41 static/image/common/back.gif
可能是在我很快速的按动这些开关是,就很快死机了,应该不是网络那边断网,可能更主板有关,会不会程 ...

程序看不出问题
EtherCard 就是那样写啊
顶多在 void loop( ) {内多加 一行 delay(888); 拖延个 0.888 秒

布列松 发表于 2015-4-14 11:35:52

本帖最后由 布列松 于 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地址登录用户的数量有限制(模块的缓存问题?),(只能登陆一个用户?)因为有时我电脑上一下,手机也上一下)

能不能设置代码也是每几秒后发送一次 当前按钮状态 串口数据

tsaiwn 发表于 2015-4-14 16:14:46

布列松 发表于 2015-4-14 11:35 static/image/common/back.gif
死机的时候 串口通讯正常,用IDE打开串口通讯能看到文字,只要在死机的时候打开关闭一次串口通讯,那页 ...

串口关闭再次打开, 则 Arduino 会自动 RESET
此时相当于你去按 Arduino 那红色的 RESET 复位键
整个重跑, 所以这样不准确 !
必须让LED13 (pin 13)不断的闪烁,
如果没在闪才能确定是死机,
否则是网络的问题或 Ethernet card通讯问题

tsaiwn 发表于 2015-4-14 16:18:43

更简单方法是在 loop( ) {
内 :
static long kkk = 0;
delay(888); Serial.println(++kkk);
然后串口监视器不要关闭
持续观察一阵子
不过如果这样会影响你的继电器那还是改闪烁 LED13

布列松 发表于 2015-4-14 17:35:37

tsaiwn 发表于 2015-4-14 16:18 static/image/common/back.gif
更简单方法是在 loop( ) {
内 :
static long kkk = 0;


现在查出些问题了,1、如果用旧的那个程序(只开1个LED的),就不会死机,2、用现在这个程序加了闪LED,LED正常闪,但是完全死机了,进不了IP了。

tsaiwn 发表于 2015-4-14 22:53:48

布列松 发表于 2015-4-14 17:35 static/image/common/back.gif
现在查出些问题了,1、如果用旧的那个程序(只开1个LED的),就不会死机,2、用现在这个程序加了闪LED,L ...

LED正常闪,
那不是死机 !

布列松 发表于 2015-4-15 23:19:53

tsaiwn 发表于 2015-4-14 22:53 static/image/common/back.gif
LED正常闪,
那不是死机 !

嗯 我想办法其它的试一试

tsaiwn 发表于 2015-4-16 01:34:39

本帖最后由 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(

布列松 发表于 2015-4-16 16:22:46

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控制的代码,恢复正常

布列松 发表于 2015-4-17 20:00:44

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:}
页: 1 2 3 [4]
查看完整版本: enc28j60 控制多个 led IO 的代码,模块本身带控制的html页面