极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

楼主: 布列松

enc28j60 控制多个 led IO 的代码,模块本身带控制的html页面

[复制链接]
发表于 2015-4-14 01:17:31 | 显示全部楼层
布列松 发表于 2015-4-13 23:43
是会乱码但是,对效果无影响,我用串口接上一个“TTL转RS485模块”然后再到RS485那里

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

使用道具 举报

发表于 2015-4-14 01:30:14 | 显示全部楼层
布列松 发表于 2015-4-13 23:44
有两个问题,那个刷新可能不太好,我用nano板 好像会死机,但是在不自动刷新的情况下也会死机,

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

使用道具 举报

 楼主| 发表于 2015-4-14 01:41:48 | 显示全部楼层
tsaiwn 发表于 2015-4-14 01:30
(1)刷新 1 秒确实太快,
但如果把 1 改为 10 那似乎又太久没意义了, 不如不刷新
(2)你确定是 nano 死机  ...



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

使用道具 举报

发表于 2015-4-14 02:02:18 | 显示全部楼层
布列松 发表于 2015-4-14 01:41
可能是在我很快速的按动这些开关是,就很快死机了,应该不是网络那边断网,可能更主板有关,会不会程 ...

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

使用道具 举报

 楼主| 发表于 2015-4-14 11:35:52 | 显示全部楼层
