Hallo,
ich bekomme über eine Serielle Schnittstelle eine Zahl zwischen 0 und 9999,99 übergeben. Diese Zahl ist zwischen den Zeichen "A" und "E" eingebettet z.B. A1234,56E oder A23,5E
Da ich die Zahlen als Integer/Double brauche war mein Gedanke die Vorkommzeichen und die Nachkommazeichen seperat in ein Array zu schreiben und diese später mit der entsprechenden Multiplikation aufzuadieren.
Ein erster Versuch mit einer ganzen Zahl ohne Komma hat super funktioniert. Doch jetzt bekomme ich für die Nachkommazahlen Werte geliefert, die nicht stimmen.
Hier mein Sketch:
#include <SoftwareSerial.h>
SoftwareSerial mySerial(6,7);
void setup() {
Serial.begin(9600);
mySerial.begin(9600);
}
void loop() {
if (mySerial.available()>0) //Abfragen, ob im Puffer seriell Daten empfangen wurden
{
Serial.println("Daten da");
int bytesAnz=mySerial.available(); //Anzahl der Bytes, die empfangen wurden
Serial.println(bytesAnz);
while (mySerial.available()>0) //Die einzelnen Bytes werden in die Variable incomming eingelesen
{
char incomming =mySerial.read(); //Typ char, da ASCII Zeichen erwartet werden
if (incomming == 'A')
{
Serial.println("A erkannt");
int zaehlerVorkomma=0, zaehlerNachkomma=0;
int vorkomma[4], nachkomma[2];
while ((incomming=mySerial.read()) != 'E')
{
if (incomming == '.' || incomming == ',') //Nachkomma Zahl erfassen
{
Serial.println(",");
while(incomming=mySerial.read() != 'E')
{
int in;
in=(int)incomming-48;
nachkomma[zaehlerNachkomma]=in;
zaehlerNachkomma++;
Serial.println(incomming);
}
if(zaehlerNachkomma==0) {nachkomma[0]=0; nachkomma[1]=0;}
else if(zaehlerNachkomma==1) {nachkomma[1]=0;}
break;
}
int in;
in=(int)incomming-48;
vorkomma[zaehlerVorkomma]=in;
Serial.println(in);
zaehlerVorkomma++;
}
Serial.print("NachkommaArray: "); Serial.print(nachkomma[0]); Serial.print(" "); Serial.println(nachkomma[1]);
Serial.println("Ende");
//Serial.println(zaehlerVorkomma);
bytesAnz= bytesAnz- zaehlerVorkomma;
if (zaehlerVorkomma<=4 && zaehlerNachkomma<=1)
{
eeprom_schreiben(vorkomma,nachkomma, zaehlerVorkomma, 0, 1);
}
}
}
}
}
Es geht hier primär umd die Schritte, die in der "if (incomming == '.' || incomming == ',')" Anweisung stehen. Wenn ich diese weglasse und nur ganze Zahlen empfange funktioniert es. Im Moment bekomme ich immer einen Wert von -47 für die jeweiligen Nachkommazeichen geliefert. Eigentlich habe ich doch genau das gleiche gemacht wie bei der Vorkommazahl..? Habe ich irgendwo einen Denkfehler?
Danke für Eure Hilfe!
Gruß
Daniel