Проблема с W5100
- Войдите на сайт для отправки комментариев
Здравствуйте, уважаемые форумчане!
Столкнулся с такой проблемой:
Имеется Arduino Uno, Ethernet Shield W5100 и датчик освещенности(измерения люксов), и 8 релейный модуль.
В общем задача такова: Arduino шлёт моему серверу сигнал на получение ответа, включать ли ей то или иное реле. Далее ардуина принимает ответ, если 1, зажигает реле, если 0 ничего не делает, параллельно она отправляет на мой сайт значения с датчика освещенности. Всё вроде бы работает, НО. Шилд со временем подвисает и не пингуется. Помогает ему лишь перезагрузка всей системы. В общем мне нужно узнать, в чем может быть проблема, в самом шилде или же в программе, сразу скажу ардуина и шилд не оригинальные, код программы ниже. Буду благодарен за ответы по делу. Спасибо.
#include <SPI.h>
#include <Ethernet.h>
#include <Wire.h>
#include <BH1750.h>
#define PIN5 5
BH1750 lightMeter;
byte MAC[] = {
0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED
};
IPAddress IP(10, 10, 1, 55);
EthernetServer arduino(81);
EthernetClient client;
boolean InboundRequest = 0;
char resource[] = "example.com";
void setup() {
pinMode(PIN5, OUTPUT);
Serial.begin(9600);
lightMeter.begin();
Ethernet.begin(MAC, IP);
arduino.begin();
}
void loop() {
EthernetClient client = arduino.available();
if(client) {
boolean EmptyLine = true;
while(client.connected()) {
if(client.available()) {
char data = client.read();
if(data == '\n' && EmptyLine) {
client.println("HTTP/1.1 200 OK");
client.println("Connection: close");
client.println();
client.println("<!DOCTYPE HTML>");
client.println("<html>");
client.println("<head>");
client.println("<link rel=\"shortcut icon\" type=\"image/x-icon\" href=\"http://arduino.cc/en/favicon.png</a>\">");
client.println("</head>");
client.println("<body>");
client.println("</body>");
client.println("</html>");
break;
}
if(InboundRequest && data == ' ') {
InboundRequest = 0;
}
if(data == '?') {
InboundRequest = 1;
}
if(InboundRequest == 1) {
int value = data - '0';
digitalWrite(PIN5, value);
Response();
}
if(data == '\n') {
EmptyLine = true;
} else if(data != '\r') {
EmptyLine = false;
}
}
}
delay(1);
client.stop();
}
}
void Response() {
if(client.connect(resource, 80)) {
String answer = "GET /update.php?status=";
answer+=digitalRead(PIN5);
answer+="&lux=";
answer+=lightMeter.readLightLevel();
client.println(answer);
client.println("Host: example.com");
client.println("Connection: close");
Serial.println(answer);
} else {
Serial.println("Connection failed.");
}
client.stop();
}