本帖最后由 布列松 于 2015-4-14 11:39 编辑
tsaiwn 发表于 2015-4-14 02:02
程序看不出问题
EtherCard 就是那样写啊
顶多在 void loop( ) {  内多加 一行 delay(888); 拖延个 0.88 ...


死机的时候 串口通讯正常,用IDE打开串口通讯能看到文字,只要在死机的时候打开关闭一次串口通讯,那页面就恢复正常了,但没多久又死机....... (我怀疑是不是IP地址登录用户的数量有限制(模块的缓存问题?),(只能登陆一个用户?)因为有时我电脑上一下,手机也上一下)

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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

发表于 2015-4-14 16:14:46 | 显示全部楼层
布列松 发表于 2015-4-14 11:35
死机的时候 串口通讯正常,用IDE打开串口通讯能看到文字,只要在死机的时候打开关闭一次串口通讯,那页 ...

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

回复 支持 反对

使用道具 举报

发表于 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
更简单方法是在 loop( ) {
内 :
static long kkk = 0;

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

使用道具 举报

发表于 2015-4-14 22:53:48 | 显示全部楼层
布列松 发表于 2015-4-14 17:35
现在查出些问题了,1、如果用旧的那个程序(只开1个LED的),就不会死机,2、用现在这个程序加了闪LED,L ...

LED正常闪,
那不是死机 !
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-4-15 23:19:53 | 显示全部楼层
tsaiwn 发表于 2015-4-14 22:53
LED正常闪,
那不是死机 !

嗯 我想办法其它的试一试
回复 支持 反对

使用道具 举报

发表于 2015-4-16 01:34:39 | 显示全部楼层
本帖最后由 tsaiwn 于 2015-4-16 01:37 编辑
布列松 发表于 2015-4-15 23:19
嗯 我想办法其它的试一试


You can try like this version:
(See those line ending with  ////////////////////////////////////////////)
  1. #include <EtherCard.h>

  2. static byte mymac[] = {0x74,0x69,0x69,0x2D,0x30,0x31};
  3. static byte myip[] = {192,168,1,180};
  4. byte Ethernet::buffer[700];

  5. const int ledPin = 3;
  6. const int ledPin2 = 4;
  7. const int ledPin3 = 5;
  8. const int ledPin4 = 6;

  9. boolean ledStatus;
  10. boolean ledStatus2;
  11. boolean ledStatus3;
  12. boolean ledStatus4;

  13. char* on = "ON";
  14. char* off = "OFF";

  15. char* statusLabel;
  16. char* buttonLabel;
  17. char* statusLabel2;
  18. char* buttonLabel2;
  19. char* statusLabel3;
  20. char* buttonLabel3;
  21. char* statusLabel4;
  22. char* buttonLabel4;

  23. unsigned char rs485_ON_01[8] = {0x01,0x05,0x00,0x10,0xFF,0x00,0x8D,0xFF};
  24. unsigned char rs485_OFF_01[8] = {0x01,0x05,0x00,0x10,0x00,0x00,0xCC,0x0F};

  25. unsigned char rs485_ON_02[8] = {0x01,0x05,0x00,0x11,0xFF,0x00,0xDC,0x3F};
  26. unsigned char rs485_OFF_02[8] = {0x01,0x05,0x00,0x11,0x00,0x00,0x9D,0xCF};

  27. unsigned char rs485_ON_03[8] = {0x01,0x05,0x00,0x12,0xFF,0x00,0x2C,0x3F};
  28. unsigned char rs485_OFF_03[8] = {0x01,0x05,0x00,0x12,0x00,0x00,0x6D,0xCF};

  29. unsigned char rs485_ON_04[8] = {0x01,0x05,0x00,0x13,0xFF,0x00,0x7D,0xFF};
  30. unsigned char rs485_OFF_04[8] = {0x01,0x05,0x00,0x13,0x00,0x00,0x3C,0x0F};

  31. void setup () {

  32.   Serial.begin(9600);
  33.   Serial.println("WebLed Demo");

  34.   if (!ether.begin(sizeof Ethernet::buffer, mymac, 10))
  35.     Serial.println( "Failed to access Ethernet controller");
  36. else
  37.    Serial.println("Ethernet controller initialized");

  38.   if (!ether.staticSetup(myip))
  39.     Serial.println("Failed to set IP address");

  40.   Serial.println();

  41.   pinMode(ledPin, OUTPUT);
  42.   digitalWrite(ledPin, LOW);
  43.   pinMode(ledPin2, OUTPUT);
  44.   digitalWrite(ledPin2, LOW);
  45.   pinMode(ledPin3, OUTPUT);
  46.   digitalWrite(ledPin3, LOW);
  47.   pinMode(ledPin4, OUTPUT);
  48.   digitalWrite(ledPin4, LOW);

  49.   ledStatus = false;
  50.   ledStatus2 = false;
  51.   ledStatus3 = false;
  52.   ledStatus4 = false;
  53. } // setup(

  54. void loop() {
  55.   static long noReact = 0;  ///////////////////////////
  56.   word len = ether.packetReceive();
  57.   word pos = ether.packetLoop(len);
  58.   if(pos) noReact = 0;   //////////////////////////////
  59.   ++noReact;   ////////////////////////////////////////
  60.   delay(100);  // 0.1 秒   ////////////////////////////
  61.   if(noReact > 3*60*1000/100) setup( );  // 三分鐘沒收到; /100 : because delay(100)  //////////////////////////////////////

  62.   doLed(pos);
  63.   doLed2(pos);
  64.   doLed3(pos);
  65.   doLed4(pos);

  66.     BufferFiller bfill = ether.tcpOffset();
  67.     bfill.emit_p(PSTR("HTTP/1.0 200 OK\r\n"
  68.       "Content-Type: text/html\r\nPragma: no-cache\r\n\r\n"
  69.       "<html><head><title>WebLed</title></head>"
  70.       "<body>"
  71.       "LED Status: $S "
  72.       "<a href="/?status=$S"><input type="button" value="$S"></a>"
  73.       "<br><br>"

  74.       "LED2 Status: $S "
  75.       "<a href="/?status2=$S"><input type="button" value="$S"></a>"
  76.       "<br><br>"

  77.       "LED3 Status: $S "
  78.       "<a href="/?status3=$S"><input type="button" value="$S"></a>"
  79.       "<br><br>"

  80.       "LED4 Status: $S "
  81.       "<a href="/?status4=$S"><input type="button" value="$S"></a>"
  82.       "<br><br>"

  83.       "</body></html>\r\n\r\n"      
  84.       ), statusLabel, buttonLabel, buttonLabel,
  85.       statusLabel2, buttonLabel2, buttonLabel2,
  86.       statusLabel3, buttonLabel3, buttonLabel3,
  87.       statusLabel4, buttonLabel4, buttonLabel4
  88.       );
  89.     ether.httpServerReply(bfill.position());
  90. } // loop(

  91. void doLed( word pos) {
  92.    if(pos) {
  93.     if(strstr((char *)Ethernet::buffer + pos, "GET /?status=ON") != 0) {
  94.       Serial.write(rs485_ON_01, 8);
  95.       ledStatus = true;
  96.     }// if(strstr

  97.     if(strstr((char *)Ethernet::buffer + pos, "GET /?status=OFF") != 0) {
  98.       Serial.write(rs485_OFF_01, 8);
  99.       ledStatus = false;
  100.     }

  101.     if(ledStatus) {
  102.       digitalWrite(ledPin, HIGH);
  103.       statusLabel = on;
  104.       buttonLabel = off;
  105.     } else {
  106.       digitalWrite(ledPin, LOW);
  107.       statusLabel = off;
  108.       buttonLabel = on;
  109.     }// if(..else..
  110.    }// if(pos
  111. } // doLed(
  112. ///////////////////////////
  113. void doLed2(word pos ) {
  114.    if(pos) {
  115.     if(strstr((char *)Ethernet::buffer + pos, "GET /?status2=ON") != 0) {
  116.       Serial.write(rs485_ON_02, 8);
  117.       ledStatus2 = true;
  118.     }

  119.     if(strstr((char *)Ethernet::buffer + pos, "GET /?status2=OFF") != 0) {
  120.       Serial.write(rs485_OFF_02, 8);
  121.       ledStatus2 = false;
  122.     }

  123.     if(ledStatus2) {
  124.       digitalWrite(ledPin2, HIGH);
  125.       statusLabel2 = on;
  126.       buttonLabel2 = off;
  127.     } else {
  128.       digitalWrite(ledPin2, LOW);
  129.       statusLabel2 = off;
  130.       buttonLabel2 = on;
  131.     }
  132.    }// if(pos
  133. } // doLed2(
  134. void doLed3(word pos ) {
  135.    if(pos) {
  136.     if(strstr((char *)Ethernet::buffer + pos, "GET /?status3=ON") != 0) {
  137.      Serial.write(rs485_ON_03, 8);
  138.       ledStatus3 = true;
  139.     }

  140.     if(strstr((char *)Ethernet::buffer + pos, "GET /?status3=OFF") != 0) {
  141.      Serial.write(rs485_OFF_03, 8);
  142.       ledStatus3 = false;
  143.     }

  144.     if(ledStatus3) {
  145.       digitalWrite(ledPin3, HIGH);
  146.       statusLabel3 = on;
  147.       buttonLabel3 = off;
  148.     } else {
  149.       digitalWrite(ledPin3, LOW);
  150.       statusLabel3 = off;
  151.       buttonLabel3 = on;
  152.     }
  153.    } // if(pos
  154. } // doLed3(
  155. void doLed4(word pos ) {
  156.    if(pos) {
  157.     if(strstr((char *)Ethernet::buffer + pos, "GET /?status4=ON") != 0) {
  158.     Serial.write(rs485_ON_04, 8);
  159.       ledStatus4 = true;
  160.     }

  161.     if(strstr((char *)Ethernet::buffer + pos, "GET /?status4=OFF") != 0) {
  162.     Serial.write(rs485_OFF_04, 8);
  163.       ledStatus4 = false;
  164.     }

  165.     if(ledStatus4) {
  166.       digitalWrite(ledPin4, HIGH);
  167.       statusLabel4 = on;
  168.       buttonLabel4 = off;
  169.     } else {
  170.       digitalWrite(ledPin4, LOW);
  171.       statusLabel4 = off;
  172.       buttonLabel4 = on;
  173.     }
  174.    }// if(pos
  175. }// doLed4(
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-4-16 16:22:46 | 显示全部楼层
tsaiwn 发表于 2015-4-16 01:34
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
You can try like this version:
(See those line ending with  /////////////////////////////////// ...


先说声谢谢先,好在有你,我才可以实现4个LED开关,{:soso_e181:}
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-5-18 10:25 , Processed in 0.046784 second(s), 16 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表