Ethernet Shield hängt sich auf

Hallo Leute,

ich werde fast Wahnsinnig. Habe folgendes Problem:

Zum Aufbau:
Mega mit Ethernet Shield und 433Mhz Funksender

Android-App schickt zum schalten UDP-Nachricht an den Arduino, welcher dann Funksteckdosen schaltet.

Zum Problem:
Das Shield “häng sich auf” und nimmt dann keine UDP Nachrichten mehr an (auch nicht vom PC). Die Rx LED blink dann dabei ständig ohne das ich etwas sende. Nach einem Neustart läuft alles erstmal wieder. Das Phänomen tritt meist nach einer Laufzeit von 3-48 Stunden auf und meist direkt nachdem ich erfolgreich geschaltet habe. Tritt das Phänomen inerhalb dieser Laufzeit jedoch nicht auf dann auch später nicht mehr (hatte es schon 1-2 Monate am Stück erfolgreich laufen)

Wenn ich den Arduino dann jedoch Neustarte heißt es wieder Daumendrücken!
Habe schon ziemlich viel rumprobiert aber ich kriege das einfach nicht Weg!
Vielleicht fällt euch ja was ein. Oder ist das Shield womöglich defekt??

#include <SPI.h>         // needed for Arduino versions later than 0018
#include <Ethernet.h>
#include <EthernetUdp.h>         // UDP library from: bjoern@cs.stanford.edu 12/30/2008
#include <RCSwitch.h>


// RCSwitchkram
RCSwitch mySwitch = RCSwitch();
const int VCCSender = 25; // Plus für den Sender schalten


unsigned int localPort = 55555;      // local port to listen on
// the media access control (ethernet hardware) address for the shield:
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
//the IP address for the shield:
byte ip[] = { 192, 168, 178, 24 };
// the router's gateway address:
byte gateway[] = { 192,168,178,1 };
// the subnet:
byte subnet[] = { 255, 255, 255, 0 };


// buffers for receiving and sending data
//char packetBuffer[UDP_TX_PACKET_MAX_SIZE];
String stringTwo = String("This is a string");
char packetBuffer[UDP_TX_PACKET_MAX_SIZE]; //buffer to hold incoming packet,

// An EthernetUDP instance to let us send and receive packets over UDP

EthernetUDP Udp;


void setup()
{
	Serial.begin(9600); // 

	// start the Ethernet and UDP:
	Ethernet.begin(mac, ip, gateway, gateway, subnet);
	delay(1000);
	Serial.println(Ethernet.localIP());
	Udp.begin(localPort);
	delay(1000);

	//RCSwitch
	mySwitch.enableTransmit(39); // Pin auf dem gesendet wird
	pinMode(VCCSender, OUTPUT); //  Pin auf dem der Sender aktiviert wird (Low aktiv)
	digitalWrite(VCCSender, HIGH);

	pinMode(43, OUTPUT); //  GND für Sender
	digitalWrite(43, LOW);

	//test
	digitalWrite(VCCSender, LOW);
	Serial.println("test");
	delay(1000);
	mySwitch.switchOn("11111", "10000");
	delay(1000);
	mySwitch.switchOff("11111", "10000");
	digitalWrite(VCCSender, HIGH);
	Serial.println("test ende");
}


void loop()
{
	netzwerk();
}



void netzwerk()
{
	// if there's data available, read a packet
	int packetSize = Udp.parsePacket();
	if (packetSize)
	{
		// read the packet into packetBufffer
		String(packetBuffer) = Udp.readString();
		stringTwo = String(packetBuffer); // UDP daten in String lesen
		if (stringTwo.compareTo("AON") == 0)	//vergleichen des Strings mit den Vorgaben
		{
			digitalWrite(VCCSender, LOW); //Sender aktivieren
			Serial.println("Kanal A AN");
			mySwitch.switchOn("11111", "10000");
		}
		else if (stringTwo.compareTo("AOFF") == 0)
		{
			digitalWrite(VCCSender, LOW); //Sender aktivieren
			Serial.println("Kanal A AUS");
			mySwitch.switchOff("11111", "10000");
		}
		else if (stringTwo.compareTo("BON") == 0)
		{
			digitalWrite(VCCSender, LOW); //Sender aktivieren
			Serial.println("Kanal B AN");
			mySwitch.switchOn("11111", "01000");
		}
		else if (stringTwo.compareTo("BOFF") == 0)
		{
			digitalWrite(VCCSender, LOW); //Sender aktivieren
			mySwitch.switchOff("11111", "01000");
			Serial.println("Kanal B AUS");
		}
		else if (stringTwo.compareTo("CON") == 0)
		{
			digitalWrite(VCCSender, LOW); //Sender aktivieren
			Serial.println("Kanal C AN");
			mySwitch.switchOn("11111", "00100");
		}
		else if (stringTwo.compareTo("COFF") == 0)
		{
			digitalWrite(VCCSender, LOW); //Sender aktivieren
			Serial.println("Kanal C AUS");
			mySwitch.switchOff("11111", "00100");
		}
		else if (stringTwo.compareTo("DON") == 0)
		{
			digitalWrite(VCCSender, LOW); //Sender aktivieren
			Serial.println("Kanal D AN");
			mySwitch.switchOn("11111", "00010");
		}
		else if (stringTwo.compareTo("DOFF") == 0)
		{
			digitalWrite(VCCSender, LOW); //Sender aktivieren
			Serial.println("Kanal D AUS");
			mySwitch.switchOff("11111", "00010");
		}
		else if (stringTwo.compareTo("EON") == 0)
		{
			digitalWrite(VCCSender, LOW); //Sender aktivieren
			Serial.println("Kanal E AN");
			mySwitch.switchOn("11111", "00001");
		}
		else if (stringTwo.compareTo("EOFF") == 0)
		{
			digitalWrite(VCCSender, LOW); //Sender aktivieren
			Serial.println("Kanal E AUS");
			mySwitch.switchOff("11111", "00001");
		}
		else if (stringTwo.compareTo("ALLOFF") == 0)
		{
			digitalWrite(VCCSender, LOW); //Sender aktivieren
			Serial.println("Kanal A-E AUS");
			mySwitch.switchOff("11111", "10000");
			mySwitch.switchOff("11111", "01000");
			mySwitch.switchOff("11111", "00100");
			mySwitch.switchOff("11111", "00010");
			mySwitch.switchOff("11111", "00001");
		}
		else
		{
			Serial.println("nicht verstanden");
		}
		digitalWrite(VCCSender, HIGH); //Sender deaktivieren
	}
	//delay(10);		
	Udp.flush();
	
}