Решено, Mitrandir отдельное спс <ICMPPing.h> Не компилируется, помогите ! Проверка ping на Arduino

Тема в разделе "Arduino & Shields", создана пользователем Саша_да_да_Саша, 3 июл 2018.

  1. В первую очередь тем у кого ICMPPing.h заработала конечно и каким образом у них это вышло на стандартном её примере можно............
    Загружаю пример
    Код (C++):
    #include <SPI.h>
    #include <Ethernet.h>
    #include <ICMPPing.h>
    byte mac[] = {0xDE, 0xAD, 0xBE, 0xFE, 0xFE, 0xFE}; // MAC адрес устройства
    byte ip[] = {192,168,1,130}; // IP устройства
    byte ds[] = {192,168,1,100}; // DNS
    byte gw[] = {192,168,1,100}; // GW
    IPAddress pingAddr(192,168,1,9); // локальный адрес
    IPAddress pingAddr2(77,88,8,8); // публичный DNS
    SOCKET pingSocket = 0;
    int interval = 10000; // 10 секунд
    int MAX_FAIL = 6; // сколько пингов считать неуспешными
    int FAIL = 0; // счётчик фейлов
    int ledRED = 7; // пин для красного диода (и далее - остальных)
    int ledYEL = 6;
    int ledGRN = 5;
    ICMPPing ping(pingSocket, (uint16_t)random(0, 255));
    // Инициализируем Ethernet нашим MAC, IP и шлюзом по умолчанию.
    void setup()
    {
    Ethernet.begin(mac, ip, ds, gw);
    pinMode(ledGRN, OUTPUT);
    pinMode(ledYEL, OUTPUT);
    pinMode(ledRED, OUTPUT);
    }
    void loop()
    {
    ICMPEchoReply echoReply = ping(pingAddr, 2);
    if (echoReply.status == SUCCESS)
    {
    ICMPEchoReply echoReplyWORLD = ping(pingAddr2, 2);
    if (echoReplyWORLD.status == SUCCESS)
    {
    digitalWrite(ledGRN, HIGH);
    digitalWrite(ledRED, LOW);
    digitalWrite(ledYEL, LOW);
    FAIL=0;
    }
    else
    {
    digitalWrite(ledGRN, LOW);
    digitalWrite(ledRED, LOW);
    digitalWrite(ledYEL, HIGH);
    FAIL=0;
    }
    }
    else
    {
    // Увеличиваем счётчик фейлов
    FAIL++;
    }
    // Если счётчик фейлов превысил некий порог
    if (FAIL >= MAX_FAIL)
    {
    // Меняем индикацию
    digitalWrite(ledGRN, LOW);
    digitalWrite(ledYEL, LOW);
    digitalWrite(ledRED, HIGH);
    }
    // не даём счётчику фейлов переполнять переменную
    if (FAIL > 300) {FAIL=6;}
    delay(interval);
    }
    Это вообще стрёмная (н), у каждого второго по комментам с ней засада
    Ставил 2 или 3 модификации библиотеки <ICMPPing.h>, так сразу ошибку пишет, меняю на кавычки " " пытается что то скомпилить, потом пишет ошибку класса или что то в этом роде W5100+ 2560, но у других же работает , но на УНО, ну разница какая?, в мою же пользу....
     
    Последнее редактирование: 3 июл 2018
  2. Mitrandir

    Mitrandir Гуру

    Ну так исправьте ошибку и будет счастье
     
  3. Это типа библиотеку чужую с ноля написать, так если б я такой продвинутый был, я б тут не регистрировался :)
     
  4. Mitrandir

    Mitrandir Гуру

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

    , что писатель этой библиотеке
    Теперь я понимаю почему ))
     
  6. Mitrandir

    Mitrandir Гуру

    Саша_да_да_Саша нравится это.
  7. Mitrandir

    Mitrandir Гуру

    Версия 2.0 базируется на более старой версии библиотеки Ethernet.

    в новой версии убрали фаил
    Util.h, вот и ругается

    Если в папке
    C:\Program Files (x86)\Arduino\libraries\Ethernet\src

    создать фаил util.h и положить в него это:

    Код (C++):
    #ifndef UTIL_H
    #define UTIL_H

    #define htons(x) ( ((x)<< 8 & 0xFF00) | \
                       ((x)>> 8 & 0x00FF) )

    #define ntohs(x) htons(x)

    #define htonl(x) ( ((x)<<24 & 0xFF000000UL) | \
                       ((x)<< 8 & 0x00FF0000UL) | \
                       ((x)>> 8 & 0x0000FF00UL) | \
                       ((x)>>24 & 0x000000FFUL) )

    #define ntohl(x) htonl(x)

    #endif
    то ваша вторая версия тоже заработает скорее всего.

    но лучше обновить библиотеки чем такие костыли вставлять
     
  8. Поставил пример товарища с видео, у меня к нему больше доверия как-то, вот ответы получаю
    ping 192.168.1.110... 2 ms
    ping 8.8.8.8... 20 ms
    ping 192.168.1.110... 2 ms
    ping 8.8.8.8... 34 ms
    ping 192.168.1.110... 2 ms
    ping 8.8.8.8... 19 ms
    ping 192.168.1.110... 2 ms
    ping 8.8.8.8... 22 ms
    Mitrandir отдельное вам спасибо, тут кроме вас как никого и нет :), уедете в отпуск, можно сюда и не писать :D наверно все ждут, что б денег предложили )) долгожители сайта
     
  9. Daniil

    Daniil Гуру

    С таким отношением вам скоро никто отвечать не будет
     
    ИгорьК нравится это.
  10. Airbus

    Airbus Радиохулиган Модератор

  11. Mitrandir

    Mitrandir Гуру

    [​IMG]
     
  12. Я никого не хотел обидеть, но... по сути, это за что? За мигание светодиодом? Обновление ПО ТЕСЛЫ, или за новую Виндовс 12 под ключ ? У меня товарищ по работе, тоже тут спрашивал, сразу налетели, не будем называть, есть рубрика мы знаем их имена. Мне сначала даже смешно стало не ужели эти 500р спасут... Если я кому чем помогаю, в чём разбираюсь , если это не несет для меня материальных убытков, не считаю, что за это надо ставить памятник при жизни. Помог и забыл. Не захотел, прошёл мимо, молча, без намёков на дайте денег, и если брать то за что то..., а не за блинк или веб реле, на просторах такого и бесплатно можно взять. Mitrandir вам Я спасибо за помощь сказал, и это нормально.
     
  13. Daniil

    Daniil Гуру

    Прочтите эту статью, надеюсь она приблизит нас к взаимопонимаю.
    А с деньгами вы лихо загнули, я не видел, чтобы их тут просили вне "пректного бюро".
     
    ИгорьК нравится это.
  14. stasych

    stasych Нерд

    Доброго всем денечка!
    Проблема аналогичная. Пытаюсь скомпилировать счетч, указанный автором топика. Библиотеки Ethernet и ICMPPing скачал с github и с https://www.arduinolibraries.info/libraries.
    Ардуина версии 1.8.13. Железо - Мега 2560 и W5100. Выдает кучу какбы ошибок при компиляции. Вот некоторые первых несколько из них:
    In file included from C:\Program Files\Arduino\libraries\Ethernet-master\src\Dns.cpp:8:0:
    C:\Program Files\Arduino\libraries\Ethernet-master\src\Dns.cpp: In member function 'uint16_t DNSClient::BuildRequest(const char*)':
    C:\Program Files\Arduino\libraries\Ethernet-master\src\utility/w5100.h:459:25: warning: result of '(256 << 8)' requires 18 bits to represent, but 'int' only has 16 bits [-Wshift-overflow=]
    #define htons(x) ( (((x)<<8)&0xFF00) | (((x)>>8)&0xFF) )
    ~~~^~~
    C:\Program Files\Arduino\libraries\Ethernet-master\src\Dns.cpp:164:18: note: in expansion of macro 'htons'
    twoByteBuffer = htons(QUERY_FLAG | OPCODE_STANDARD_QUERY | RECURSION_DESIRED_FLAG);
    ^~~~~
    C:\Program Files\Arduino\libraries\icmp_ping\ICMPPing.cpp: In member function 'Status ICMPPing::sendEchoRequest(const IPAddress&, const ICMPEcho&)':
    C:\Program Files\Arduino\libraries\icmp_ping\ICMPPing.cpp:184:11: error: 'class W5100Class' has no member named 'send_data_processing'
    W5100.send_data_processing(_socket, serialized, sizeof(ICMPEcho));
    ^~~~~~~~~~~~~~~~~~~~
    Вроде как проблема известная, однако явного решения пока не нашел.


    Костыль от Mitrandir не помог.
     
    Последнее редактирование: 2 фев 2021