Go Down

Topic: Senden von Temperatur und Luftfeuchtigkeit mit Zigbee (Read 1 time) previous topic - next topic

Peter-CAD-HST

Moin adruinoboy
schaue dir dazu das Beispiel  Serial Event example aus dem IDE an.
Gruss Peter
und gesund bleiben
KISS Q&D - keep calm and carry on - mind the gap - beware of sharks! -

adruinoboy

#31
Sep 17, 2020, 11:50 am Last Edit: Sep 17, 2020, 11:51 am by adruinoboy
Danke für deinen Hinweis. ich habe versucht das in meinen Sketch einzubauen.

Code: [Select]

#include <SoftwareSerial.h>
#include "DHT.h"          //DHT Bibliothek laden

enum Comand {
              Temperatur   = 1,
              Feuchtigkeit = 2
            };

unsigned long BT_timestore;        //Variable Speicher für Systemzeit
float tempinnen = 0;
float feuchteinnen = 0;
String Temperatur = "";            // a String to hold incoming data
String Luftfeuchte = "";           // a String to hold incoming data
bool stringtempComplete = false;   // wheter the string is complete
bool stringfeuchteComplete = false;// wheter the string is complete

#define DHTPIN 2        //DHT22 wird am Pin2 ausgelesen
#define DHTTYPE DHT22   //Es handelt sich um den DHT22 Sensor

SoftwareSerial HC12(10, 11); // HC-12 TX Pin, HC-12 RX Pin
DHT dht(DHTPIN, DHTTYPE); //Der Sensor wird ab jetzt mit "dht" angesprochen

void setup()
{
 Serial.begin(9600);             // Serial port to computer
 HC12.begin(9600);               // Serial port to HC12
 //reserve 200 byzes for the Temp. und Luftfeuchte
 Temperatur.reserve(200);
 Luftfeuchte.reserve(200);
}

void loop()
{
  tempinnen = dht.readTemperature(); //Temperatur innen wird gemessen und gespeichert
  feuchteinnen = dht.readHumidity(); //Luftfeuchte innen wird gemessen und gespeichert

  while (HC12.available())        // If HC-12 has data
  {
  Serial.write(HC12.read());      // Send the data to Serial monitor
  //Senden der Messwerte
    HC12.print (Temperatur);   // Kommando
    HC12.print (",");          // Abgrenzung
    HC12.print (tempaussen);   // Messwert
    HC12.println (";");        // Abgrenzung

    HC12.print (Feuchtigkeit);  // Kommando
    HC12.print (",");           // Abgrenzung
    HC12.print (feuchteaussen); // Messwert
    HC12.println (";");         // Abgrenzung
  }
  while (Serial.available())
  {      // If Serial monitor has data
  HC12.write(Serial.read());      // Send that data to HC-12
  }
  if (stringtempComplete)
  {
    Serial.println(Temperatur);
    //clear the string:
    Temperatur = "";
    stringtempComplete = false;
  }

  if (stringfeuchteComplete)
  {
    Serial.println(Luftfeuchte);
    //clear the string:
    Luftfeuchte = "";
    stringfeuchteComplete = false;
  }
}

void serialEvent() {
  while (Serial.available()) {
    // get the new byte:
    char inChar = (char)Serial.read();
    // add it to the inputString:
    Temperatur += inChar;
    Luftfeuchte += inChar;
    // if the incoming character is a newline, set a flag so the main loop can
    // do something about it:
    if (inChar == '\n') {
      stringtempComplete = true;
      stringfeuchteComplete = true;
    }
  }
}


Probleme macht jetzt diese Zeile:
String Temperatur = "";

Die Fehlermeldung sieht so aus:
exit status 1
'String Temperatur' redeclared as different kind of symbol

HotSystems

Du willst doch mit diesem Sketch die Daten senden ?

Dann solltest du das mal vom auslesen der seriellen Schnittstelle und des HC-12 trennen.

Also schmeiß alles raus und sende nur die Daten.
Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. 8)

adruinoboy

