Select Git revision
project_controller.go
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
sPSN_Client2.ino 3.26 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 BUTTON_PIN 2
#define SEND_DELAY 500 //Mindestwarezeit zwischen zwei Sendevorgängen
char topicPublish[MAX_LEN_TOPICS] = "buttonVal"; //Topic für zu sendende (eigene) Daten
char topicSubscribe[MAX_LEN_TOPICS] = "potiVal"; //Topic für zu empfangende Daten (von anderem TN)
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
//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 valueLED = atoi(mData); //wandle ASCII-Zeichen in Wert
valueLED = constrain(map(valueLED, 0, 1023, 0, 255), 0, 255); //passe analogRead-Wert für analogWrite an
//Alternativ: sscanf(mData, "%d", &stateLED); //wandle ASCII-Zeichen in Wert
analogWrite(LED_PIN, valueLED); //Setze Ausgang entsprechend dem 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() {