# include "Ethernet.h"
# include "EthernetUdp.h"
// die LEDs
enum Farben
{
GRUEN = 3,
WEISS,
ROT,
BLAU,
GELB
};
// Status bestimmt, ob die jeweilige LED an oder aus ist
// alle LEDS beim Start aus
bool Status[5] = {0, 0, 0, 0, 0};
// MAC-Adresse und IP definieren
byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};
/*
Schalter für die Vergabe der IP
true -> feste IP
false IP über DHCP
*/
bool festeIP = false;
// feste IP
IPAddress ip(192, 168, 1, 200);
// lokaler Port
int Port = 9000;
// char-Array für die empfangenen Pakete UDP_TX_PACKET_MAX_SIZE = maximale Größe (24)
char Pakete[UDP_TX_PACKET_MAX_SIZE];
// Variable für den Befehl des Schaltvorgangs
byte Schalten;
// Name für UDP
EthernetUDP Udp;
void setup()
{
Serial.begin(9600);
// auf serielle Verbindung warten
while (!Serial) {;}
// Ethernet starten feste IP
if (festeIP) Ethernet.begin(mac, ip);
// Ethernet starten DHCP
else Ethernet.begin(mac);
// UDP starten
Udp.begin(Port);
// pinMode: Startwert → GRUEN, Endwert → GELB
for (int i = GRUEN; i <= GELB; i++)
{
pinMode(i, OUTPUT);
}
delay(500);
if (festeIP) Serial.print("feste IP-Adresse: ");
else Serial.print("IP-Adresse DHCP: ");
Serial.println(Ethernet.localIP());
}
void loop()
{
// gesendete Pakete abfragen
UDPAbfragen();
// Schalten enthält die Anweisung welche LEDs geschaltet werden sollen
switch (Schalten)
{
case 10:
Serial.print("gesendeter Befehl: ");
Serial.print(Schalten);
Serial.println(" -> Lauflicht");
Lauflicht();
break;
case 11:
// grüne LED
Status[0] = !Status[0];
Serial.print("gesendeter Befehl: ");
Serial.print(Schalten);
if (!Status[0])
{
Serial.println(" -> gr\u00fcne LED ausschalten");
}
else Serial.println(" -> gr\u00fcne LED einschalten");
digitalWrite(GRUEN, Status[0]);
break;
case 12:
// weiße LED
Status[1] = !Status[1];
Serial.print("gesendeter Befehl: ");
Serial.print(Schalten);
if (!Status[1])
{
Serial.println(" -> wei\u00dfe LED ausschalten");
}
else Serial.println(" -> wei\u00dfe LED einschalten");
digitalWrite(WEISS, Status[1]);
break;
case 13:
// rote LED
Status[2] = !Status[2];
Serial.print("gesendeter Befehl: ");
Serial.print(Schalten);
if (!Status[2])
{
Serial.println(" -> rote LED ausschalten");
}
else Serial.println(" -> rote LED einschalten");
digitalWrite(ROT, Status[2]);
break;
case 14:
// blaue LED
Status[3] = !Status[3];
Serial.print("gesendeter Befehl: ");
Serial.print(Schalten);
if (!Status[3])
{
Serial.println(" -> blaue LED ausschalten");
}
else Serial.println(" -> blaue LED einschalten");
digitalWrite(BLAU, Status[3]);
break;
case 15:
// gelbe LED
Status[4] = !Status[4];
Serial.print("gesendeter Befehl: ");
Serial.print(Schalten);
if (!Status[4])
{
Serial.println(" -> gelbe LED ausschalten");
}
else Serial.println(" -> gelbe LED einschalten");
digitalWrite(GELB, Status[4]);
break;
case 16:
Serial.print("gesendeter Befehl: ");
Serial.print(Schalten);
Serial.println(" -> alle einschalten");
AlleAn();
break;
case 17:
Serial.print("gesendeter Befehl: ");
Serial.print(Schalten);
Serial.println("-> alle ausschalten");
AlleAus();
break;
default:
break;
}
// Schaltbefehl löschen
Schalten = 0;
}
void UDPAbfragen()
{
// Daten abfragen
int PaketGroesse = Udp.parsePacket();
// wenn Daten empfangen wurden ...
if (PaketGroesse)
{
// ... Daten lesen
Udp.read(Pakete, UDP_TX_PACKET_MAX_SIZE);
Serial.println("-----------------------");
/*
gesendetes Paket zu int umwandeln
char-Array in String umwandeln
zu int umwandeln
alternativ mit atoi:
Schalten = atoi(Pakete);
*/
String SchaltWert = String(Pakete);
Schalten = SchaltWert.toInt();
// Schalten = atoi(Pakete);
// IP des Senders/Port anzeigen
Serial.print("Sender: ");
Serial.println(Udp.remoteIP());
// IP und Port des Ethernet-Shields
Serial.print("Adressat: ");
Serial.print(Ethernet.localIP());
Serial.println(" Port: " + String(Port));
Udp.beginPacket(Udp.remoteIP(), Udp.remotePort());
Udp.write("OK");
Udp.endPacket();
}
delay(10);
}
void Lauflicht()
{
AlleAus();
for (int i = GRUEN; i <= GELB; i++)
{
// aktuelle LED i einschalten
digitalWrite(i, HIGH);
delay(200);
// aktuelle LED i ausschalten
digitalWrite(i, LOW);
}
for (int i = GELB; i >= GRUEN; i--)
{
// aktuelle LED i einschalten
digitalWrite(i, HIGH);
delay(200);
// aktuelle LED i ausschalten
digitalWrite(i, LOW);
}
}
void AlleAn()
{
for (int i = GRUEN; i <= GELB; i ++)
{
// aktuelle LED i ausschalten
digitalWrite(i, HIGH);
}
// Status für alle LEDs auf 1 setzen
for (int i = 0; i < sizeof(Status); i++)
{
Status[i] = 1;
}
}
void AlleAus()
{
for (int i = GRUEN; i <= GELB; i ++)
{
// aktuelle LED i ausschalten
digitalWrite(i, LOW);
}
// Status für alle LEDs auf 0 setzen
for (int i = 0; i < sizeof(Status); i++)
{
Status[i] = 0;
}
}
Letzte Aktualisierung: