INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 1 Bewertungen - 3 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
float per NRF24 übertragen
06.04.2015, 23:23
Beitrag #1
float per NRF24 übertragen
Hallo zusammen,
ich heiße Ingo und bin neu hier im Forum.Ich bastel seit einiger Zeit mit Arduinos herum,bin aber nicht so der Profi im Programmieren.Angel
Ich habe gerade folgendes Problem:
Ich möchte mit Hilfe von NRF24 Modulen einen DHT22 Sensor abfragen , das Ergebnis auf den Empfänger schicken und auf einem LCD Display darstellen.
Wenn ich den DHT auslese und das Ergebnis als float zum Payload hinzufüge ,wird nur alles vor dem Komma übertragen, also aus 24,55°C werden 24°C.
Sender:

// Read temperature as Celsius
float t = dht.readTemperature();
payload_t payload = {t };

Empfänger:

// Structure of our payload
struct payload_t
{
unsigned long t;
};

So klappt das nicht, auch nicht wenn ich statt unsigned long ein float nehme.

Vielleicht hat ja jemand eine Idee, weil wichtig ist bei der Temperatur die übertragen wird auch das Vorzeichen,weil ein DHT22 auch negative Temps darstellt.

Gruß Ingo

Gruß Ingo Angel
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
07.04.2015, 04:26
Beitrag #2
RE: float per NRF24 übertragen
Hallo Ingo,

float als payload zu übertragen wird schwierig. Ich mache es lieber als String, etwa so:
Code:
char dht_result[5];
float temp;
temp = dht.readTemperature();
dtostrf(temp, 4, 1, dht_result);
String str(dht_result);
str ist dann die payload.
Grüße Ricardo

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
07.04.2015, 12:10
Beitrag #3
RE: float per NRF24 übertragen
@rkuehle
das ist ein guter Ansatz ,das werde ich ausprobieren und berichten
Danke

@kurti
ja ,so hab ich das im Moment gelöst, aber das ist nur für positive Temps gut,was passiert wenn du ein Minus vor der Temp brauchst?
Ich werde nachher den Ansatz von rkuehle testen.
Trotzdem Danke

Gruß Ingo

Gruß Ingo Angel
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
07.04.2015, 22:32
Beitrag #4
RE: float per NRF24 übertragen
Ich habe nun ein wenig probiert und das mit dem String funktioniert schon mal für die Temperatur.
Auf der RX Seite sieht das dann so aus:

network.read(header,receivedData,strlen(receivedData));

Received Data besteht nun aus 6 Stellen inkl 2 Nachkommastellen.

und auf der TX Seite:

char dht_result[6];
float temp;
temp = dht.readTemperature();
dtostrf(temp, 4, 2, dht_result);
String str(dht_result);

bool ok = network.write(header,dht_result,strlen(dht_result));

Soweit schon mal primaAngel
Wenn ich nun die Luftfeuchtigkeit auslese dann sieht das so aus:

char dht_rel[6];
float rela;
rela = dht.readHumidity();
dtostrf(rela, 4, 2, dht_rel);
String str2(dht_rel);

bool ok=network.write(header,dht_rel,strlen(dht_rel));

das für sich alleine übertragen geht auch.
Ich bekomme es nun aber nicht hin die beiden Strings auf einmal zu übertragen und weiß auch nicht wie man das dann beim Empfänger wieder auseinander sortieren kann.
Hat da nochmal jemand einen Tipp für mich?
Gruß Ingo

Gruß Ingo Angel
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
08.04.2015, 09:23
Beitrag #5
RE: float per NRF24 übertragen
Hallo Ingo,
wenn du dht_result bzw. dht_rel direkt rausschickst kannst du übrigens die Umwandlung mit String str... auch weglassen.
Ansonsten würde ich dir raten die Werte jeweils in ein Start- / Ende - Kennzeichen einzupacken. Da würde sich vielleicht die Raute # anbieten. So bist du immer in der Lage die Werte auseinander zu halten. Wie das gehen kann steht zb. hier: http://shanes.net/another-nrf24l01-sketc...ndreceive/
Grüße Ricardo

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
08.04.2015, 13:29 (Dieser Beitrag wurde zuletzt bearbeitet: 08.04.2015 13:29 von F2Ingo.)
Beitrag #6
RE: float per NRF24 übertragen
Danke für die Antwort,
ich habe auch noch etwas geforscht und habe z.B. diese Codeschnipsel gefunden
Codeschnipsel.
Ich werde nachher mal ein wenig testenWink
Gruß Ingo

