Arduino Serial Kommunikation -> einlesen und auswerten

Hallo zusammen

Ich habe folgendes Setup:

Arduino Mega 2560 mit RS232 Shield
einen Sensor der Seriell ausgelesen wird

Grundsätzlich will ich einen Sensor auslesen und bezüglich dem Messwert ein I/O Ausgang schalten, soweit dazu.

Ich habe 2 Teilprobleme in 2 Programme unterteilt und nun müsste ich die Teilprogramme irgendwie zusammenschustern und zum laufen bringen.

Im ersten Programm lese ich den Sensor so schnell wie irgendwie möglich über den Seriell Port aus. Der Sensor ist auf dem Serial Port 2. Dazu folgendes Programm:

Programm 1:

#include <SoftwareSerial.h>

int counter =0;

void setup() {

   Serial.begin(38400);
   Serial.println("Senden & Empfangen gestartet");

   Serial2.begin(38400);
}

void loop() { 
  
   if (Serial2.available()) {
     Serial.write(Serial2.read());

   }
   if (Serial.available()) {
     Serial2.write(Serial.read());

   }
   
    delay(0);                                           // delay für Arduino UNO (Tempo nicht gleich hoch)
    counter++;

      //Serial.write( '\r' ); // carriage return
      //Serial.print('\n'); //line feed

      if (counter == 21){                           // nach 21 Runden ist die Antwort komplett empfangen
      Serial2.write(":06800468416841");
      Serial2.write('\r'); //line feed
      Serial2.write('\n'); // carriage return
      counter=0;
      }

}

Im zweiten Programm schneide ich das Empfangene Signal (hier char* test =":088002684143CD970A$":wink: auf die relevanten Stellen zu und wandle diese wiederum in einen float wert.

Programm 2:

const char* start = ":0880026841";   // Anfang wird abgeschnitten
const char* ende = "$";                             // "$" wird durch carriage return ersetzt

char* test = ":088002684143CD970A$";     // "$" Zeichen wird durch carriage return ersetzt
char* ziel;

void setup() {
Serial.begin(9600);

char* s = strstr( test, start);

char* e = strstr( test, ende);

  if( s > 0 && e > 0) {
    int len = e - s - 11;

   ziel= s + 11;
   *e = 0;

       Serial.println(ziel);
  }
  else {
     Serial.println("start oder ende nicht gefunden"); 
  }





unsigned long i = strtoul(ziel, NULL, 16);          //empfangener Wert zu float wandeln
float f = *(float*)&i;
Serial.println(f);

}

void loop() {

}

Meine Frage ist nun wie stelle ich es an dass ich meine “char* test” Variable mit den Daten aus dem Seriall Monitor füttern kann?
Das Signal kommt wie der Name schon sagt seriell an das heisst jede Stelle wird einzeln empfangen und nach dem letzten Zeichen folgt ein line feed und ein carriage return.

Um Denkanstösse oder Codebeispiele wäre ich echt dankbar ich blicke langsam nicht mehr über den Berg :o .

Besten Dank schon im Voraus

Hier ist Code wie man Text bis zu einem Linefeed in ein Array einliest:

http://forum.arduino.cc/index.php?topic=571299.msg3891529#msg3891529

Kannst du auch leicht auf CR ändern, aber es sollte egal sein. Steuerzeichen werden nicht abgespeichert.

Hallo Serenifly erstmals vielen Dank für deine Antwort.

Leider verstehe ich beim Code den du in diesem Post geschrieben hast nur Bahnhof. Welche Variable beinhaltet denn da eine char* kompatible Variable?

Den Unterschied und Zusammenhang von Arrays und Zeigern musst du lernen. Sonst wird das nichts

http://openbook.rheinwerk-verlag.de/c_von_a_bis_z/012_c_zeiger_007.htm http://www.willemer.de/informatik/cpp/pointer.htm#array

Und Strings sind in C Null-terminierte char Arrays (auch "C String" genannt). Wenn eine String Funktion also einen Zeiger als Parameter hat dann ist damit ein Array gemeint! Ähnlich verhält es sich mit Speicherfunktionen wie memset() und memcpy()

Serenifly: Den Unterschied und Zusammenhang von Arrays und Zeigern musst du lernen. Sonst wird das nichts

http://openbook.rheinwerk-verlag.de/c_von_a_bis_z/012_c_zeiger_007.htm http://www.willemer.de/informatik/cpp/pointer.htm#array

Und Strings sind in C Null-terminierte char Arrays (auch "C String" genannt). Wenn eine String Funktion also einen Zeiger als Parameter hat dann ist damit ein Array gemeint! Ähnlich verhält es sich mit Speicherfunktionen wie memset() und memcpy()

Vielen Dank für die Hilfe und die Links. Ich werde mir das ganze zu Gemüte führen.

#include <SoftwareSerial.h>

Das brauchst du nicht!

Serenifly:
Den Unterschied und Zusammenhang von Arrays und Zeigern musst du lernen. Sonst wird das nichts

Dem stimme ich zu!

Serenifly:
http://openbook.rheinwerk-verlag.de/c_von_a_bis_z/012_c_zeiger_007.htm

Von dem Buch möchte ich abraten!
Gerade in Sachen Zeiger, sind da böse Errors drin.

z.B. ein Kapitel davor “12.6.1 Zeiger als Rückgabewert” kann einem unbedarften Lernendem lange/viele Stunden kosten.
Der Text ist an sich recht OK. Der Autor macht aber im Code genau das falsch, was er im Text als ungut bezeichnet.