Select Git revision
Forked from an inaccessible project.
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
sPSN_Client2.ino 2.75 KiB
/**
*file: sPSN_Client1
*author: letsgoING -> info@letsgoing.de
*
*description:
* Dieses Programm ist ein einfaches Beispiel für ein einfaches Pub-Sub-Netzwerk.
* Für das Netwerk werden 3 Arduinos mit IR-Link-Modulen benötigt:
*
* Arduino1: sPSN_Broker.ino
*
* Arduino2: sPSN_Client1.ino -> Sendet Wert des Potis | Empfängt Zustand des Tasters
* (Poti an PinA0 | LED an Pin5)
*
* Arduino3: sPSN_Client2.ino (dieses Programm) -> Sendet Zustand des Tasters | Empfängt Wert des Potis
* (Taster an Pin2 | LED an Pin5)
*
*date: 06.07.2021
*/
#include <Arduino.h>
#include "SoftwareSerial.h"
#include "didacticNet.h"
#define SERIAL_BAUD 2400 //lege Geschwindigkeit für serielle Schnittstellen fest
#define LED_PIN 5
#define LED2_PIN 6
#define BUTTON_PIN 2
char topicPublish[MAX_LEN_TOPICS] = "btnState"; //Topic unter dem (eigene) Daten veröffentlicht werden
char topicSubscribe[MAX_LEN_TOPICS] = "potiVal"; //Topic (von anderem TN) das abboniert werden soll
char payload[MAX_LEN_PAYLOAD] = {0};
boolean newData = false;
boolean ledState = false;
SoftwareSerial sSerial(10, 11); //Erzeuge SoftwareSerial-Instanz mit Rx = Pin10 -> Empfänger | Tx = Pin11 -> Sender
DidacticPSNetClient psnClient; //Erzeuge PubSub-Client-Instanz
UnblockingTimer uTimer;
//Callback-Funktion - wird beim Empfang neuer Daten aufgerufen
void clientCallback(char* mTopic, int mToLength, char* mData, int mDaLength) {
Serial.print("CB: ");
Serial.print(mTopic);
Serial.print(" | ");
Serial.println(mData);
int valuePoti = atoi(mData); //wandle ASCII-Zeichen in Wert
//Alternativ: sscanf(mData, "%d", &stateLED); //wandle ASCII-Zeichen in Wert
int valueLED = constrain(map(valuePoti, 0, 1023, 0, 255), 0, 255); //passe analogRead-Wert für analogWrite an
analogWrite(LED_PIN, valueLED); //Setze Ausgang entsprechend dem empfangenen Wert
analogWrite(LED2_PIN, 255-valueLED); //Setze Ausgang invertiert zum empfangenen Wert
}
void setup() {
Serial.begin(SERIAL_BAUD); //Starte Serielle Schnittstelle (zum PC)
sSerial.begin(SERIAL_BAUD); //Starte SoftwareSerielle Schnittstelle (zu IR-Link-Modulen)
psnClient.begin(sSerial, clientCallback); //Starte PubSub Client an SoftwareSerial Schnittstelle
//psnClient.begin(Serial, clientCallback); //Starte PubSub Client an Serial Schnittstelle
psnClient.subscribe(topicSubscribe); //Lege fest zu welchem Topic Daten empfangen werden sollen
}
void loop() {
psnClient.handleNetwork(); //Verarbeiten der Daten, prüfen ob Netzwerk frei und versenden der Daten
boolean buttonState = digitalRead(BUTTON_PIN); //lese Taster ein und speichere Wert
psnClient.publishOnChange(topicPublish, buttonState, CHANGE); //bereite Topic und Nutzdaten zum senden vor, wenn sich buttonState ändert
}