Ja, ich habe meine ganzen Informationen in Sketche aufgeteilt.
Der eine soll senden, der andere nur aus lesen.
Also Meine Sender sieht jetzt so aus:

Code: [Select]

#include <Streaming.h>    //Bibliothek zur BT Verbindung
#include <SoftwareSerial.h>
#include "DHT.h"          //DHT Bibliothek laden

enum Comand {
              Temperatur   = 1,
              Feuchtigkeit = 2
            };

unsigned long BT_timestore;        // Variable Speicher für Systemzeit

#define DHTPIN 2        // DHT22 wird am Pin2 ausgelesen
#define DHTTYPE DHT22   // Es handelt sich um den DHT22 Sensor

SoftwareSerial HC12(10, 11); // HC-12 TX Pin, HC-12 RX Pin
DHT dht(DHTPIN, DHTTYPE);    // Der Sensor wird ab jetzt mit "dht" angesprochen

void setup()
{
 Serial.begin(9600);             // Serial port to computer
 HC12.begin(9600);               // Serial port to HC12
}

void loop()
{
  tempaussen = dht.readTemperature(); // Temperatur innen wird gemessen und gespeichert
  feuchteaussen = dht.readHumidity(); // Luftfeuchte innen wird gemessen und gespeichert

  while (HC12.available())        // If HC-12 has data
  {
  //Senden der Messwerte
    HC12.print (Temperatur);   // Kommando
    HC12.print (",");          // Abgrenzung
    HC12.print (tempaussen);   // Messwert
    HC12.println (";");        // Abgrenzung

    HC12.print (Feuchtigkeit);  // Kommando
    HC12.print (",");           // Abgrenzung
    HC12.print (feuchteaussen); // Messwert
    HC12.println (";");         // Abgrenzung
  }
  while (Serial.available())
  {      // If Serial monitor has data
  HC12.write(Serial.read());      // Send that data to HC-12
  }
}


Mein Empfänger so:

Code: [Select]

#include <Streaming.h>    //Bibliothek zur BT Verbindung
#include <SoftwareSerial.h>
#include "DHT.h"          //DHT Bibliothek laden

enum Comand {
              Temperatur   = 1,
              Feuchtigkeit = 2
            };

unsigned long BT_timestore;        //Variable Speicher für Systemzeit
float tempinnen = 0;
float feuchteinnen = 0;
String Temperatur = "";            // a String to hold incoming data
String Luftfeuchte = "";           // a String to hold incoming data
bool stringtempComplete = false;   // wheter the string is complete
bool stringfeuchteComplete = false;// wheter the string is complete

#define DHTPIN 2        //DHT22 wird am Pin2 ausgelesen
#define DHTTYPE DHT22   //Es handelt sich um den DHT22 Sensor

SoftwareSerial HC12(10, 11); // HC-12 TX Pin, HC-12 RX Pin
DHT dht(DHTPIN, DHTTYPE); //Der Sensor wird ab jetzt mit "dht" angesprochen

void setup()
{
 Serial.begin(9600);             // Serial port to computer
 HC12.begin(9600);               // Serial port to HC12
 //reserve 200 byzes for the Temp. und Luftfeuchte
 Temperatur.reserve(200);
 Luftfeuchte.reserve(200);
}

void loop()
{
  tempinnen = dht.readTemperature(); //Temperatur innen wird gemessen und gespeichert
  feuchteinnen = dht.readHumidity(); //Luftfeuchte innen wird gemessen und gespeichert

  while (HC12.available())        // If HC-12 has data
  {
  Serial.write(HC12.read());      // Send the data to Serial monitor
  //Senden der Messwerte
    HC12.print (Temperatur);   // Kommando
    HC12.print (",");          // Abgrenzung
    HC12.print (tempaussen);   // Messwert
    HC12.println (";");        // Abgrenzung

    HC12.print (Feuchtigkeit);  // Kommando
    HC12.print (",");           // Abgrenzung
    HC12.print (feuchteaussen); // Messwert
    HC12.println (";");         // Abgrenzung
  }
  while (Serial.available())
  {      // If Serial monitor has data
  HC12.write(Serial.read());      // Send that data to HC-12
  }
  if (stringtempComplete)
  {
    Serial.println(Temperatur);
    //clear the string:
    Temperatur = "";
    stringtempComplete = false;
  }

  if (stringfeuchteComplete)
  {
    Serial.println(Luftfeuchte);
    //clear the string:
    Luftfeuchte = "";
    stringfeuchteComplete = false;
  }
}

