diff --git a/README.md b/README.md index bfffaaafc82e9b92365a5cd4d52d8aa60560952b..a6de41494395e1f0ca3568aa1c09997800d73542 100644 --- a/README.md +++ b/README.md @@ -4,14 +4,14 @@ Bibliothek zur Implementierung von vereinfachten Netzwerken auf Arduino-Boards. Die Funktionalitaeten entsprechen dem Stand der Technik, die Umsetzung ist didaktisch reduziert. Für eine Nutzung der Bibliothek wird eine drahtlose Schnittstelle benoetigt, wleche sich an der Seriellen Schnittstelle betreiben lässt. -Wir empfehlen unsere IR-Link-Module, die Sie selbst herstellen koennen (Schaltplan und Layout bei uns anfragen - Kontakt über [letsgoING.org](httsp://letsgoING.org) +Wir empfehlen unsere IR-Link-Module, die Sie selbst herstellen koennen (Schaltplan und Layout bei uns anfragen - Kontakt über [letsgoING.org](httsp://letsgoING.org) oder z. B. hier erwerben koennen: [Hinweise zur Bestellung bei Aisler](#bestellung-bei-aisler). - ## Download + Start download with the button on the right side. Choose the right format and start the download. - + After download install library: https://www.arduino.cc/en/guide/libraries section "Importing a .zip Library" @@ -21,14 +21,16 @@ https://www.arduino.cc/en/guide/libraries section "Importing a .zip Library" ## Beispiele **Broker:** -- sPSN_Broker.ino **->** Broker Applikation (muss nicht angepasst werden) + +- sPSN_Broker.ino **->** Broker Applikation (muss nicht angepasst werden) **Clients:** -- sPSN_Client1(2).ino **->** Client Applikationen die sich gegenseitig einen analogen bzw. digtalen Wert senden + +- sPSN_Client1(2).ino **->** Client Applikationen die sich gegenseitig einen analogen bzw. digtalen Wert senden - sPSN-ClientMinimal.ino **->** Minimal-Code für den einfachen Einstieg -- sPSN-Chat.ino **->** Chat-Applikation die Nachrichten unter eigenem Namen austauschen lässt +- sPSN-Chat.ino **->** Chat-Applikation die Nachrichten unter eigenem Namen austauschen lässt -## Funktionen und Parameter +## Funktionen und Parameter ### Client @@ -56,7 +58,7 @@ int psnClient.subscribe(char* topic); int psnClient.subscribe(char* topic, int length); // param1: Topic String/char-Array // param2: Anzahl Zeichen des Topics -// return ERROR-Wert: DN_ERROR_NO_ERROR, +// return ERROR-Wert: DN_ERROR_NO_ERROR, // DN_ERROR_TOPIC_LEN (Topic zu lang - wird abgeschnitten) #Anzahl der aboonierten Topics ausgeben @@ -71,62 +73,62 @@ int getSubscribedTopic(char*, int); // DN_ERROR_NO_TOPIC (Topic unter der angegebenen Nummer nicht verfügbar) #Topic eines anderen Clients entfernen -bool psnClient.unsubscribe(char* topic); +bool psnClient.unsubscribe(char* topic); // param: Topic String/char-Array -bool psnClient.unsubscribe(char* topic, int length); +bool psnClient.unsubscribe(char* topic, int length); // param1: Topic String/char-Array // param2: Anzahl Zeichen des Topics // return true wenn Daten versendet / false wenn nicht -#Daten unter Topic veroeffentlichen -int psnClient.publish(char* topic, char* payload); -// param1: Topic String/char-Array; +#Daten unter Topic veroeffentlichen +int psnClient.publish(char* topic, char* payload); +// param1: Topic String/char-Array; // param2: payload-char-Array -// return: ERROR-Wert: DN_PUBLISH_SUCCESSULL, -// DN_ERROR_TOPIC_LEN (Topic zu lang - wird abgeschnitten), +// return: ERROR-Wert: DN_PUBLISH_SUCCESSULL, +// DN_ERROR_TOPIC_LEN (Topic zu lang - wird abgeschnitten), // DN_ERROR_PAYLOAD_LEN (Payload zu lange - wird abgeschnitten) -int psnClient.publish(char* topic, bool payload); -// param1: Topic String/char-Array; +int psnClient.publish(char* topic, bool payload); +// param1: Topic String/char-Array; // param2: payload vom Datentyp bool (wird in char-Array gewandelt) -// return: ERROR-Wert: DN_PUBLISH_SUCCESSULL, -// DN_ERROR_TOPIC_LEN (Topic zu lang - wird abgeschnitten), +// return: ERROR-Wert: DN_PUBLISH_SUCCESSULL, +// DN_ERROR_TOPIC_LEN (Topic zu lang - wird abgeschnitten), // DN_ERROR_PAYLOAD_LEN (Payload zu lange - wird abgeschnitten) -int psnClient.publish(char* topic, int payload); -// param1: Topic String/char-Array; +int psnClient.publish(char* topic, int payload); +// param1: Topic String/char-Array; // param2: payload vom Datentyp int (wird in char-Array gewandelt) -// return: ERROR-Wert: DN_PUBLISH_SUCCESSULL, -// DN_ERROR_TOPIC_LEN (Topic zu lang - wird abgeschnitten), +// return: ERROR-Wert: DN_PUBLISH_SUCCESSULL, +// DN_ERROR_TOPIC_LEN (Topic zu lang - wird abgeschnitten), // DN_ERROR_PAYLOAD_LEN (Payload zu lange - wird abgeschnitten) -int psnClient.publish(char* topic, int topicLength, char* payload, int payloadLength); +int psnClient.publish(char* topic, int topicLength, char* payload, int payloadLength); // param1: Topic String/char-Array // param2: Anzahl Zeichen des Topics // param3: payload-char-Array // param4: Anzahl Zeichen der Payload -// return: ERROR-Wert: DN_PUBLISH_SUCCESSULL, -// DN_ERROR_TOPIC_LEN (Topic zu lang - wird abgeschnitten), +// return: ERROR-Wert: DN_PUBLISH_SUCCESSULL, +// DN_ERROR_TOPIC_LEN (Topic zu lang - wird abgeschnitten), // DN_ERROR_PAYLOAD_LEN (Payload zu lange - wird abgeschnitten) //Daten werden beim Zustandswechsel von payload (0->1 / 1->0) veroeffentlicht int psnClient.publishOnChange(char* topic, bool payload); -// param1: Topic String/char-Array; +// param1: Topic String/char-Array; // param2: payload vom Datentyp bool (wird in char-Array gewandelt) // return: ERROR-Wert: DN_PUBLISH_SUCCESSULL, -// DN_ERROR_NO_ERROR (Keine Daten veroeffentlicht und keine Fehler), -// DN_ERROR_TOPIC_LEN (Topic zu lang - wird abgeschnitten), +// DN_ERROR_NO_ERROR (Keine Daten veroeffentlicht und keine Fehler), +// DN_ERROR_TOPIC_LEN (Topic zu lang - wird abgeschnitten), // DN_ERROR_PAYLOAD_LEN (Payload zu lange - wird abgeschnitten) -// Daten werden veroeffentlicht, wenn Veränderung von payload groeßer als threshold ist +// Daten werden veroeffentlicht, wenn Veränderung von payload groeßer als threshold ist int psnClient.publishOnChange(char* topic, int payload, int threshold); -// param1: Topic String/char-Array; +// param1: Topic String/char-Array; // param2: payload vom Datentyp bool (wird in char-Array gewandelt) -// param1: Topic String/char-Array; +// param1: Topic String/char-Array; // return: ERROR-Wert: DN_PUBLISH_SUCCESSULL, -// DN_ERROR_NO_ERROR (Keine Daten veroeffentlicht und keine Fehler), -// DN_ERROR_TOPIC_LEN (Topic zu lang - wird abgeschnitten), +// DN_ERROR_NO_ERROR (Keine Daten veroeffentlicht und keine Fehler), +// DN_ERROR_TOPIC_LEN (Topic zu lang - wird abgeschnitten), // DN_ERROR_PAYLOAD_LEN (Payload zu lange - wird abgeschnitten) #Callback-Funktion (wird bei neuen Daten aufgerufen) @@ -149,10 +151,10 @@ void newData(char* topic, int topicLength, char* payload, int payloadLength){... #Anlegen der Broker-Instanz // Anlegen des Broker-Objekts // psnBroker -> moeglicher Name für Objekt -didacticPSNetBroker psnBroker; +didacticPSNetBroker psnBroker; -#Starten der Broker-Instanz -void psnBroker.begin(Stream& sSerial); +#Starten der Broker-Instanz +void psnBroker.begin(Stream& sSerial); // param: Schnittstelle (Serial | SoftwareSerial) #Netzwerkverwaltung Broker (Daten senden und Empfangen, Zugriffsregelung) @@ -161,13 +163,44 @@ bool psnBroker.handleNetwork(); void psnBroker.setInterval(long intervalTime); // param: Mindestwartezeit in ms zwischen zwei Sendevorgängen (default 0 ms) + +#Broker Verbose-Mode +//verbose-Ausgabe aktivieren +void psnBroker.setVerbose(Stream Serial); +//param: Stream-Port auf dem die Eingehenden Nachrichten ausgegeben werden sollen +// möglich: SoftwareSerial-Instanz, Serial, auch Serial1 / Serial2 / ... z. B. mit Mega2560-Boards + +//verbose-Ausgabe deaktivieren +void psnBroker.setNoneVerbose(); +//verbose-Ausgabe deaktivieren + ``` ### Hilfreiche Funktionen + Die Hiflsfunktionen sind als eigenständige Klassen implementiert und koennen so mehrfach (unter verschiedenen Namen) angelegt werden. So koennen die Funktionen mehrfach, mit unterschiedlichen Parametern, verwendet werden. ```cpp + +#Vereinfachtes Eingabe-Interface für den SerialMonitor +// Anlegen des serialMonitorUI-Objekts +// serialUI -> moeglicher Name für Objekt +serialMonitorUI serialUI; + +bool serialUI.available(); +// return: true -> wenn Eingabe vom SerialMonitor verfügbar ist (Eingabe mit Zeilenumbruch CR am SerialMonitor) +// false -> wenn KEINE Eingabe vom SerialMonitor verfügbar ist + +//gebe Steuerzeichen aus +char serialUI.readCommand(); +// return: CHAR an erster Stelle eingegebenes Steuerzeichen +// möglich: ! " # $ % & ' ( ) * + , - . / : ; < = > ? @ { + +//speichere Eingabe +void serialUI.readUserInput(char *); +//param: Array in das die Eingegebenen Zeichen gespeichert werden sollen + #Flankenerkennung z.B. fuer Taster // Anlegen des EdgeDetector-Objekts // eDetector -> moeglicher Name für Objekt @@ -211,6 +244,7 @@ int sReader.readSerialData(Stream&, char*, char); ### Konstanten Konstanten aus der Library die fuer die Programmierung genutzt werden und angepasst werden koennen. + ```cpp #ASCII Endezeichen DN_ASCII_CR "carriage return CR" (int) 13 @@ -260,4 +294,4 @@ CALLBACK_W_LENGTH not defined - vor der Bestellung Bauteilliste (Preise) aktualisieren - Bestellung der Platinen (Peautiful Boards) und der Bauteile (Precious Parts) -**Hinweis:** Das Projekt letsgoING ist in **keiner Weise** an dem **Verkauf beteiligt**. \ No newline at end of file +**Hinweis:** Das Projekt letsgoING ist in **keiner Weise** an dem **Verkauf beteiligt**.