// UNO R4 WiFi
// # include "WiFiS3.h"
// MKR WiFi 1010 Nano 33 IOT
# include "WiFiNINA.h"
# include "WiFiUdp.h"
// Status bestimmt, ob die jeweilige LED an oder aus ist
// alle LEDS beim Start aus
bool Status[5] = { 0, 0, 0, 0, 0 };
// die LEDs Startwert gelbe LED an Pin 6
enum Farben
{
GELB = 6,
BLAU,
ROT,
WEISS,
GRUEN
};
// festeIP = false -> IP-Adresse über DHCP vergeben
// festeIP = true -> IP festlegen
bool festeIP = false;
// feste IP
IPAddress ip(192, 168, 1, 200);
// Netzwerkstatus
int status = WL_IDLE_STATUS;
// Router: Name des Routers
// Passwort: WLAN-Passwort
char Router[] = "FRITZ!Box 7590 LB";
char Passwort[] = "anea1246";
// lokaler Port
#define Port 9000
// char-Array für die empfangenen Paket
char Pakete[255];
// Variable für den Befehl des Schaltvorgangs
byte Schalten;
WiFiUDP Udp;
void setup()
{
Serial.begin(9600);
// auf serielle Verbindung warten
while (!Serial);
if (festeIP) WiFi.config(ip);
// Verbindung aufbauen
if (WiFi.status() == WL_NO_MODULE)
{
Serial.println(F("Verbindungsaufbau gescheitert!"));
}
Serial.print("Verbindung aufbauen mit ");
Serial.println(Router);
while (status != WL_CONNECTED)
{
status = WiFi.begin(Router, Passwort);
// Zeit für den Verbindungsaufbau
// wenn die Verbindung nicht zustandekommt -> Zeit vergrößern
delay(500);
}
// pinMode: Startwert → GELB, Endwert → GRUEN
for (int i = GELB; i <= GRUEN; i++)
{
pinMode(i, OUTPUT);
}
// IP des Servers/des verbunden Computers anzeigen
Serial.print("Server: ");
Serial.println(WiFi.SSID());
// IP des Arduinos anzeigen
if (festeIP) Serial.print("Statische IP Adresse Arduino: ");
else Serial.print("IP Adresse Arduino DHCP: ");
Serial.println(WiFi.localIP());
Udp.begin(Port);
}
void loop()
{
// gesendete Pakete abfragen
UDPAbfragen();
// Schalten enthält die Anweisung welche LEDs geschaltet werden sollen
switch (Schalten)
{
// Lauflicht
case 10:
Serial.print("gesendeter Befehl: ");
Serial.print(Schalten);
Serial.println(" -> Lauflicht");
Lauflicht();
break;
case 11:
// gelbe 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:
// blaue 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:
// weiße 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:
// grüne 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:
// alle einschalten
Serial.print("gesendeter Befehl: ");
Serial.print(Schalten);
Serial.println(" -> alle einschalten");
AlleAn();
break;
// alle ausschalten
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, 255);
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();
// alternativ: Schalten = atoi(Pakete);
// IP des Senders/Port anzeigen
Serial.print("Sender: ");
Serial.println(Udp.remoteIP());
// IP und Port des
Serial.print("Adressat: ");
Serial.print(WiFi.localIP());
Serial.println(" Port: " + String(Port));
// Paket senden
Udp.beginPacket(Udp.remoteIP(), Udp.remotePort());
Udp.write("OK");
Udp.endPacket();
}
delay(10);
}
void Lauflicht()
{
AlleAus();
for (int i = GELB; i <= GRUEN; i++)
{
// aktuelle LED i einschalten
digitalWrite(i, HIGH);
delay(200);
// aktuelle LED i ausschalten
digitalWrite(i, LOW);
}
for (int i = GRUEN; i >= GELB; i--)
{
// aktuelle LED i einschalten
digitalWrite(i, HIGH);
delay(200);
// aktuelle LED i ausschalten
digitalWrite(i, LOW);
}
}
void AlleAn()
{
for (int i = GELB; i <= GRUEN; 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: