я выложил код библиотеки - там надо смотреть проблему - клиенты с одинаковым IP и разными портами на ардуине объединяются.
код на ардуине не может объединять двух клиентов, объявленных отдельно.
Ну, если Вы лучше нас знаете где нужно смотреть проблему, то и смотрите! К нам-то зачем пришли? Мы люди тупые, мы смотреть проблемы без кода не можем.
Про необходимость кода я Вам намекнул в самом первом ответе темы. Вы не поняли? Альтернативно одарены?
То, что
это не наша проблема. Очень большой никто разбирать не будет!
Сделайте маленький пример, где просто создаются два клиента и ничего другого. Если проблема там присутствует, то вот это маленький код и выкладывайте, но полный, законченный, чтоб любой мог загрузить его себе, запустить и посмотреть.
Да, это работа! Но это работа по решению Вашей проблемы. Вы думали, кто-то за Вас её делать будет?
вот проект
тут задаются адреса 2 точек, и далее, порты
byte mainip[] = { 192, 168, 1, 39 };
byte deip[] = { 192, 168, 1, 39 };
при подключении одного из клиентов к источнику данных, второй тоже начинает себя считать подключенным.
да и данные начинает на себя принимать вместо другого клиента
#include <Ethernet.h>
#include "GyverTimers.h"
#define ledPin 13
const uint8_t gateway[] = {192, 168, 001, 001};
const uint8_t subnet[] = {255, 255, 255, 0};
const uint8_t dns[] = {192, 168, 001, 001};
byte mainip[] = { 192, 168, 1, 39 };
byte myip[] = { 192, 168, 1, 63 };
byte deip[] = { 192, 168, 1, 39 };
byte mac[] = { 0xD2, 0x12, 0x1E, 0xEF, 0xFE, 0xEA }; //не ставим стандартный мак
uint8_t linkstate = 0;
uint16_t myPort = 2445;
uint16_t dePort = 6643;
uint16_t mainPort = 4555;
const byte DeviceType = 2;
unsigned long timer2 = 0;
unsigned long cicle = 0;
EthernetClient clientcentr;
EthernetClient clientwork;
void setup() {
Serial.begin(115200);
Serial3.begin(115200);
pinMode(ledPin, OUTPUT);
Serial.println("поехали !!!");
Ethernet.init(53);
Ethernet.begin(mac, myip);
Timer1.setFrequency(1);
Timer1.enableISR(); // Первый канал - А, начальная фаза - 0 градусов
Timer2.setFrequency(1);
Timer2.enableISR(CHANNEL_A);
}
ISR(TIMER1_A)
{
//Serial.println("Timer 1");
/* if (hiStepGra)
{
digitalWrite(stepPinGra, HIGH);
hiStepGra = false;
}
else
{
digitalWrite(stepPinGra, LOW);
hiStepGra = true;
}
/*/
}
ISR(TIMER2_A)
{
if (++timer2 < 250)
return;
else
timer2 = 0;
if (linkstate != 1)
{
Serial.println("сетевой кабель не подключен");
}
else
{
digitalWrite(ledPin, digitalRead(ledPin) ^ 1);
if (!clientwork.connected())
{
//Serial.println("подключаю central");
clientwork.connect(mainip, mainPort);
delay(50);
if (clientwork.connected()) {
Serial.println("connected to work");
} else {
for (byte i = 0; i < 4; i++)
{
Serial.print(mainip[i]);
if (i < 3)
Serial.print(".");
else
Serial.print(":");
}
Serial.print(mainPort);
Serial.println(" connection work failed");
}
}
if (clientwork.connected())
{
byte buf[12] = {0};
buf[0] = 34;
for (byte i = 1; i < 7; i++)
{
buf[i] = mac[i - 1];
}
buf[7] = DeviceType;
buf[8] = 47;
buf[9] = 101;
buf[10] = 110;
buf[11] = 100;
clientwork.write(buf, 12);
for (byte i = 0; i < 4; i++)
{
Serial.print(myip[i]);
if (i < 3)
Serial.print(".");
else
Serial.print(":");
}
Serial.print(myPort);
Serial.println(" Отправил пинг work");
}
if (!clientcentr.connected())
{
//Serial.println("подключаю central");
clientcentr.connect(deip, dePort);
delay(50);
if (clientcentr.connected()) {
Serial.println("connected to work");
} else {
for (byte i = 0; i < 4; i++)
{
Serial.print(deip[i]);
if (i < 3)
Serial.print(".");
else
Serial.print(":");
}
Serial.print(dePort);
Serial.println(" connection clientcentr failed");
}
}
if (clientcentr.connected())
{
byte buf[12] = {0};
buf[0] = 34;
for (byte i = 1; i < 7; i++)
{
buf[i] = mac[i - 1];
}
buf[7] = DeviceType;
buf[8] = 47;
buf[9] = 101;
buf[10] = 110;
buf[11] = 100;
clientcentr.write(buf, 12);
for (byte i = 0; i < 4; i++)
{
Serial.print(myip[i]);
if (i < 3)
Serial.print(".");
else
Serial.print(":");
}
Serial.print(myPort);
Serial.println(" Отправил пинг clientcentr");
}
}
digitalWrite(ledPin, digitalRead(ledPin) ^ 1); //включаем и выключаем светодиод
}
void loop() {
if (cicle + 3000 < millis())
{
cicle = millis();
if (clientcentr.connected())
Serial.println("clientcentr подключен");
if (clientwork.connected())
Serial.println("clientwork подключен");
}
}
Вся вот эта борода в ISR уже плохая идея.
без разницы, что так, что так. Везде одинаково