Problem mit von Xbee Modulen empfangenen Daten

Hallo,

ich lasse 2 Arduinos via Xbee Serie 2 Modulen miteinander kommunizieren. Der Sender liest die analogen Werte eines Sensors ein und sendet sie an den Empfänger. Die Module sind richtig konfiguriert und kommunizieren miteinander. Mein Problem ist, dass anscheinend nur ASCII Code angekommt. Das habe ich genützt um die Codes mit der Nr. 10 und 13 herauszufiltern. Danach gebe ich die restlichen empfangenen Daten aus. Leider erscheinen dann aber nur die ASCII Codes mit vielen Nullen hinter dem Komma und nicht die eigentlichen Werte zwischen 0 und 5 Volt.
Bin für jede Hilfe und Beispielcodes dankbar! :slight_smile:

Sender:

#define NUMSAMPLES 2

// GSR sensor variables
int sensorPin = A0; // select the input pin for the GSR
float sensorValue; // variable to store the value coming from the sensor

int samples [NUMSAMPLES];

void setup() {
// Prepare serial port
Serial.begin(57600);
analogReference(DEFAULT);
}
void loop() {
uint8_t i;
float average;

for(i=0; i< NUMSAMPLES; i++) {
  samples[i] = analogRead(sensorPin);
  delay(10);
}

average = 0;
for (i=0; i< NUMSAMPLES; i++) {
  average += samples[i];
}
average /= NUMSAMPLES;

sensorValue = (average * 5.0) / 1023.0;
Serial.println(sensorValue, 2);
delay(1000);
}

Empfänger:

#define ledPin 13

float data;

void setup() {
  Serial.begin(57600);
}

void loop() {
  if (Serial.available()) {
    while(((data = Serial.read()) != 13) && ( data != 10 )) {
      Serial.println (data, DEC);
    }
  }
}

Das ist kein problem das mit den XBee zu tun hat.
Schreibe die empfangenen Zahlen in ein Array, füge am Ende den Wert 0 dazu und wandle dann mit atof in ein float um.

if (Serial.available()) {
    i=0;
    while(((data = Serial.read()) != 13) && ( data != 10 )) {
      daten[i]= data;
      i++;
    }
  }
daten[i]= 0;
wert = atof (daten);

uwefed:
Schreibe die empfangenen Zahlen in ein Array, füge am Ende den Wert 0 dazu und wandle dann mit atof in ein float um.

Na ja.
Vielleicht sollte man auch erwähnen, dass er nicht alle übertragenen Zeichen auslesen kann, wenn erst ein Zeichen im Eingangspuffer vorhanden ist.

Entweder muss er mit globalen oder static-Variablen die empfangenen Zeichen in vielen loop-Durchläufen zusammenstrippeln, bis das Zeilenende-Zeichen empfangen wird. Oder nach dem Empfang des ersten gesendeten Zeichens einfach eine kleine Zeit abwarten, bis er alle Zeichen in einem Rutsch aus dem Eingangspuffer auslesen kann.

void setup() {
  Serial.begin(57600);
}


char buffer[11];
float data;

void loop() {
  int i;
  if (Serial.available()) { // es ist mindestens ein Zeichen im Puffer
    delay(100); // Warte auf das Eintreffen aller restlichen Zeichen eines Wertes
    memset(buffer,0,sizeof(buffer)); // Empfangspuffer löschen
    i=0; // Zeichenzähler auf Null
    while (Serial.available()) // Alle Zeichen auslesen
    {
      buffer[i]=Serial.read();
      if (i<sizeof(buffer)-1) i++;
    }
    // Jetzt stehen die empfangenen Zeichen in der Stringvariablen "buffer"
    data = atof(buffer);  // Ascii in float umwandeln
    Serial.println (data,2);
  }
}

Vielen Dank für Eure raschen Antworten! Das hat mir sehr weitergeholfen, es funktioniert reibungslos :slight_smile: