Hallo und guten Abend Ihr netten Forum-User.
Es ist nun schon ne Zeit her das ich hier um Hilfe gebeten habe, ich wollt es auch nicht. Warum, wenn man alles vorgekaut bekommt lernt man es nie. Aber nun verstehe ich meinen MEGA nicht mehr. Es geht immer noch um das alte Thema.....
Bin eigendlich seit der letzten Hilfe von "agmue" (An dieser Stelle tausend Dank) am basteln,fräsen,löten,crimpen und abend für abend am probieren.Nun habe ich das Program auf das wesentliche eingekürzt um Den Fehler auszuschließen.
Das einlesen und aufteilen funzt mit hilfe des o.g.Users im grunde, aber....
Egal was ich mache, der 12'er Fehler will einfach nicht weggehen.
Baudrate rauf/runter= Fehler bleibt,
Sendewiederholung von 100ms bis 7 sek.=Fehler bleibt .
Fehler=Es wird an den Display 1-8 bis 1.011 alles richtig angezeigt, dann zeigt er mir 2.011 (soll 2.012), dann wird 3.013 angezeigt, was nach den (soll) ja richtig wäre. Das ganze wiederholt sich alle 12 Eingang-Strings.
Könnte mir einer sagen was da falsch läuft ? Oder kann ich mein Jahresprojekt in die Tonne werfen, wegen einem 12'er Vi
// BRZ:6,777;BRF:Paul Mustermann;BRS:4;AR1:0;RZ1:0,000;F1:Friedhelm Busch;AR2:0;RZ2:0,000;F2:Max Jägermeister;AR3:0;RZ3:0,000;F3:Paul Mustermann;AR4:0;RZ4:0,000;F4:Thorsten Hesse;
#include <TM1637Display.h> //Einbinden der Bibliothekt zum ansteuern des 7 Segment-Displays
#define CLK1 22 // für Anzeige-1
#define DIO1 6 // für Anzeige-1
#define CLK2 24 // für Anzeige-2
#define DIO2 7 // für Anzeige-2
#define CLK3 26 // für Anzeige-3
#define DIO3 8 // für Anzeige-3
#define CLK4 28 // für Anzeige-4
#define DIO4 9 // für Anzeige-4
#define CLK5 30 // für Anzeige-5
#define DIO5 10 // für Anzeige-5
#define CLK6 32 // für Anzeige-6
#define DIO6 11 // für Anzeige-6
#define CLK7 34 // für Anzeige-7
#define DIO7 12 // für Anzeige-7
#define CLK8 36 // für Anzeige-8
#define DIO8 13 // für Anzeige-8
#define WSL1 31 // Wahlschalter Links "Zeiten"
#define WSL2 33 // Wahlschalter Links "Runden"
#define WSL3 35 // Wahlschalter Links "Uhrzeit"
#define WSL4 37 // Wahlschalter Links "Externe Steuerung"
#define WSR1 43 // Wahlschalter Rechts "Beleuchtung Unten"
#define WSR2 45 // Wahlschalter Rechts "Beleuchtung Oben"
#define WSR3 47 // Wahlschalter Rechts "Beleuchtung Eingang"
#define WSR4 49 // Wahlschalter Rechts "Externe Steuerung"
//#define TL 38 // Taster Links
//#define TR 40 // Taster Recht
//#define TLLED 39 // LED im Taster Links
//#define TRLED 41 // LED im Taster Rechts
byte i=0;
byte t=0;
byte x=2; // Helligkeit 7-Segment Anzeigen
byte WR1=0; // Merker ob Wahlschalter auf Pos.1 steht
//erzeugen des Display 1 bis 8 Objektes mit den Parametern für die PINs
TM1637Display display1(CLK1, DIO1);
TM1637Display display2(CLK2, DIO2);
TM1637Display display3(CLK3, DIO3);
TM1637Display display4(CLK4, DIO4);
TM1637Display display5(CLK5, DIO5);
TM1637Display display6(CLK6, DIO6);
TM1637Display display7(CLK7, DIO7);
TM1637Display display8(CLK8, DIO8);
const byte numChars = 250;
char buf[numChars];
float rz1; // Rundenzeit Spur-1
float rz2; // Rundenzeit Spur-2
float rz3; // Rundenzeit Spur-3
float rz4; // Rundenzeit Spur-4
int Z1;
int Z2;
int Z3;
int Z4;
int Z5;
int Z6;
int Z7;
int Z8;
void setup() {
Serial.begin (9600);
Serial3.begin (9600);
//Setzt die Helligkeit des Displays mögliche Werte sind 0 bis 15, 0 dunkel und 15 hell
display1.setBrightness(x);
display2.setBrightness(x);
display3.setBrightness(x);
display4.setBrightness(x);
display5.setBrightness(x);
display6.setBrightness(x);
display7.setBrightness(x);
display8.setBrightness(x);
// Löschen der Inhalte 1-8
display1.clear();
display2.clear();
display3.clear();
display4.clear();
display5.clear();
display6.clear();
display7.clear();
display8.clear();
pinMode(WSL1, INPUT_PULLUP); // Wahlschalter Links "Zeiten"
}
void loop() {
static uint16_t ndx = 0;
char rc;
while (Serial3.available() > 0) {
rc = Serial3.read();
//Serial.write(rc);
if (rc == ';') {
buf[ndx] = '\n';
ndx = 0;
if((!digitalRead(31))&& (WR1==1)){
auswertungZeiten();
//
}
}
else {
buf[ndx] = rc;
ndx = (1 + ndx) % numChars;
}
}
if((!digitalRead(31))&& (WR1==0)){
WR1=1;
display1.showNumberDec(rz1);
display2.clear();
display2.showNumberDec(rz1,true,3,0);
display3.showNumberDec(rz2);
display4.clear();
display4.showNumberDec(rz2,true,3,0);
display5.showNumberDec(rz3);
display6.clear();
display6.showNumberDec(rz3,true,3,0);
display7.showNumberDec(rz4);
display8.clear();
display8.showNumberDec(rz4,true,3,0);
}
//void auswertungRunden() {
//
// char * bez = strtok(buf, ":");
// char * inh = strtok(NULL, ":");
//
//// *** Auswertung Anzahl Runden Spur 1 ***
// if(!strncmp(bez, "AR1", numChars)){
// ar1 = atoi(inh);
// if((!digitalRead(33))&& (WR2==1)){
// display2.showNumberDec(ar1);}
// }
//// *** Auswertung Anzahl Runden Spur 2 ***
// if(!strncmp(bez, "AR2", numChars)){
// ar2 = atoi(inh);
// if((!digitalRead(33))&& (WR2==1)){
// display4.showNumberDec(ar2);}
// }
//// *** Auswertung Anzahl Runden Spur 3 ***
// if(!strncmp(bez, "AR3", numChars)){
// ar3 = atoi(inh);
// if((!digitalRead(33))&& (WR2==1)){
// display6.showNumberDec(ar3);}
// }
//// *** Auswertung Anzahl Runden Spur 4 ***
// if(!strncmp(bez, "AR4", numChars)){
// ar4 = atoi(inh);
// if((!digitalRead(33))&& (WR2==1)){
// display8.showNumberDec(ar4);}
// }
}
void auswertungZeiten() {
char * bez = strtok(buf, ":");
char * inh = strtok(NULL, ":");
// *** Auswertung Letzte Rundenzeit von Spur 1 ***
if(!strncmp(bez, "RZ1", numChars)){
replace (inh, ',', '.');
rz1 = atof(inh);
Z1=(int)rz1;
Z2=(rz1*1000)-(Z1*1000);
}
// *** Auswertung Letzte Rundenzeit von Spur 2 ***
//
if(!strncmp(bez, "RZ2", numChars)){
replace (inh, ',', '.');
rz2 = atof(inh);
Z3=(int)rz2;
Z4=(rz2*1000)-(Z3*1000);
}
//// *** Auswertung Letzte Rundenzeit von Spur 3 ***
if(!strncmp(bez, "RZ3", numChars)){
replace (inh, ',', '.');
rz3 = atof(inh);
Z5=(int)rz3;
Z6=(rz3*1000)-(Z5*1000);
}
////*** Auswertung Letzte Rundenzeit von Spur 4 ***
if(!strncmp(bez, "RZ4", numChars)){
replace (inh, ',', '.');
rz4 = atof(inh);
Z7=(int)rz4;
Z8=(rz4*1000)-(Z7*1000);
if((!digitalRead(31))&& (WR1==1)){
display1.showNumberDec(Z1);
display2.showNumberDec(Z2,true,3,0);
display3.showNumberDec(Z3);
display4.showNumberDec(Z4,true,3,0);
display5.showNumberDec(Z5);
display6.showNumberDec(Z6,true,3,0);
display7.showNumberDec(Z7);
display8.showNumberDec(Z8,true,3,0);
//Serial.println(rz4,3);
}}
}
void replace( char * str, const char old, const char _new )
{
while(*str)
{if( *str == old ) *str = _new;
str++;}
}
rus? ![]()