void serialEvent() {
  while (Serial.available()) {
    // get the new byte:
    char inChar = (char)Serial.read();
    // add it to the inputString:
    Temperatur += inChar;
    Luftfeuchte += inChar;
    // if the incoming character is a newline, set a flag so the main loop can
    // do something about it:
    if (inChar == '\n') {
      stringtempComplete = true;
      stringfeuchteComplete = true;
    }
  }
}

HotSystems

Und wozu hast du im Sender diese Anweisung ?
Code: [Select]
while (HC12.available())        // If HC-12 has data

Die brauchst da nicht.
Und im Empfänger sehe ich da auch Optimierungspotential.
Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. 8)

adruinoboy

Danke. Beim Sender gibt es keine Probleme beim Hochladen.

Ich freue mich sehr, wenn du mich langsam durch deine Optimierungsschritte leiten könntest.
Ich würde gerne einen optimalen Sketch haben und dabei etwas lernen.

Der Empfänger hat beim Hochladen folgendes Problem:

exit status 1
'String Temperatur' redeclared as different kind of symbol

Der Fehler bezieht sich auf diese Zeile:
String Temperatur = "";

Ich verstehe das Problem nicht.

michael_x

Code: [Select]
enum Comand {
              Temperatur   = 1,
              Feuchtigkeit = 2
            };

String Temperatur = "";

void setup() {}
void loop() {}
Problem

Neben Umbenennen hilft auch

Code: [Select]
enum class Comand {
              Temperatur  ,
              Feuchtigkeit
            };

String Temperatur = "";
Comand typ = Comand::Temperatur;
void setup() {}
void loop() {}
erfordert Comand::Temperatur bei Bedarf

HotSystems

Danke. Beim Sender gibt es keine Probleme beim Hochladen.

Ich freue mich sehr, wenn du mich langsam durch deine Optimierungsschritte leiten könntest.
Ich würde gerne einen optimalen Sketch haben und dabei etwas lernen.

Wenn es beim Hochladen keine Problem gibt, heißt es nicht, dass es auch funktioniert.

Warum siehst du dir nicht die Beispiele an, die ich in Post #26 verlinkt habe.
Da ist alles sehr genau beschrieben und funktioniert.

Du musst beim Senden nicht vorher den Empfänger auf Daten abfragen.
Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. 8)

adruinoboy

#38
Sep 17, 2020, 08:59 pm Last Edit: Sep 17, 2020, 11:08 pm by adruinoboy
Ich habe meinen Sketch laut den Hinweisen von Michael_x angepasst.
Ich muss ja für die Temperatur als auch für die Feuchtigkeit den Comand typ erstellen. Bei der Temperatur meckert das Programm nicht, aber bei der Feuchtigkeit. Mein Sketch sieht so aus:

Code: [Select]

#include <Streaming.h>    //Bibliothek zur BT Verbindung
#include <SoftwareSerial.h>
#include "DHT.h"          //DHT Bibliothek laden

enum class Comand {
              Temperatur ,
              Feuchtigkeit
            };

unsigned long BT_timestore;        //Variable Speicher für Systemzeit
float tempinnen = 0;
float feuchteinnen = 0;
String Temperatur = "";            // a String to hold incoming data
Comand typ = Comand::Temperatur;   // Wird nur bei Bedarf erzeugt
String Luftfeuchte = "";           // a String to hold incoming data
Comand typ = Comand::Luftfeuchte;  // Wird nur bei Bedarf erzeugt
bool stringtempComplete = false;   // wheter the string is complete
bool stringfeuchteComplete = false;// wheter the string is complete

#define DHTPIN 2        //DHT22 wird am Pin2 ausgelesen
#define DHTTYPE DHT22   //Es handelt sich um den DHT22 Sensor

SoftwareSerial HC12(10, 11); // HC-12 TX Pin, HC-12 RX Pin
DHT dht(DHTPIN, DHTTYPE); //Der Sensor wird ab jetzt mit "dht" angesprochen

void setup()
{
 Serial.begin(9600);             // Serial port to computer
 HC12.begin(9600);               // Serial port to HC12
 //reserve 200 byzes for the Temp. und Luftfeuchte
 Temperatur.reserve(200);
 Luftfeuchte.reserve(200);
}

void loop()
{
  tempinnen = dht.readTemperature(); //Temperatur innen wird gemessen und gespeichert
  feuchteinnen = dht.readHumidity(); //Luftfeuchte innen wird gemessen und gespeichert

  while (HC12.available())        // If HC-12 has data
  {
  Serial.write(HC12.read());      // Send the data to Serial monitor
  //Senden der Messwerte
    HC12.print (Temperatur);   // Kommando
    HC12.print (",");          // Abgrenzung
    HC12.print (tempinnen);   // Messwert
    HC12.println (";");        // Abgrenzung

    HC12.print (Feuchtigkeit);  // Kommando
    HC12.print (",");           // Abgrenzung
    HC12.print (feuchteinnen); // Messwert
    HC12.println (";");         // Abgrenzung
  }
  while (Serial.available())
  {      // If Serial monitor has data
  HC12.write(Serial.read());      // Send that data to HC-12
  }
  if (stringtempComplete)
  {
    Serial.println(Temperatur);
    //clear the string:
    Temperatur = "";
    stringtempComplete = false;
  }

  if (stringfeuchteComplete)
  {
    Serial.println(Luftfeuchte);
    //clear the string:
    Luftfeuchte = "";
    stringfeuchteComplete = false;
  }
}

void serialEvent() {
  while (Serial.available()) {
    // get the new byte:
    char inChar = (char)Serial.read();
    // add it to the inputString:
    Temperatur += inChar;
    Luftfeuchte += inChar;
    // if the incoming character is a newline, set a flag so the main loop can
    // do something about it:
    if (inChar == '\n') {
      stringtempComplete = true;
      stringfeuchteComplete = true;
    }
  }
}


Die Fehlermeldung lautet:

exit status 1
redefinition of 'Comand typ'

Ich verstehe das nicht. Wenn ich die Zeile als Kommentar vernachlässige:
// Comand typ = Comand::Luchtfeuchte;
Meckert er, dass Feuchtigkeit nicht definiert ist.

Freue mich über weitere Hilfestellungen.

HotSystems

Lt. welchen Hinweisen ?
Kannst du das nicht zitieren oder beischreiben ?
Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. 8)

adruinoboy

Warum siehst du dir nicht die Beispiele an, die ich in Post #26 verlinkt habe.
Da ist alles sehr genau beschrieben und funktioniert.

Auf der Seite finde ich am Ende nur ein Beispiel zur Parametrierung des HC-12 Moduls.
Ich wüsste nicht, wie ich das für mich anwenden könnte.

Ich freue mich, wenn du mich eines besseren Belehren könntest.

Serenifly

Code: [Select]

enum class Comand {
              Temperatur ,
              Feuchtigkeit
            };

Code: [Select]

Comand typ = Comand::Luftfeuchte;


Du musst das auch richtig und konsequent anwenden

Eigentlich sollte eher gemeckert werden dass "Luftfeuchte" nicht definiert ist


Außerdem definierst du "typ" zweimal:
Code: [Select]

Comand typ = Comand::Temperatur;
Comand typ = Comand::Luftfeuchte;


Und "command" schreibt man mit zwei 'm' ;)

adruinoboy

Danke Serenifly,

