Skip to content
Snippets Groups Projects
Select Git revision
  • 92a83c8bedafb60716b04269bc06b21270050ce8
  • main default protected
2 results

fetch.dart

Blame
  • Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    sPSN_Client1.ino 3.33 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
     *           - IR-Sender an Pin 11 IR-Empfänger an Pin10
     *
     * Arduino2: sPSN_Client1.ino (dieses Programm)
     *           - IR-Sender an Pin 11 IR-Empfänger an Pin10
     *           - Taster an Pin2
     *           - LED an Pin9
     *
     * Arduino3: sPSN_Client2.ino
     *           - IR-Sender an Pin 11 IR-Empfänger an Pin10
     *           - Poti an PinA0
     *           - LED an Pin9
     *
     * Funktion:
     * Mit dem Poti an Arduino3 kann die LED am Arduino2 gedimmt werden.
     * Mit dem Taster an Arduino2 kann die LED an Arduino2 ein-/ausgeschaltet werden.
     * Arduino1 übernimmt das Verteilen der Nachrichten.
     *
     *date:  14.12.2020
     *version: 1.0
     */
    
    #include "SoftwareSerial.h"
    #include "didacticNet.h"
    
    //lege Geschwindigkeit für serielle Schnittstellen fest
    #define SERIAL_BAUD 2400
    
    
    byte ledPin    = 9;
    byte potiPin   = A0;
    
    int lastValue     = 0;
    
    
    //Maximale Nachrichten- und Topic-Länge:
    //MAX_LEN_DATA = 20 Zeichen
    //MAX_LEN_TOPICS = 10 Zeichen
    //kann erhöht werden (z. B. #define MAX_LEN_TOPICS 20) , dann aber Arduino-Mega als Server sinnvoll
    
    //Arrays für Empfangs- und Sende Topic
    char topicSub[MAX_LEN_TOPICS] = "buttonVal";
    char topicPub[MAX_LEN_TOPICS] = "potiVal";
    
    void myCallback(char* mTopic, int mToLength, char* mData, int mDaLength) {
      Serial.println("Callback: ");
      Serial.print("Topic: ");
      Serial.print(mTopic);
      Serial.print("\tData: ");
      Serial.println(mData);
    
      //Setze Ausgang entsprechend dem gesendeten Wert
      digitalWrite(ledPin, (bool)atoi(mData));
    }
    
    
    //lege Pins für SoftwareSerielle Schnittstelle fest
    // Rx = 10 -> Empfänger | Tx = 11 -> Sender
    SoftwareSerial sSerial(10, 11);
    
    //Erzeuge Client-Instanz
    didacticPSNetClient psnClient;
    
    
    void setup() {
      //Starte Serielle Schnittstelle (zum PC)
      Serial.begin(SERIAL_BAUD);
    
      Serial.print("\nStarting sPSNet: \nlistening to:\t");
      Serial.println(topicSub);
      Serial.print("sending to:\t");
      Serial.println(topicPub);
    
      //Starte SoftwareSerielle Schnittstelle (zu IR-Link-Modulen)
      sSerial.begin(SERIAL_BAUD);
    
      pinMode(ledPin, OUTPUT);
    
      //Lege fest welche Serielle Schnittstelle für sPSN verwendet werden soll
      //psnClient.setStream(sSerial);
    
      //Lege Callback-Funktion fest (wird ausgeführt wenn neue Daten ankommen)
      //psnClient.setCallback(myCallback);
    
      psnClient.begin(sSerial, myCallback);
    
      //Lege fest zu welchem Topic Daten empfangen werden sollen
      psnClient.subscribe(topicSub);
    }
    
    void loop() {
      //Verarbeiten der Daten, prüfen ob Netzwerk frei und versenden der Daten
      psnClient.handleNetwork();
    
      //lese Poti ein und speichere Wert
      int currentValue = analogRead(potiPin);
    
      //Übertrage Werte nur, wenn sie sich geändert haben
      if (abs(currentValue - lastValue) > 20) {
        //warte kurz, um nicht zu oft zu senden
        delay(500);
        //lese den Poti erneut ein
        currentValue = analogRead(potiPin);
        //setze den Inhalt des Puffer-Arrays auf 0
        char data[MAX_LEN_DATA] = {0};
        //wandle int-Wert in ASCII-Zeichen
        itoa(currentValue, data, 10);
        //sende analog-Wert
        psnClient.publish(topicPub, data);
        //speichere aktuellen Wert, um zu erkennen, ob er sich ändert
        lastValue = currentValue;
      }
    }