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$" 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