Gruß Ingo Angel
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
13.04.2015, 12:03 (Dieser Beitrag wurde zuletzt bearbeitet: 13.04.2015 12:21 von F2Ingo.)
Beitrag #7
RE: float per NRF24 übertragen
Ja es funktioniertBig GrinBig GrinBig GrinBig GrinBig Grin,

Code:
network.update();

  // If it's time to send a message, send it!
  unsigned long now = millis();
  if ( now - last_sent >= interval  )
  {
    last_sent = now;
    x = !x;
      
    
    wData.tempData = dht.readTemperature();
    wData.humData = dht.readHumidity();
    wData.x = x ;
    
    
    Serial.print("Sending...");
    
    RF24NetworkHeader header(/*to node*/ other_node);
    bool ok = network.write(header,&wData, sizeof(wData));

Das X ist nur als Sendekontrolle aktiv und toggelt zwischen 0 und 1 . Auf der RX Seite siehts dann so aus

Code:
network.read( header , &wData, sizeof(wData) );
      
    Serial.print("Received packet #");
    lcd.setCursor(0,0);
    lcd.print ("Feuchte: ");
    lcd.print(wData.humData );
    lcd.print(" %  ");
    lcd.setCursor(0,1);
    lcd.print ("   Temp: ");
    lcd.print(wData.tempData);
    lcd.print((char)223);     // degree symbol
    lcd.print("C   ");     // C character
    lcd.setCursor(19,2);
    lcd.print(wData.x);

Alles so wie es erstmal sein soll, jetzt muß ich nur noch mehrere Sender abfragen, darum ja auch das Network Protokoll.
Gruß Ingo

Gruß Ingo Angel
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
14.04.2015, 13:42
Beitrag #8
RE: float per NRF24 übertragen
Ich lese nun schon seit mehreren Tagen NRF24 Beispiele ,aber ich habe noch nicht herausgefunden wie ich 2 Sender mit einem Empfänger auslese.
Der Empfänger wird Node 00 und die Sender Node 01 und Node 02 genannt,das soll wohl funktionieren, aber wie unterscheide ich am Empfänger von welchem Sender das Datenpaket gekommen ist?
Muß ich eine Kontroll ID (z.B. 1 und 2 für Sender 1 und Sender 2) mitsenden ?
Huh
Wer hat schon mal solch ein Projekt gebastelt?
Gruß Ingo

Gruß Ingo Angel
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  I2C Daten übertragen Gandalf 3 211 04.11.2016 13:20
Letzter Beitrag: hotsystems
  nrf24 an Mega 2560 jgrothe 2 161 10.09.2016 13:39
Letzter Beitrag: jgrothe
  Temperatur mit nrf24 übertragen jgrothe 17 657 09.09.2016 14:01
Letzter Beitrag: jgrothe
  Rechnen mit float und unsigned long Rudi 3 301 03.06.2016 12:41
Letzter Beitrag: hotsystems
  float in eeprom goldfisch 4 669 28.12.2015 18:54
Letzter Beitrag: Bitklopfer
  Float über I2C zwischen 2 Arduinos UNO Marduino_UNO 9 1.616 19.10.2015 09:09
Letzter Beitrag: Retian
  Umrechnung float Geodaten in Grad'Min'Sec.secfrac HaWe 0 602 04.10.2015 11:42
Letzter Beitrag: HaWe
  Anzahl der Float-Kommastellen bei einem Return Retian 1 708 25.07.2015 18:09
Letzter Beitrag: HaWe
  große 2-dim float-Arrays schnell auf SD speichern und zurücklesen? HaWe 25 2.186 22.06.2015 14:41
Letzter Beitrag: Thorsten Pferdekämper
  NRF24 soll Daten empfangen und senden... MaHaI976 2 938 08.06.2015 19:36
Letzter Beitrag: MaHaI976

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste