Ich habe den Sketch ein bischen überarbeitet und lasse mir die Werte auch noch als Einzel Int anzeigen. Und diese Int möchte ich nun weiterverarbeiten. Das gelingt mir aber irgendwie nicht. Mir würde ein Beispiel reichen, z.B. wenn vorKomma >=1, dann soll die Led leuchten, wenn vorKomma == 0, dann soll sie erlischen. Dazu muss ich natürlich die anderen Bedingungen für die LED vorher löschen, das ist mir dann schon klar.
#define LED 13 // Pin für LED "Bereitschaftsanzeige"
#define TIMEOUTLIMIT 15000L // Maximaldauer für eine Messung in Millisekunden
char* SerialStringRead(char EOLchar)
{
// Parameter EOLchar: welches Zeichen als "Zeilenende" interpretiert werden soll
// Rückgabewert: Wenn keine Zeile gelesen wurde NULL, sonst String-Pointer
static char text[25]; // Stringpuffer für maximale Zeilenlänge + 1
static byte charcount=0; // Zeichenzähler
if (!Serial1.available()) return NULL; // kein Zeichen im seriellen Eingangspuffer
if (charcount==0) memset(text,0,sizeof(text)); // Stringpuffer löschen
char c=Serial1.read(); // ein Zeichen aus dem seriellen Eingangspuffer lesen
if (c>32 && charcount<sizeof(text)-1) // Steuerzeichen und Leerzeichen überlesen
{
text[charcount]=c; // ASCII-Zeichen > 32 behalten
charcount++;
}
else if (c==EOLchar)
{
charcount=0;
return text;
}
return NULL;
}
boolean timeoutErkennung(boolean doReset)
{
static unsigned long lastCharReceived=0;
if (doReset) // Timeout resetten
lastCharReceived=millis();
else // Timeout prüfen
{
if (millis()-lastCharReceived>TIMEOUTLIMIT) return true;
}
return false;
}
int ledPin = 13;
void setup() {
Serial.begin(9600);
Serial1.begin(9600);
pinMode(ledPin,OUTPUT);
Serial.println("Alge-Timing Windmesser WS2 auswerten by 'jurs' for German Arduino Forum");
Serial.println();
Serial.println("Zeit \tWert-1\tW1 num\tWert-2\tW2 num\tZeit\ vorKomma\ nachKomma");
Serial.println("------\t------\t------\t------\t------\t------\t------\t--------");
}
byte linecount=0;
float wert1,wert2,wert3;
void loop()
{
char* strPtr;
if (Serial1.available())
{
timeoutErkennung(true); // Timeout resetten
strPtr=SerialStringRead(13); // Zeichen auslesen
}
else strPtr=NULL;
if (strPtr!=NULL && strcmp(strPtr,"")==0)
{// Auf Leerzeile synchronisieren, normalerweise die dritte Zeile nach zwei Datenwerten
Serial.println();
linecount=0;
}
else if (strPtr!=NULL)
{
linecount++;
switch (linecount)
{
case 1:
Serial.print(millis()/1000.0,1); // Zeit für den ersten Wert
Serial.print('\t');
Serial.print(strPtr); // Erster Wert als String
Serial.print('\t');
wert1=atof(strPtr); // Erster Wert numerisch
Serial.print(wert1);
Serial.print('\t');
break;
case 2:
Serial.print(strPtr); // Zweiter Wert als String
Serial.print('\t');
wert2=atof(strPtr);
Serial.print(wert2); // Zweiter Wert numerisch
Serial.print('\t');
Serial.print(millis()/1000.0,1); // Zeit für den zweiten Wert
Serial.print('\t');
int vorKomma=wert2;
Serial.print(vorKomma);
Serial.print('\t');
int nachKomma=((wert2-vorKomma)*10);
Serial.print(nachKomma);
Serial.print('\t');
break;
}
}
if (linecount==0) digitalWrite(ledPin,HIGH); // in Bereitschaft auf Messung warten, Bereitschaftsanzeige an
else // wir sind mitten in einer Messung
{
digitalWrite(ledPin,LOW); // Bereitschaftsanzeige aus
if (timeoutErkennung(false)) // Auf Timeout prüfen, falls Timeout wieder in Bereitschaft gehen
{
Serial.println();
Serial.println("Timeout - warten auf neue Messung");
linecount=0;
}
}
}