das sollte eigentlich klar sein. Tut mir Leid, dass ich so unaufmerksam war.
Ich habe jetzt meine Variablen konstant angewendet und Command richtig geschrieben ;)
Dann funktioniert es auch sofort besser.

Meine Sender-Sketch sieht so aus:

Code: [Select]

#include <Streaming.h>    //Bibliothek zur BT Verbindung
#include <SoftwareSerial.h>
#include "DHT.h"          //DHT Bibliothek laden

enum class Command {
              Temperatur ,
              Feuchtigkeit
            };

float Temperatur = 0;
float Feuchtigkeit = 0;
unsigned long BT_timestore;        // Variable Speicher für Systemzeit

#define DHTPIN 2        // DHT22 wird am Pin2 ausgelesen
#define DHTTYPE DHT22   // Es handelt sich um den DHT22 Sensor

SoftwareSerial HC12(10, 11); // HC-12 TX Pin, HC-12 RX Pin
DHT dht(DHTPIN, DHTTYPE);    // Der Sensor wird ab jetzt mit "dht" angesprochen

void setup()
{
 Serial.begin(9600);             // Serial port to computer
 HC12.begin(9600);               // Serial port to HC12
}

void loop()
{
  Temperatur = dht.readTemperature(); // Temperatur innen wird gemessen und gespeichert
  Feuchtigkeit = dht.readHumidity(); // Luftfeuchte innen wird gemessen und gespeichert

  //Senden der Messwerte
    HC12.print (Temperatur);   // Kommando
    HC12.print (",");          // Abgrenzung
    HC12.print (Feuchtigkeit);  // Kommando
    HC12.print (",");           // Abgrenzung
}


Und mein Empfänger-Sketch:

Code: [Select]

#include <Streaming.h>    //Bibliothek zur BT Verbindung
#include <SoftwareSerial.h>
#include "DHT.h"          //DHT Bibliothek laden

enum class Command {
              Temperatur ,
              Feuchtigkeit
            };

unsigned long BT_timestore;        //Variable Speicher für Systemzeit
String Temperatur = "";            // a String to hold incoming data
Command typ1 = Command::Temperatur;   // Wird nur bei Bedarf erzeugt
String Feuchtigkeit = "";           // a String to hold incoming data
Command typ2 = Command::Feuchtigkeit;  // Wird nur bei Bedarf erzeugt
bool stringtempComplete = false;   // wheter the string is complete
bool stringfeuchteComplete = false;// wheter the string is complete

#define DHTPIN 2        //DHT22 wird am Pin2 ausgelesen
#define DHTTYPE DHT22   //Es handelt sich um den DHT22 Sensor

SoftwareSerial HC12(10, 11); // HC-12 TX Pin, HC-12 RX Pin
DHT dht(DHTPIN, DHTTYPE); //Der Sensor wird ab jetzt mit "dht" angesprochen

void setup()
{
 Serial.begin(9600);             // Serial port to computer
 HC12.begin(9600);               // Serial port to HC12
 //reserve 200 byzes for the Temp. und Luftfeuchte
 Temperatur.reserve(200);
 Feuchtigkeit.reserve(200);
}

void loop()
{
  Temperatur = dht.readTemperature(); //Temperatur innen wird gemessen und gespeichert
  Feuchtigkeit = dht.readHumidity(); //Luftfeuchte innen wird gemessen und gespeichert

  while (HC12.available())        // If HC-12 has data
  {
  Serial.write(HC12.read());      // Send the data to Serial monitor
  //Senden der Messwerte
    HC12.print (Temperatur);   // Kommando
    HC12.print (",");          // Abgrenzung
    HC12.print (Feuchtigkeit);  // Kommando
    HC12.print (",");           // Abgrenzung
  }
  while (Serial.available())
  {      // If Serial monitor has data
  HC12.write(Serial.read());      // Send that data to HC-12
  }
  if (stringtempComplete)
  {
    Serial.println(Temperatur);
    //clear the string:
    Temperatur = "";
    stringtempComplete = false;
  }

  if (stringfeuchteComplete)
  {
    Serial.println(Feuchtigkeit);
    //clear the string:
    Feuchtigkeit = "";
    stringfeuchteComplete = false;
  }
}

