diff --git a/examples/sPSN_PingTest/sPSN_PingTest.ino b/examples/sPSN_PingTest/sPSN_PingTest.ino new file mode 100644 index 0000000000000000000000000000000000000000..03f7594556151735e92def76407c3ca8c2ca223f --- /dev/null +++ b/examples/sPSN_PingTest/sPSN_PingTest.ino @@ -0,0 +1,114 @@ +/** + file: sPSN_HWTest + author: letsgoING -> info@letsgoing.de + + description: + Test-Software um Clients im Netzwerk "anzumelden" + + date: 01.12.2021 +*/ + +/** + *file: sPSN_PingTest + *author: letsgoING -> info@letsgoing.de + * + *description: + * Test-Software um Clients im Netzwerk "anzumelden" + * Für das Netwerk werden min. 3 Arduinos mit IR-Link-Modulen benötigt: + * + * Arduino1: sPSN_Broker.ino + * + * Arduino2: sPSN_PongTester.ino -> fragt Clients ab + * + * Arduino3: sPSN_PingTest.ino -> reagiert auf PongTester + * + *date: 01.12.2021 + */ + +#include "Arduino.h" + +#include "SoftwareSerial.h" +#include "didacticNet.h" + +//lege Geschwindigkeit für serielle Schnittstellen fest +#define SERIAL_BAUD 2400 + +//HIER CLIENT-NUMMER ANPASSEN +//******************************* +#define MY_NUMBER 1 +//******************************* + +#define LED_PIN 5 +#define LED2_PIN 6 +#define BUTTON_PIN 2 + + +//lege Pins für SoftwareSerielle Schnittstelle fest +// Rx = 10 -> Empfänger | Tx = 11 -> Sender +SoftwareSerial sSerial(10, 11); + +//Erzeuge Client-Instanz +DidacticPSNetClient psnClient; + +EdgeDetector eDetector; + +//Arrays für Empfangs- und Sende Topic +char topicSub[MAX_LEN_TOPICS] = ""; +char topicPub[MAX_LEN_TOPICS] = ""; + +char payloadSend[] = "Ping"; + +bool ledState = true; + +void myCallback(char* mTopic, int mToLength, char* mData, int mDaLength) { + Serial.println(mData); + digitalWrite(LED_BUILTIN, HIGH); +} + + +void setup() { + //Starte Serielle Schnittstelle (zum PC) + Serial.begin(SERIAL_BAUD); + delay(2000); + + sprintf(topicPub, "%02d", MY_NUMBER); + sprintf(topicSub, "%02d", MY_NUMBER); + + Serial.print("\nStarting sPSNet as Client "); + Serial.println(topicPub); + + + //Starte SoftwareSerielle Schnittstelle (zu IR-Link-Modulen) + sSerial.begin(SERIAL_BAUD); + + pinMode(LED_BUILTIN, OUTPUT); + pinMode(LED_PIN, OUTPUT); + pinMode(LED2_PIN, OUTPUT); + + digitalWrite(LED_BUILTIN, LOW); + digitalWrite(LED_PIN, ledState); + digitalWrite(LED2_PIN, ledState); + + psnClient.begin(sSerial, myCallback); + + psnClient.publish(topicPub, payloadSend); + while (!psnClient.handleNetwork()); + + psnClient.subscribe(topicSub); + while (!psnClient.handleNetwork()); + + psnClient.setInterval(10000L); +} + +void loop() { + //Verarbeiten der Daten, prüfen ob Netzwerk frei und versenden der Daten + psnClient.handleNetwork(); + + psnClient.publish(topicPub, payloadSend); + + if (eDetector.edgeDetected(digitalRead(BUTTON_PIN)) == RISING) { + ledState = !ledState; + digitalWrite(LED_PIN, !ledState); + digitalWrite(LED2_PIN, ledState); + } +} diff --git a/examples/sPSN_PongTester/sPSN_PongTester.ino b/examples/sPSN_PongTester/sPSN_PongTester.ino new file mode 100644 index 0000000000000000000000000000000000000000..bddbb0f9f95248e967c2bb387d899600e7140c44 --- /dev/null +++ b/examples/sPSN_PongTester/sPSN_PongTester.ino @@ -0,0 +1,93 @@ + +/** + *file: sPSN_PongTester + *author: letsgoING -> info@letsgoing.de + * + *description: + * Test-Software um Clients im Netzwerk "anzumelden" + * Für das Netwerk werden min. 3 Arduinos mit IR-Link-Modulen benötigt: + * + * Arduino1: sPSN_Broker.ino + * + * Arduino2: sPSN_PongTester.ino -> fragt Clients ab + * + * Arduino3: sPSN_PingTest.ino -> reagiert auf PongTester + * + *date: 01.12.2021 + */ + +#include "Arduino.h" + +#include "SoftwareSerial.h" +#include "didacticNet.h" + +//lege Geschwindigkeit für serielle Schnittstellen fest +#define SERIAL_BAUD 2400 + +//HIER CLIENT_ZAHL ANPASSEN +//******************************* +#define MAX_NR_CLIENTS 15 +//******************************* + +//lege Pins für SoftwareSerielle Schnittstelle fest +// Rx = 10 -> Empfänger | Tx = 11 -> Sender +SoftwareSerial sSerial(10, 11); + +//Erzeuge Client-Instanz +DidacticPSNetClient psnClient; + +//Arrays für Empfangs- und Sende Topic +char topicSub[MAX_LEN_TOPICS] = ""; +char topicPub[MAX_LEN_TOPICS] = ""; + +char payloadSend[] = "Pong"; + +bool ledState = true; + +void myCallback(char* mTopic, int mToLength, char* mData, int mDaLength) { + Serial.println(mTopic); + //reply pong + strcpy(topicPub, mTopic); + if (!strcmp(mData, "Ping")) { + Serial.print(" "); + Serial.println(mTopic); + psnClient.publish(topicPub, payloadSend); + } +} + + +void setup() { + //Starte Serielle Schnittstelle (zum PC) + Serial.begin(SERIAL_BAUD); + delay(2000); + + Serial.print("\nSearching for "); + Serial.print(MAX_NR_CLIENTS); + Serial.println(" sPSNet-Clients"); + + //Starte SoftwareSerielle Schnittstelle (zu IR-Link-Modulen) + sSerial.begin(SERIAL_BAUD); + + pinMode(LED_BUILTIN, OUTPUT); + digitalWrite(LED_BUILTIN, LOW); + + psnClient.begin(sSerial, myCallback); + + //psnClient.subscribe("*"); + Serial.println("Topics: "); + for (int clientNr = 0; clientNr < MAX_NR_CLIENTS; ++clientNr) { + sprintf(topicSub, "%02d", clientNr); + psnClient.subscribe(topicSub); + while (!psnClient.handleNetwork()); + Serial.print(topicSub); + Serial.print(" "); + } + + Serial.println("\n\nReady for Clients..."); + +} + +void loop() { + //Verarbeiten der Daten, prüfen ob Netzwerk frei und versenden der Daten + psnClient.handleNetwork(); +} diff --git a/src/didacticNet.h b/src/didacticNet.h index cf3b998c828dbbf53e5c6d77ffff7976f40ccad3..6da192282afb0d053a9f5372a80793af8c0729e0 100644 --- a/src/didacticNet.h +++ b/src/didacticNet.h @@ -34,7 +34,7 @@ #define INTERVAL_CLIENT 500L #define INTERVAL_BROKER 0L -#define MAX_NR_TOPICS_CLIENT 5 +#define MAX_NR_TOPICS_CLIENT 20 #define MAX_NR_TOPICS_BROKER 20 #define MAX_LEN_TOPICS 10 #define MAX_LEN_PAYLOAD 20