Hallo zusammen,
ich möchte über Funk (433Mhz-Sender & Empfänger) drei Daten senden. Zum einen Temperatur- und Luftfeuchtigkeitswerte (DHT11) und die Bodenfeuchtigkeit (soil moisture sensor).
Den Bodenfeuchtigkeitssensor habe ich beim Sender über den Analog 0 Pin angeschlossen. Dieser liefert Werte zwischen 0-1023.
Jedoch habe ich im Sketch eine Vorgabe darüber, wie viele Zeichen übertragen werden sollen. Und der Empfänger empfängt diese auch nur, wenn die exakte Anzahl an Zeichen auch gesendet worden ist.
Nun, da die Werte des Bodenfeuchtigkeits-Sensors variieren (1-4-stellig) funktioniert das Sketch nur teilweise.
Meine Frage nun: Wie schaffe ich es Werte zu übertragen, die nicht abhängig von der exakten Zeichenanzahl ist ?
Sketch Sender:
// Include RadioHead Amplitude Shift Keying Library
#include <RH_ASK.h>
// Include dependant SPI Library
#include <SPI.h>
// Include DHT Libraries from Adafruit
// Dependant upon Adafruit_Sensors Library
#include "DHT.h";
// Define Constants
#define DHTPIN 7 // DHT-22 Output Pin connection
#define DHTTYPE DHT11 // DHT Type is DHT 22 (AM2302)
// Define Variables
float hum; // Stores humidity value in percent
float temp; // Stores temperature value in Celcius
float feucht;
// Define output strings
String str_humid;
String str_temp;
String str_feucht;
String str_out;
// Create Amplitude Shift Keying Object
RH_ASK rf_driver;
// Initialize DHT sensor for normal 16mhz Arduino
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(9600);
// Initialize ASK Object
rf_driver.init();
// Start DHT Sensor
dht.begin();
}
void loop()
{
delay(2000); // Delay so DHT-22 sensor can stabalize
int feucht_edgy;
feucht_edgy = analogRead(0);
//Serial.println(feucht_edgy);
hum = dht.readHumidity(); // Get Humidity value
temp= dht.readTemperature(); // Get Temperature value
// Convert Humidity to string
str_humid = String(hum);
// Convert Temperature to string
str_temp = String(temp);
str_feucht = String(feucht_edgy);
// Combine Humidity and Temperature
str_out = str_humid + "," + str_temp + "," + str_feucht;
// Compose output character
static char *msg = str_out.c_str();
rf_driver.send((uint8_t *)msg, strlen(msg));
rf_driver.waitPacketSent();
Serial.println(str_out);
delay(2000);
}
Sketch Empfänger:
// Include RadioHead Amplitude Shift Keying Library
#include <RH_ASK.h>
// Include dependant SPI Library
#include <SPI.h>
// Define output strings
String str_humid;
String str_temp;
String str_feucht;
String str_out;
// Create Amplitude Shift Keying Object
RH_ASK rf_driver;
void setup()
{
// Initialize ASK Object
rf_driver.init();
// Setup Serial Monitor
Serial.begin(9600);
}
void loop()
{
// Set buffer to size of expected message
uint8_t buf[15];
uint8_t buflen = sizeof(buf);
// Check if received packet is correct size
if (rf_driver.recv(buf, &buflen))
{
// Message received with valid checksum
// Get values from string
// Convert received data into string
str_out = String((char*)buf);
// Split string into two values
/*for (int i = 0; i < str_out.length(); i++) {
if (str_out.substring(i, i+1) == ",") {
str_humid = str_out.substring(0, i);
str_temp = str_out.substring(i+1);
*/
for (int i = 0; i < str_out.length(); i++) {
if (str_out.substring(i, i+1) == ",") {
str_humid = str_out.substring(0,i);
str_temp = str_out.substring(i+1,i+6);
str_feucht = str_out.substring(i+7, i+10); //i+9
break;
}
}
// Print values to Serial Monitor
Serial.print("Humidity: ");
Serial.print(str_humid);
Serial.print(" - Temperature: ");
Serial.print(str_temp);
Serial.print(" - Boden: ");
Serial.print(str_feucht);
Serial.println("");
//Serial.println(str_out);
}
}
Danke für Eure Hilfe