void serialEvent() {
  while (Serial.available()) {
    // get the new byte:
    char inChar = (char)Serial.read();
    // add it to the inputString:
    Temperatur += inChar;
    Feuchtigkeit += inChar;
    // if the incoming character is a newline, set a flag so the main loop can
    // do something about it:
    if (inChar == '\n') {
      stringtempComplete = true;
      stringfeuchteComplete = true;
    }
  }
}


Ihr wollt bestimmt wissen was am Empfänger raus kommt. So was hier:

Code: [Select]

23:40:34.195 -> b⸮⸮L⸮/90ɹ⸮⸮⸮⸮⸮⸮21n⸮⸮r⸮ILL⸮.9XŽ⸮⸮KM⸮,21ݱ⸮⸮⸮⸮0,b⸮b⸮⸮$LL⸮.9X⸮݂⸮%MN⸮2L'b⸮⸮rLKKK⸮b⸮bN⸮,⸮⸮4LK%I⸮⸮Mh⸮⸮⸮S⸮hD⸮''t⸮b⸮Mh⸮'b⸮⸮⸮L.70,f⸮b⸮t⸮⸮i'⸮&MK⸮217⸮⸮r⸮⸮t⸮⸮⸮KK⸮1.⸮њrbt⸮⸮⸮KK⸮1.⸮њrbt⸮⸮⸮KK⸮11b&I4⸮$Dr&b⸮Ѻ⸮L%ӂ⸮`i⸮\⸮⸮I⸮3⸮trLK⸮LI⸮XŹ2⸮3⸮$it&&%r.70,45.00,21.70,45.00,21.70,45.00,21.70,45.00,21.70,45.00,21.70X⸮⸮L#⸮r⸮⸮SSD1L&⸮⸮.⸮⸮D$⸮⸮&M⸮.Dɘ⸮⸮LL⸮$r⸮⸮⸮rM.60,44.90,21.60,44.90,21.60,44.90,21.60,44.90,21.60,44.90,21.60.MNIb⸮NK⸮$dN2L&⸮r\%⸮&⸮⸮L,bM⸮6⸮b⸮⸮K⸮db'.70ѹ⸮⸮L⸮⸮&⸮M⸮⸮21ݱ⸮⸮⸮I⸮KM⸮,21ݱ⸮⸮ ⸮I&KM⸮,


Für mich schon mal ein Fortschritt. Aber ich hoffe es geht noch besser :)

HotSystems

#43
Sep 18, 2020, 08:44 am Last Edit: Sep 18, 2020, 08:46 am by HotSystems
Auf der Seite finde ich am Ende nur ein Beispiel zur Parametrierung des HC-12 Moduls.
Ich wüsste nicht, wie ich das für mich anwenden könnte.

Ich freue mich, wenn du mich eines besseren Belehren könntest.
Ahh...ich sehe schon, du hast es ja schon so hinbekommen.
Endlich auch ohne der überflüssigen Abfrage im Sender. ;)

Aber du hast Recht, in dem Beitrag ist kein Tutorial für den HC-12 mehr vorhanden.
K.A. wo das geblieben ist, egal geht ja jetzt.

Was das Problem mit den gezeigten Daten ist, muss ich mir noch näher ansehen.

Da du ja kein Streaming weiter verwendest, kannst du die Einbindung der Library auch wieder entfernen.

Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. 8)

adruinoboy

Ja, okay. Ich habe die Bibliotheken rausgenommen.
Also nochmal, fast das gleiche. Der Sender:

Code: [Select]

#include <SoftwareSerial.h>
#include "DHT.h"          //DHT Bibliothek laden

enum class Command {
              Temperatur ,
              Feuchtigkeit
            };

float Temperatur = 0;
float Feuchtigkeit = 0;
unsigned long BT_timestore;        // Variable Speicher für Systemzeit

