Пинг ардуино

UW5EGA
Offline
Зарегистрирован: 16.09.2020

На основе первоисточника, пытаюсь решить свои задачи https://cutt.ly/mkmqzzJ

Необходимо выполнять пинги адресов и в случае его отсутствия зажигать светодиод. Вот примерно как я это вижу, только оно не собирается пока. Не могу понять как правильно описать отношение пинга к отдельному светодиоду.

#include <SPI.h>
#include <Ethernet.h>
#include <ICMPPing.h>
byte mac[] = {0xDE, 0xAD, 0xBE, 0xFE, 0xFE, 0xFE};
byte ip[] = {192,168,20,5};
byte gw[] = {192,168,20,1};
IPAddress pingAddr(192,168,20,10);
IPAddress pingAddr2(192,168,20,11);

SOCKET pingSocket = 0;

int interval = 10000;
int FAIL = 0;
int led1 = 1;
int led2 = 2;

ICMPPing ping(pingSocket, (uint16_t)random(0, 255));

void setup()
{
Ethernet.begin(mac, ip, gw);
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
}

void loop()
{
ICMPEchoReply echoReply = ping(pingAddr);
if (echoReply.status == SUCCESS)
{
digitalWrite(led1, HIGH);
FAIL=0;  
}
else
{
digitalWrite(led1, LOW);
FAIL=0;
}
ICMPEchoReply echoReply = ping(pingAddr2);
if (echoReply.status == SUCCESS)
{
digitalWrite(led2, HIGH);
FAIL=0;
}
else
{
digitalWrite(led2, LOW);
FAIL=0;
}
delay(interval);
}

 

UW5EGA
Offline
Зарегистрирован: 16.09.2020

А это пример из библиотеки:

Не могу понять, что значит цифра "4" в конце строки №36.

/*
  Ping Example
 
 This example sends an ICMP pings every 500 milliseconds, sends the human-readable
 result over the serial port. 
 Circuit:
 * Ethernet shield attached to pins 10, 11, 12, 13
 
 created 30 Sep 2010
 by Blake Foster
 
 */

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

byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED}; // max address for ethernet shield
byte ip[] = {192,168,2,177}; // ip address for ethernet shield
IPAddress pingAddr(74,125,26,147); // ip address to ping

SOCKET pingSocket = 0;

char buffer [256];
ICMPPing ping(pingSocket, (uint16_t)random(0, 255));

void setup() 
{
  // start Ethernet
  Ethernet.begin(mac, ip);
  Serial.begin(9600);
}

void loop()
{
  ICMPEchoReply echoReply = ping(pingAddr, 4);
  if (echoReply.status == SUCCESS)
  {
    sprintf(buffer,
            "Reply[%d] from: %d.%d.%d.%d: bytes=%d time=%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);
  }
  else
  {
    sprintf(buffer, "Echo request failed; %d", echoReply.status);
  }
  Serial.println(buffer);
  delay(500);
}

 

Rumata
Rumata аватар
Offline
Зарегистрирован: 29.03.2019

А вы очень настойчивы в желании установить фэйл в 0. 

sadman41
Offline
Зарегистрирован: 19.10.2016

Blake Foster писал под библиотеку Ethernet 1.0 , сейчас в IDE поставляется Ethernet 2.0. Она крепко переработана, часть внутренних функций переведена в приватные и данный скетч не может до них дотянутся.

UW5EGA
Offline
Зарегистрирован: 16.09.2020

sadman41 пишет:

Blake Foster писал под библиотеку Ethernet 1.0 , сейчас в IDE поставляется Ethernet 2.0. Она крепко переработана, часть внутренних функций переведена в приватные и данный скетч не может до них дотянутся.

Похоже на это. А что делать?

sadman41
Offline
Зарегистрирован: 19.10.2016

UW5EGA пишет:

Похоже на это. А что делать?

Кому? Это опенсорц, тут всем по барабану поддержка в актуальном состоянии.

Я своё писал. Разберетесь - пользуйтесь.

https://github.com/zbx-sadman/Arduino/tree/master/ICMP

UW5EGA
Offline
Зарегистрирован: 16.09.2020

sadman41 пишет:

UW5EGA пишет:

Похоже на это. А что делать?

Кому? Это опенсорц, тут всем по барабану поддержка в актуальном состоянии.

Я своё писал. Разберетесь - пользуйтесь.

https://github.com/zbx-sadman/Arduino/tree/master/ICMP

Вы все сделали за нас неучей. 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

давненько не появлялся )))