Добрый вечер друзья!!!
Касаемо
if(!Ethernet) или (!server)
так как конструкции вырваны из контекста, понять их смысл затруднительно..., но мы попробуем)))
Данные синтаксические конструкции обычно используют для проверки значений переменных и возвращаемых функциями значений, возвращаемые значения обычно имеют True или False ну или 1 или 0. if(!Ethernet) означает "Если Ethernet не равно True", то есть оно равно False, но в данном случае Ethernet это скорей всего экземпляр класса EthernetClass и он не может быть не True не False.
(!server) скорей всего то же самое
EthernetServer server(80);
.r
Код
#include "SPI.h"
#include "Ethernet.h"
byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};
IPAddress ip(10, 0, 0, 10); // Ваш IP
bool router_connect = 0;
void setup() {
Ethernet.init(10);
Serial.begin(115200);
Serial.println("Ethernet example");
Ethernet_Init();
}
void loop() {
if(!router_connect){
Ethernet_Init();
}
}
void Ethernet_Init(){
if(Ethernet.begin(mac)){
Serial.println("Router connected.");
Ethernet.setLocalIP(ip);
router_connect = 1;
}else{
Serial.println("Router not connected.");
router_connect = 0;
}
}
в принципе правильный но я бы несколько модифицировал его
Ethernet.begin(mac)
производит инициализацию W5100 и если чипа не обнаружено возвращает 0, в связи с этим в
}else{
Serial.println("Router not connected.");
router_connect = 0;
}
довольно сложно понять почему произошло событие Router not connected., то ли с роутером беда, то ли W5100 не прошла инициализацию.
Еще бы я добавил следующую строку
while (Ethernet.linkStatus() == LinkOFF) {
delay(1000)
Serial.println("Ethernet cable is not connected.");
}
- тут как говорится без комментариев))
Ethernet_Init() сделал бы с returnom и убрал глобальную переменную
bool router_connect
if(!router_connect){
Ethernet_Init();
}
вот это трансформировал бы в
wile(!router_connect){
delay(1)
Ethernet_Init();
}
так как без инициализации сетевого контроллера дальнейшее исполнение кода бессмысленно и перенес бы это в Setup
Ну вот в принципе и все))), можете задавать вопросы))))