andertant писал(а): 14 май 2018, 10:24но они все на один адрес
не один а два:
Код: Выделить всё
IPAddress pingAddr(192,168,1,9); // локальный адрес
IPAddress pingAddr2(77,88,8,8); // публичный DNS
Отправлено спустя 12 минут 37 секунд:
вообще вам надо разобраться с библиотекой Arduino-ping , которую автор статьи, по ссылке выше, любезно НЕ предоставил в статье, ну или я не увидел ее...
Arduino-Ping.zip
там есть в примерах такой вот:
[spoiler]
Код: Выделить всё
/*
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);
}
[/spoiler]
поищите описание и конфигурацию этой строки, что она делает (я не нашел):
Код: Выделить всё
ICMPPing ping(pingSocket, (uint16_t)random(0, 255));
Обработка одного адреса:
[spoiler]
Код: Выделить всё
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);
}
[/spoiler]
я так понял сама команда для начала пинга:
Код: Выделить всё
ICMPEchoReply echoReply = ping(pingAddr, 4);
, где 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);
}
если успешный пинг - заполняем буфер мессагами с инфой о пинге, если нет - выводим Echo request failed
Отправлено спустя 3 минуты 32 секунды:
нашел ссылку на гит разработчика библиотеки -
https://github.com/BlakeFoster/Arduino-Ping/
Отправлено спустя 2 минуты 33 секунды:
вообще интересная либа для пользовательского блока. у кого есть w5100 и время поразбираться
а вообще пинговалки нету в стандартной Ethernet либе на w5100?