Ich habe meinen Sketch so weit fertig und er funktioniert auch ganz gut. Die Ansteuerung der Segmente funktioniert und ich weiß, das es bestimmt auch noch was leichter geht, grad in Bezug auf die OUTPUTS.
Was ich auch noch gerne ändern möchte: Zu Beginn der Messung sollen nur die Segmente g angesteuert werden, damit man sehen kann, das die Messung begonnen hat. Im Moment erscheint auf beiden Anzeigen die Ziffer "0".
Wer kann mir einen Tipp geben?
Hier Teil des Sketch
#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);
pinMode(22,OUTPUT);
pinMode(23,OUTPUT);
pinMode(24,OUTPUT);
pinMode(25,OUTPUT);
pinMode(26,OUTPUT);
pinMode(27,OUTPUT);
pinMode(28,OUTPUT);
pinMode(29,OUTPUT);
pinMode(30,OUTPUT);
pinMode(31,OUTPUT);
pinMode(32,OUTPUT);
pinMode(33,OUTPUT);
pinMode(34,OUTPUT);
pinMode(35,OUTPUT);
pinMode(36,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;
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++;
wert1=atof(strPtr);
wert2=atof(strPtr);
int vorKomma=wert2;
int nachKomma=((wert2-vorKomma)*10);
int ledPin = 13;
int aSeg=22;
int bSeg=23;
int cSeg=24;
int dSeg=25;
int eSeg=26;
int fSeg=27;
int gSeg=28;
int aSeg1=29;
int bSeg1=30;
int cSeg1=31;
int dSeg1=32;
int eSeg1=33;
int fSeg1=34;
int gSeg1=35;
int vz=36;
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');
Serial.print(wert1); // Erster Wert numerisch
Serial.print('\t');
break;
case 2:
Serial.print(strPtr); // Zweiter Wert als String
Serial.print('\t');
Serial.print(wert2); // Zweiter Wert numerisch
Serial.print('\t');
Serial.print(millis()/1000.0,1); // Zeit für den zweiten Wert
Serial.print('\t');
Serial.print(vorKomma); // 1. Stelle vor dem Punkt
Serial.print('\t');
Serial.print(nachKomma); // 1. Stelle nach dem Punkt
Serial.print('\t');
break;
}
if (nachKomma < 0 || vorKomma < 0 ){
digitalWrite(36,HIGH);}
else {
digitalWrite(36,LOW);}
switch (abs(nachKomma))
{
case 1:
digitalWrite(aSeg,LOW);
digitalWrite(bSeg,HIGH);
digitalWrite(cSeg,HIGH);
digitalWrite(dSeg,LOW);
digitalWrite(eSeg,LOW);
digitalWrite(fSeg,LOW);
digitalWrite(gSeg,LOW);
break;
case 2:
digitalWrite(aSeg,HIGH);
digitalWrite(bSeg,HIGH);
digitalWrite(cSeg,LOW);
digitalWrite(dSeg,HIGH);
digitalWrite(eSeg,HIGH);
digitalWrite(fSeg,LOW);
digitalWrite(gSeg,HIGH);
break;
case 3:
digitalWrite(aSeg,HIGH);
digitalWrite(bSeg,HIGH);
digitalWrite(cSeg,HIGH);
digitalWrite(dSeg,HIGH);
digitalWrite(eSeg,LOW);
digitalWrite(fSeg,LOW);
digitalWrite(gSeg,HIGH);
break;
case 4:
digitalWrite(aSeg,LOW);
digitalWrite(bSeg,HIGH);
digitalWrite(cSeg,HIGH);
digitalWrite(dSeg,LOW);
digitalWrite(eSeg,LOW);
digitalWrite(fSeg,HIGH);
digitalWrite(gSeg,HIGH);
break;
case 5:
digitalWrite(aSeg,HIGH);
digitalWrite(bSeg,LOW);
digitalWrite(cSeg,HIGH);
digitalWrite(dSeg,HIGH);
digitalWrite(eSeg,LOW);
digitalWrite(fSeg,HIGH);
digitalWrite(gSeg,HIGH);
break;
case 6:
digitalWrite(aSeg,HIGH);
digitalWrite(bSeg,LOW);
digitalWrite(cSeg,HIGH);
digitalWrite(dSeg,HIGH);
digitalWrite(eSeg,HIGH);
digitalWrite(fSeg,HIGH);
digitalWrite(gSeg,HIGH);
break;
case 7:
digitalWrite(aSeg,HIGH);
digitalWrite(bSeg,HIGH);
digitalWrite(cSeg,HIGH);
digitalWrite(dSeg,LOW);
digitalWrite(eSeg,LOW);
digitalWrite(fSeg,LOW);
digitalWrite(gSeg,LOW);
break;
case 8:
digitalWrite(aSeg,HIGH);
digitalWrite(bSeg,HIGH);
digitalWrite(cSeg,HIGH);
digitalWrite(dSeg,HIGH);
digitalWrite(eSeg,HIGH);
digitalWrite(fSeg,HIGH);
digitalWrite(gSeg,HIGH);
break;
case 9:
digitalWrite(aSeg,HIGH);
digitalWrite(bSeg,HIGH);
digitalWrite(cSeg,HIGH);
digitalWrite(dSeg,HIGH);
digitalWrite(eSeg,LOW);
digitalWrite(fSeg,HIGH);
digitalWrite(gSeg,HIGH);
break;
case 0:
digitalWrite(aSeg,HIGH);
digitalWrite(bSeg,HIGH);
digitalWrite(cSeg,HIGH);
digitalWrite(dSeg,HIGH);
digitalWrite(eSeg,HIGH);
digitalWrite(fSeg,HIGH);
digitalWrite(gSeg,LOW);
break;
}