Ingo79:
Jetzt habe ich die Ausgabe des Werts in den if-Block funktioniert auch so weit bis auf das an der 3 stelle Hintern kommer so streifen in der Zelle sind.
Unsichtbare Steuerzeichen nicht mit in den sensorstring reinpacken, sondern rausfiltern.
Die "unsichtbaren" Steuerzeichen sind im Gegensatz zum seriellen Monitor nämlich auf dem LCD gar nicht so unsichtbar.
void serialEvent3(){ //if the hardware serial port_3 receives a char
char inchar = (char)Serial3.read(); //get the char we just received
if (inchar>=' ') sensorstring += inchar; // nur sichtbare Zeichen in den sensorstring packen!
if(inchar == '\r') {sensor_stringcomplete = true;} //if the incoming character is a <CR>, set the flag
}
Kommt das merkwürdige Zeichen am Ende dann immer noch?
Ingo79:
Und wie kann ich den sensorstring umwandeln das ich den in float PH kriege um den PH wert auf SD Karte zu speichern beziehungsweise weiter zu verarbeiten um da mit ein Relais anzusteuern um mittels CO2 den PH Wert im Aquarium zu senken?
Der Programmierer Deines Demo-Programms hat zum Auslesen als sensorstring Variable leider den total verkackten Datentyp "String-Objekt" genommen, der praktisch für nichts sinnvolles brauchbar ist, außer als abschreckendes Beispiel. String-Objekte sind zu sämtlichen Library-Funktionen der AVR libc vollkommen inkompatibel. Was das Objekt nicht eingebaut hat, kannst Du nur über eine Umwandlung in einen normalen C-String realisieren. Und dann mit einer Library wie "atof" (Array-to-float) die Umwandlung in float machen, nachdem Du Dir einen Zeiger auf einen C-String geholt hast.
Völlig hirnrissig kompliziert das mit String-Objekten zu machen, aber ich glaube so geht es:
float f=atof((char*)&sensorstring[0]);
Das Programmieren mit den verkackten String-Objekten vom Deklarationstyp "String" gewöhnst Du Dir am besten gar nicht erst an, wenn Du Mikrocontroller programmieren möchtest. Der Datentyp ist viel zu wenig leistungsfähig, verbraucht viel RAM-Speicher und wird langsam verarbeitet. Das bringt Dir nichts ein als Ärger beim Umwandeln in richtige C-Strings (char-Arrays), mit denen alle Library-Funktionen arbeiten, wenn Du irgendwas machen möchtest, das bei diesem Objekttyp nicht bereits vorprogrammiert ist. Ich glaube, "String" wurde von den Arduino-Machern nur erfunden, um Noobs zu ärgern: Sieht auf den ersten Blick super-einfach aus, aber läßt sich praktisch nichts sinnvolles mit machen.