Skip to content
Snippets Groups Projects

Dev to Master

Merged Anian Bühler requested to merge dev into master
11 files
+ 375
483
Compare changes
  • Side-by-side
  • Inline
Files
11
+ 0
215
#include "Arduino.h"
#include "SoftwareSerial.h"
#include "didacticNet.h"
//#define BROKER
#define CLIENT
#define C5 // C1 C2 C3 C4 C5
#define SERIAL_BAUD 2400
SoftwareSerial sSerial(10, 11);
#ifdef BROKER
didacticPSNetBroker psnB;
void setup() {
Serial.begin(SERIAL_BAUD);
sSerial.begin(SERIAL_BAUD);
psnB.setStream(sSerial);
}
void loop() {
psnB.handleNetwork();
}
#endif
#ifdef CLIENT
unsigned long lastTime = 0L;
byte ledPin3 = 3;
byte ledPin5 = 5;
byte ledPin6 = 6;
byte buttonPin1= 2;
bool currentState = false;
bool lastState = false;
bool togglestate = true;
int lastValue = 0;
bool dataReadDone = false;
char readData[MAX_LEN_DATA*5]={'\0'};
char arrayBuffer[MAX_LEN_DATA+1] = {'\0'};
int counter = 0;
void myCallback(char* mTopic, int mToLength, char* mData, int mDaLength) {
#if defined(C1) || defined(C2) || defined(C3) || defined(C4)
Serial.println("Callback: ");
Serial.print("Topic: ");
Serial.print(mTopic);
Serial.print("\tData: ");
Serial.println(mData);
#elif defined(C5)
Serial.print(mTopic);
Serial.print(":\t");
Serial.println(mData);
#endif
#if defined(C1)
digitalWrite(ledPin3,(bool)atoi(mData));
#elif defined(C3)
analogWrite(ledPin3, map(atoi(mData),0,1023,0,255));
analogWrite(ledPin5, map(atoi(mData),0,1023,255,0));
#elif defined(C4)
digitalWrite(ledPin3,atoi(mData)<400);
digitalWrite(ledPin5,atoi(mData)<400);
digitalWrite(ledPin6,atoi(mData)<400);
#endif
}
#if defined(C1)
char topicSub[MAX_LEN_TOPICS]={"button1"};
char topicPub[MAX_LEN_TOPICS]={"poti1"};
#elif defined(C2)
char topicSub[MAX_LEN_TOPICS]={""};
char topicPub[MAX_LEN_TOPICS]={"ldr1"};
#elif defined(C3)
char topicSub[MAX_LEN_TOPICS]={"poti1"};
char topicPub[MAX_LEN_TOPICS]={""};
#elif defined(C4)
char topicSub[MAX_LEN_TOPICS]={"ldr1"};
char topicPub[MAX_LEN_TOPICS]={"button1"};
#elif defined(C5)
char topicSub[MAX_LEN_TOPICS]={""};
char topicPub[MAX_LEN_TOPICS]={""};
#endif
didacticPSNetClient psnC;
void setup() {
Serial.begin(2400);
sSerial.begin(2400);
pinMode(ledPin3, OUTPUT);
pinMode(ledPin5, OUTPUT);
pinMode(ledPin6, OUTPUT);
pinMode(buttonPin1, INPUT);
psnC.setStream(sSerial);
psnC.setCallback(myCallback);
#if defined(C1) || defined(C3) || defined(C4)
psnC.subscribe(topicSub, strlen(topicSub));
#endif
#if defined(C5)
Serial.print("Bitte den eigenen Namen mit einem # eingeben\nund mit Enter bestaetigen. -> ");
Serial.println("#DeinName");
Serial.print("Gebe dann die Namen deiner Chatpartner mit einem ? ein. -> ");
Serial.println("@ChatPartner");
Serial.println("Anschließend kannst du mit ihnen schreiben");
Serial.println();
Serial.println("HINWEIS:");
Serial.println("Stelle das Zeilenende im SerialMonitor auf \"Zeilenumbruch (CR)\"");
Serial.println("*********************************************************************\n");
#endif
}
void loop() {
psnC.handleNetwork();
#if defined(C1) || defined(C2)
int currentValue = analogRead(0);
if(abs(currentValue-lastValue) > 20){
delay(500);
currentValue = analogRead(0);
char data[MAX_LEN_DATA]={0};
itoa(currentValue, data, 10);
psnC.publish(topicPub, strlen(topicPub), data, strlen(data));
lastValue = currentValue;
}
#endif
#if defined(C3)
if(digitalRead(buttonPin1)){
togglestate = !togglestate;
if(!togglestate){
psnC.unsubscribe(topicSub, strlen(topicSub));
digitalWrite(ledPin3,LOW);
digitalWrite(ledPin5,LOW);
digitalWrite(ledPin6,LOW);
}
else{
psnC.subscribe(topicSub, strlen(topicSub));
}
delay(500);
}
#endif
#if defined(C4)
currentState = digitalRead(buttonPin1);
if(lastState != currentState){
char data[MAX_LEN_DATA]={0};
itoa(currentState, data, 10);
psnC.publish(topicPub, strlen(topicPub), data, strlen(data));
delay(500);
}
lastState = currentState;
#endif
#if defined(C5)
if(Serial.available()){
char buffer = Serial.read();
readData[counter] = buffer;
if(buffer == 13){
readData[counter] = '\0';
counter = 0;
dataReadDone = true;
}else{
counter++;
}
}
if(dataReadDone && strlen(readData)<= MAX_LEN_DATA*5 ){
if(readData[0] == '@'){
strcpy(readData, readData+1);
psnC.subscribe(readData, strlen(readData));
Serial.print("Kontakt zu ");
Serial.print(readData);
Serial.println(" hergestellt");
}
else if(readData[0] == '#'){
strcpy(topicPub, readData+1);
Serial.print("Dein Name:\t");
Serial.println(topicPub);
}
else {
for(int i = 0; i*MAX_LEN_DATA < strlen(readData); i++){
memset(arrayBuffer, '\0', MAX_LEN_DATA+1);
strncpy(arrayBuffer, &readData[MAX_LEN_DATA*i],MAX_LEN_DATA);
//Serial.print("ReadData: ");Serial.print(readData);Serial.print("\t");Serial.print(arrayBuffer);
psnC.publish(topicPub, strlen(topicPub), arrayBuffer, strlen(arrayBuffer));
while(psnC.isDataToSend()){
psnC.handleNetwork();
}
Serial.print("Ich:\t");
Serial.println(arrayBuffer);
/*Serial.print(topicPub);
Serial.print(" | ");
Serial.print(strlen(topicPub));
Serial.print(" | ");
Serial.print(arrayBuffer);
Serial.print(" | ");
Serial.print(strlen(arrayBuffer));
Serial.print(" | ");
Serial.println(i); */
//delay(1000);
}
}
dataReadDone = false;
}
#endif
}
#endif
Loading