Dispara Ping

Boa noite!

Pessoal estou a tentar fazer um projeto utilizando o Arduino nano R3 e um módulo Ethernet ENC28J60, onde o mesmo dispararia um ping para um determinado ip na rede e quando houvesse perda de pacote o arduino armasse um relé que acenderia uma lâmpada… ja fiz dezenas de pesquisa na internet encontrei algumas coisa que chegasse próximo mas nao era compativel a biblioteca do módulo Ethernet ENC28J60 baixo deixarei o codigo o qual funcionaria perfeitamente casso desse pra adaptar ao módulo Ethernet ENC28J60.

 #include <SPI.h>         
 #include <Ethernet.h>
 #include <ICMPPing.h>

 byte mac [] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED}; // endereço max para ethernet shield
 byte ip [] = {} 192,168,4,177; // endereço IP para ethernet shield
 IPAddress pingAddr (192,168,4,114); // endereço IP para ping
 int failogic = 0;
 int alternatePress = 0;
 int powerPin = 4;
 int powerPinStatus = 5;

 SOCKET pingSocket = 0;

 char buffer [256];
 ICMPPing de ping (pingSocket, (uint16_t) aleatório (0, 255));

 void setup () 
 {
 // Inicia Ethernet
 Ethernet começar (mac, ip).;
 Serial começar (9600).;
 pinMode (powerPin, OUTPUT);
 pinMode (powerPinStatus, OUTPUT);
 digitalWrite (powerPin, HIGH);
 digitalWrite (powerPinStatus, LOW);
 }

 void loop ()
 {
 ICMPEchoReply echoReply = pingue (pingAddr, 4);
 if (. estatuto echoReply == SUCESSO)
 {
 sprintf (tampão,
 "Responder [% d] a partir de:..% D% d% d% d:. Bytes =% d tempo =% LDMS TTL =% d",
 echoReply.data.seq,
 echoReply.addr [0],
 echoReply.addr [1],
 echoReply.addr [2],
 echoReply.addr [3],
 REQ_DATASIZE,
 millis () - echoReply.data.time,
 echoReply.ttl);
 failogic = 0; // redefine a contagem lógica se a máquina começa a responder aos pings
 alternatePress = 0;
 }
 mais
 {
 failogic ++; // isto irá incrementar o contador para cada ping falhar
 sprintf (buffer, "falhou pedido de eco;% d", echoReply status.); 
 }
 . Serial println (buffer);
 if (failogic> 5) // 5 pings não desarmará a instrução if e fazer com que o arduino para bater o botão de energia
 {
 digitalWrite (powerPin, LOW); // O lado positivo do botão de energia é conectada ao pino 4 no meu Arduino então movê-lo para o estado LOW simula pressionando o botão de energia
 digitalWrite (powerPinStatus, HIGH); // LED acende-se enquanto o botão é pressionado
 se (alternatePress == 0)
 { 
 delay (5500); // Este atraso mata o poder PC todos juntos
 alternatePress = 1;
 }
 mais
 {
 delay (500); // Este atraso pressiona rapidamente o botão;
 }
 digitalWrite (powerPin, HIGH); // Esta é a liberação do botão de energia
 digitalWrite (powerPinStatus, LOW); // LED desliga-se quando o botão é liberado
 delay (180.000); 
 }
 atraso (500);
 }

Desde ja sou muito grato pela atenção de todos…

Implementar um ping nao e algo de muito complicado... principalmente tendo em conta uqe tens uma biblioteca por onde comecar.

Ja pesquisaste por ICMP para enc28J60?

Bubulindo, desde já agradeço pela atenção... Mas já fiz sim pesquisa ICMP para enc28J60 mas ão conseguir encontrar nada que se adequasse a biblioteca que tenho do enc28J60, sei que pela logíca deve ser algo com necessita poucas linhas de código mas não tenho ideia de como adaptar o código acima a biblioteca correta.

A mim, não me parece que esse código funcione.

Realmente luis no enc28J60 ele nao funciona porque a biblioteca não e compativel e isso que pretendo resolver, encontra uma biblioteca com esse proposito

Ja pensaste em implementar uma biblioteca ou funcao para isso?

eu implementei a funcao ping para o W5100… tendo em conta todas as funcoes de base ja implementadas, nao e muito complicado ler a descricao do protocolo ICMP, mandar a mensagem e esperar a resposta.