#define DHTPIN 2        // DHT22 wird am Pin2 ausgelesen
#define DHTTYPE DHT22   // Es handelt sich um den DHT22 Sensor

SoftwareSerial HC12(10, 11); // HC-12 TX Pin, HC-12 RX Pin
DHT dht(DHTPIN, DHTTYPE);    // Der Sensor wird ab jetzt mit "dht" angesprochen

void setup()
{
 Serial.begin(9600);             // Serial port to computer
 HC12.begin(9600);               // Serial port to HC12
}

void loop()
{
  Temperatur = dht.readTemperature(); // Temperatur innen wird gemessen und gespeichert
  Feuchtigkeit = dht.readHumidity(); // Luftfeuchte innen wird gemessen und gespeichert

  //Senden der Messwerte
    HC12.print (Temperatur);   // Kommando
    HC12.print (",");          // Abgrenzung
    HC12.print (Feuchtigkeit);  // Kommando
    HC12.print (",");           // Abgrenzung
}


Und hier der Empfänger:

Code: [Select]

#include <SoftwareSerial.h>
#include "DHT.h"          //DHT Bibliothek laden

enum class Command {
              Temperatur ,
              Feuchtigkeit
            };

unsigned long BT_timestore;        //Variable Speicher für Systemzeit
String Temperatur = "";            // a String to hold incoming data
Command typ1 = Command::Temperatur;   // Wird nur bei Bedarf erzeugt
String Feuchtigkeit = "";           // a String to hold incoming data
Command typ2 = Command::Feuchtigkeit;  // Wird nur bei Bedarf erzeugt
bool stringtempComplete = false;   // wheter the string is complete
bool stringfeuchteComplete = false;// wheter the string is complete

#define DHTPIN 2        //DHT22 wird am Pin2 ausgelesen
#define DHTTYPE DHT22   //Es handelt sich um den DHT22 Sensor

SoftwareSerial HC12(10, 11); // HC-12 TX Pin, HC-12 RX Pin
DHT dht(DHTPIN, DHTTYPE); //Der Sensor wird ab jetzt mit "dht" angesprochen

void setup()
{
 Serial.begin(9600);             // Serial port to computer
 HC12.begin(9600);               // Serial port to HC12
 //reserve 200 byzes for the Temp. und Luftfeuchte
 Temperatur.reserve(200);
 Feuchtigkeit.reserve(200);
}

void loop()
{
  Temperatur = dht.readTemperature(); //Temperatur innen wird gemessen und gespeichert
  Feuchtigkeit = dht.readHumidity(); //Luftfeuchte innen wird gemessen und gespeichert

  while (HC12.available())        // If HC-12 has data
  {
  Serial.write(HC12.read());      // Send the data to Serial monitor
  //Senden der Messwerte
    HC12.print (Temperatur);   // Kommando
    HC12.print (",");          // Abgrenzung
    HC12.print (Feuchtigkeit);  // Kommando
    HC12.print (",");           // Abgrenzung
  }
  while (Serial.available())
  {      // If Serial monitor has data
  HC12.write(Serial.read());      // Send that data to HC-12
  }
  if (stringtempComplete)
  {
    Serial.println(Temperatur);
    //clear the string:
    Temperatur = "";
    stringtempComplete = false;
  }

  if (stringfeuchteComplete)
  {
    Serial.println(Feuchtigkeit);
    //clear the string:
    Feuchtigkeit = "";
    stringfeuchteComplete = false;
  }
}

void serialEvent() {
  while (Serial.available()) {
    // get the new byte:
    char inChar = (char)Serial.read();
    // add it to the inputString:
    Temperatur += inChar;
    Feuchtigkeit += inChar;
    // if the incoming character is a newline, set a flag so the main loop can
    // do something about it:
    if (inChar == '\n') {
      stringtempComplete = true;
      stringfeuchteComplete = true;
    }
  }
}


Ich freue mich, wenn ihr da noch genauer rein schaut.

Go Up