我将灯和风扇连接到一个八通道继电器板,它连接到我的arduino和以太网屏蔽。
html页面加载正常,所有继电器都能正常工作,但几个小时后html页面停止加载,直到我按下重置。
这是代码,真的很感激一些帮助。
检查附件中的源代码
/*Induino R3 User Guide - Program 18.2 - A Simple Webserver that Controls using Links
Modified original Webserver Example
A simple web server that shows the value of the analog input pins.
using an Arduino Wiznet Ethernet shield.
Circuit:
* Ethernet shield attached to pins 10, 11, 12, 13
* Analog inputs attached to pins A0 through A5 (optional)
created 18 Dec 2009
by David A. Mellis
modified 9 Apr 2012
by Tom Igoe
*/
#include <SPI.h>
#include <Ethernet.h>
// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network:
byte mac[] = {
0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192,168,1,177);
// Initialize the Ethernet server library
// with the IP address and port you want to use
// (port 80 is default for HTTP):
EthernetServer server(80);
String req; // a variable to store the GET request
boolean state = 0; // a variable to store the state of the LED
boolean state1 = 0;
boolean state2 = 0;
boolean state3 = 0;
boolean state4 = 0; // a variable to store the state of the LED
boolean state5 = 0;
boolean state6 = 0;
boolean state7 = 0;
String state_val[]={"OFF","ON"}; // A Variable to store the State of the LED as String
String state_val1[]={"1OFF","1ON"};
String state_val2[]={"2OFF","2ON"};
String state_val3[]={"3OFF","3ON"};
String state_val4[]={"4OFF","4ON"}; // A Variable to store the State of the LED as String
String state_val6[]={"6OFF","6ON"};
String state_val7[]={"7OFF","7ON"};
void setup() {
// Open serial communications and wait for port to open:
Serial.begin(9600);
while (!Serial) {
; // wait for serial port to connect. Needed for Leonardo only
}
// start the Ethernet connection and the server:
Ethernet.begin(mac, ip);
server.begin();
Serial.print("server is at ");
Serial.println(Ethernet.localIP());
pinMode(5,OUTPUT); // RGB LED RED is on Pin 6
pinMode(6,OUTPUT);
pinMode(7,OUTPUT);
pinMode(8,OUTPUT);
pinMode(2,OUTPUT); // RGB LED RED is on Pin 6
pinMode(3,OUTPUT);
pinMode(9,OUTPUT);
pinMode(14,OUTPUT);
}
void loop() {
// listen for incoming clients
EthernetClient client = server.available();
if (client) { // Check if there is a client available
Serial.println("new client");
while (client.connected()) { // check if the client is connected
if (client.available()) { // Check if there is a request from the client
Serial.print("$$$$");
req=""; // reset the request variable
while(client.available()) // Read data from the client 1 byte at a time as long as there is data
{
char c=client.read(); // Read 1 byte of data from the client
if(c==13) // Check if the data read is a Carriage Return a.ka. Enter, This means end of first line - the line starting with GET and ending with HTTP/1.1
break; // Since we have read the first line, we need not read the remaining data for storage, so exit the while loop
req += c; // append the read data to the existing value
delayMicroseconds(1000);
}
// if the while loop above exited from the break statement, then there is data in the client buffer, which needs to be read to be removed
// we need to read this data to empty the buffer
while(client.available()) // While loop to read the data to empty buffer
{
client.read();
delayMicroseconds(1000);
}
Serial.println(req); // print the value of the request to the Serial Monitor for debugging
Serial.println("XXX");
}
if(find_string(req,"GET /?ON")) // Check if the received Request containts the String ON
{
state = 1; // Set the State Variable
digitalWrite(5,state); // Set the state to the RED LED
}
if(find_string(req,"GET /?OFF")) // Check if the received Request containts the String ON
{
state = 0; // Set the State Variable
digitalWrite(5,state);
}
if(find_string(req,"GET /?1ON")) // Check if the received Request containts the String ON
{
state1 = 1; // Set the State Variable
digitalWrite(6,state1); // Set the state to the RED LED
}
if(find_string(req,"GET /?1OFF")) // Check if the received Request containts the String ON
{
state1 = 0; // Set the State Variable
digitalWrite(6,state1);
}
if(find_string(req,"GET /?2ON")) // Check if the received Request containts the String ON
{
state2 = 1; // Set the State Variable
digitalWrite(7,state2); // Set the state to the RED LED
}
if(find_string(req,"GET /?2OFF")) // Check if the received Request containts the String ON
{
state2 = 0; // Set the State Variable
digitalWrite(7,state2);
}
if(find_string(req,"GET /?3ON")) // Check if the received Request containts the String ON
{
state3 = 1; // Set the State Variable
digitalWrite(8,state3); // Set the state to the RED LED
}
if(find_string(req,"GET /?3OFF")) // Check if the received Request containts the String ON
{
state3 = 0; // Set the State Variable
digitalWrite(8,state3);
}
if(find_string(req,"GET /?4ON")) // Check if the received Request containts the String ON
{
state4 = 1; // Set the State Variable
digitalWrite(2,state4); // Set the state to the RED LED
}
if(find_string(req,"GET /?4OFF")) // Check if the received Request containts the String ON
{
state4 = 0; // Set the State Variable
digitalWrite(2,state4);
}
if(find_string(req,"GET /?5ON")) // Check if the received Request containts the String ON
{
state5 = 1; // Set the State Variable
digitalWrite(3,state5); // Set the state to the RED LED
}
if(find_string(req,"GET /?5OFF")) // Check if the received Request containts the String ON
{
state5 = 0; // Set the State Variable
digitalWrite(3,state5);
}
if(find_string(req,"GET /?6ON")) // Check if the received Request containts the String ON
{
state6 = 1; // Set the State Variable
digitalWrite(9,state6); // Set the state to the RED LED
}
if(find_string(req,"GET /?6OFF")) // Check if the received Request containts the String ON
{
state6 = 0; // Set the State Variable
digitalWrite(9,state6);
}
if(find_string(req,"GET /?7ON")) // Check if the received Request containts the String ON
{
state7 = 1; // Set the State Variable
digitalWrite(14,state7); // Set the state to the RED LED
}
if(find_string(req,"GET /?7OFF")) // Check if the received Request containts the String ON
{
state7 = 0; // Set the State Variable
digitalWrite(14,state7);
}
Serial.println("here 1"); // for debugging
client.println("HTTP/1.1 200 OK"); // start responding with the DATA to the client & Send out the response header
client.println("Content-Type: text/html");
client.println("Connection: close"); // the connection will be closed after completion of the responsedelay(1);
client.println();
client.println("<!DOCTYPE HTML>"); // Start of the HTML Page
client.println("<html>");
client.println("<br />");
delayMicroseconds(500);
if(state) // Check the State and print the LINK on the Page accordingly
{
client.println("<a href= \"/?"+state_val[0]+" \">");
}
else
{
client.println("<a href= \"/?"+state_val[1]+" \">");
}
client.println("Click Here to Switch "+state_val[!state]+" -RED of RGB LED");
client.println("</a>");
client.println("<br />");
delayMicroseconds(500);
if(state1) // Check the State and print the LINK on the Page accordingly
{
client.println("<a href= \"/?"+state_val1[0]+" \">");
}
else
{
client.println("<a href= \"/?"+state_val1[1]+" \">");
}
client.println("Click Here to Switch "+state_val1[!state1]+" -RED of RGB LED");
client.println("</a>");
client.println("<br />");
delayMicroseconds(500);
if(state2) // Check the State and print the LINK on the Page accordingly
{
client.println("<a href= \"/?"+state_val2[0]+" \">");
}
else
}
client.println("<a href= \"/?"+state_val2[1]+" \">");
}
client.println("Click Here to Switch "+state_val2[!state2]+" -RED of RGB LED");
client.println("</a>");
client.println("<br />");
delayMicroseconds(500);
if(state3) // Check the State and print the LINK on the Page accordingly
{
client.println("<a href= \"/?"+state_val3[0]+" \">");
}
else
{
client.println("<a href= \"/?"+state_val3[1]+" \">");
}
client.println("Click Here to Switch "+state_val3[!state3]+" -RED of RGB LED");
client.println("</a>");
client.println("<br />");
delayMicroseconds(500);
if(state4) // Check the State and print the LINK on the Page accordingly
{
client.println("<a href= \"/?"+state_val4[0]+" \">");
}
else
{
client.println("<a href= \"/?"+state_val4[1]+" \">");
}
client.println("Click Here to Switch "+state_val4[!state4]+" -RED of RGB LED");
client.println("</a>");
client.println("<br />");
delayMicroseconds(500);
if(state5) // Check the State and print the LINK on the Page accordingly
{
client.println("<a href= \"/?"+state_val5[0]+" \">");
}
else
{
client.println("<a href= \"/?"+state_val5[1]+" \">");
}
client.println("Click Here to Switch "+state_val5[!state5]+" -RED of RGB LED");
client.println("</a>");
client.println("<br />");
delayMicroseconds(500);
if(state6) // Check the State and print the LINK on the Page accordingly
{
client.println("<a href= \"/?"+state_val6[0]+" \">");
}
else
{
client.println("<a href= \"/?"+state_val6[1]+" \">");
}
client.println("Click Here to Switch "+state_val6[!state6]+" -RED of RGB LED");
client.println("</a>");
client.println("<br />");
delayMicroseconds(500);
if(state7) // Check the State and print the LINK on the Page accordingly
{
client.println("<a href= \"/?"+state_val7[0]+" \">");
}
else
{
client.println("<a href= \"/?"+state_val7[1]+" \">");
}
client.println("Click Here to Switch "+state_val7[!state7]+" -RED of RGB LED");
client.println("</a>");
client.println("</html>");
break;
}
client.stop();
Serial.println("client disonnected");
}
}
// A Function to locate a given search string in a given base string
boolean find_string(String base, String search)
{
int len = search.length(); // find the length of the base string
for(int m = 0; m<((base.length()-len)+1);m++)// Iterate from the beginning of the base string till the end minus length of the substring
{
if(base.substring(m,(m+len))==search) // Check if the extracted Substring Matches the Search String
{
return true; // if it matches exit the function with a true value
}
}
return false; // if the above loop did not find any matches, control would come here and return a false value
}
答案 0 :(得分:0)
我几乎有同样的事情为我工作,我没有锁定问题,但在我的测试中,我注意到某些网络浏览器向“网络服务器”发送了相当多的信息请求。我将我的请求设为char [1024],并限制char复制和char搜索@ 1023个字符。
要解决问题,我建议以给定的间隔循环一系列灯光请求。然后在经历锁定并记录时间后,再以更大的间隔进行再次操作。您可以通过这种方式缩小范围。此外,通过使用netcat并仅发送您正在寻找的请求,将浏览器排除在等式之外。
祝你好运!