Hallo,
ich sende mit dem Arduino und einem Ethernetshield an zwei weitere
Arduinos mit Ethernetshield Daten via UDP.
1 | Udp.beginPacket(clientip, clientport);
|
2 | Serial.println("Client 1 versendet Daten");
|
3 | Udp.print("123");
|
4 | Udp.endPacket();
|
5 |
|
6 |
|
7 | Udp.beginPacket(client2ip, clientport);
|
8 | Serial.println("Client 2 versendet Daten");
|
9 | Udp.print("456");
|
10 | Udp.endPacket();
|
Dies funktioniert ohne Probleme, und beide Clients bekommen dass an sie
adressierte Datenpaket.
Wenn ich nun jedoch eine IF-Abfrage einbaue
1 | if(hashabgleich2==1) {
|
2 |
|
3 | Udp.beginPacket(client2ip, clientport);
|
4 | Serial.println("Client 2 versendet Daten");
|
5 | Udp.print("456");
|
6 | Udp.endPacket();
|
7 |
|
8 | }
|
klappt das ganze bei erfüllter Bedingung ebenfalls Problemlos.
Bei zwei IF-Abfragen hintereinander, passiert allerdings etwas
merkwürdiges:
1 | if(hashabgleich==1) {
|
2 |
|
3 | Udp.beginPacket(clientip, clientport);
|
4 | Serial.println("Client 1 versendet Daten");
|
5 | Serial.println(serverzeitid);
|
6 | Udp.print("123");
|
7 | Udp.endPacket();
|
8 | hashabgleich=0;
|
9 |
|
10 |
|
11 | }
|
12 |
|
13 | if(hashabgleich2==1) {
|
14 |
|
15 |
|
16 | Udp.beginPacket(client2ip, clientport);
|
17 | Serial.println("Client 2 versendet Daten");
|
18 | Udp.print("456");
|
19 | Udp.endPacket();
|
20 | hashabgleich2=0;
|
21 |
|
22 |
|
23 | }
|
24 | }
|
der Arduino sendet beide Zahlen also 123 und 456 in einem Datenpaket an
client2ip obwohl diese unterschiedliche Empfänger eingetragen haben
(clientip & client2ip), ich kann mir das einfach nicht erklären und
werde langsam nervös, da dieses Projekt für die Schule dient und bald
fertig sein muss wenn ihr mir da helfen könntet wäre das Klasse.
Hier die void setup() und die Definitionen der Variablen.
1 | //IP-Libary-Definitionen
|
2 |
|
3 | //Server Adresse:
|
4 | byte servermac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xEC };
|
5 | IPAddress serverip(192, 168, 3, 1);
|
6 | IPAddress serversubnet(255, 255, 255, 0);
|
7 | IPAddress servergateway(192, 168, 3, 1);
|
8 | int serverport = 8001; //Lokaler Port
|
9 |
|
10 |
|
11 | //Client Adressen:
|
12 | IPAddress clientip(192, 168, 3, 2); // IP-Adresse des 1 Clients
|
13 | IPAddress client2ip(192, 168, 3, 3); // IP-Adresse des 2 Clients
|
14 | int clientport = 8002; //Port der beiden Clients
|
15 |
|
16 |
|
17 | char packetbuffer[UDP_TX_PACKET_MAX_SIZE]; //Bufferspeicher um Empfangene Pakete bis zur Bearbeitung zu speichern.
|
18 | EthernetUDP Udp; //Beginnt eine UDP-Instanz
|
19 |
|
20 |
|
21 |
|
22 | void setup() {
|
23 |
|
24 | Serial.begin(115200);
|
25 | Ethernet.begin(servermac, serverip, servergateway);
|
26 | server.begin();
|
27 | Udp.begin(serverport);
|
}
Was ich bereits probiert habe:
--> Wartezeit zwischen den beiden Udp.print's (10 Sekunden)
--> Udp.println, Udp.write klappen ebenfalls nicht
--> Außerhalb des ursprünglichen Sourcecodes in einer neuen Datei, in
zwei IF-Abfragen welche die Daten versenden tritt der Fehler ebenfalls
auf.
-->Wenn eine IF-Abfrage auskommentiert wird klappt es wieder, ich denke
es gibt ein Problem mit zwei UDP-Empfängern.
-->MAC & IP-Adresskonflikte sind ebenfalls keine vorhanden.
Bitte helft mir