Ach, Whandall
ich habe Deine zwei Fragen schon bemwerkt.
Wie kommst du darauf, dass man Zeichen als Adresse eines C-Strings nutzen sollte?
serialBuffer[index++] = c;
if (strcmp(c, "LCDaus") == 0)
diesen Vergleich hat mir einmal jemand aus dem Forum gesteckt.
Der funktioniert in einem anderem Sketch einwandfrei.
Nur hier hat er nicht funktioniert, weil ich bei LCDan etwas anderes gesendet
habe, als bei LCDaus.
Wenn du wissen willst ob im Buffer etwas steht wäre da nicht vielleicht
if (strcmp(serialBuffer, "LCDaus") == 0)
sinnvoller?
Ja, das ist sinnvoller. Das von mir gepostete ist der letzte Versuch gewesen.
Ich habe die Faxen so etwas von dicke...
Nein, eine Warnung gibt es nicht, läuft sauber durch.
"Warum hast du den nicht zutreffenden Titel..."
Wohl etwas unglücklich gewählt.
Jetzt mal was ich habe, und das gefällt mir noch nicht so richtig.
Ich sende u.a.
INcTST = INcT ;
char LCDINcTST[15];
dtostrf(INcTST, 4, 1, LCDINcTST);
Serial3.print(LCDINcTST);
Serial3.print('\n');
das ist ein float 21.8
auf der EmpfängerSeite kommt als char dann 21.8 an.
Dann wird auch u.a. dieses gesendet:
if (digitalRead(SDC) == HIGH)
{
Serial3.print("LCDan");
Serial3.print('\n');
}
Das ist nur eine Nachricht in "EchtWelcheFunktionText"
Das funktionier so leidlich.
Der knallt mir noch in mein WerteChar ein.
ich hoffe ich habe nichts vergessen...
const int SERIAL_BUFFER_SIZE = 18;
char serialBuffer[SERIAL_BUFFER_SIZE];
char SWert01[7];
char SWert02[7];
char SWert03[7];
char SWert04[7];
char SWert05[7];
char SWert06[7];
int zln;
int zlAuto;
int Y;
int i;
int zlTest;
unsigned long LCDSeiteIntervall = 5000;
long LCDSeiteStartMillis;
int LCDSeiteZaehler = 1;
int Modulo;
void loop()
{
if (readSerial(Serial3) == true)
{
}
if (zlAuto == 1)
{
if (millis() - LCDSeiteStartMillis > LCDSeiteIntervall)
{
LCDSeiteStartMillis = millis();
LCDSeiteZaehler++;
Modulo = LCDSeiteZaehler % 2;
if (Modulo == 0)
{
LCDA();
}
else
{
LCDB();
LCDSeiteZaehler = 1;
}
}
}
}
bool readSerial(Stream& stream)
{
static byte index;
while (stream.available())
{
char c = stream.read();
Serial.print(c);
//*************************************** Werte Empfang ***************************
if (c >= 32 && index < SERIAL_BUFFER_SIZE - 1)//Werte
{
serialBuffer[index++] = c;
if (strcmp(serialBuffer, "LCDaus") == 0)
{
digitalWrite(LcdHbXBee, HIGH);
zln = 6;
delay(100);
Serial.println(" aus");
}
if (strcmp(serialBuffer, "LCDan") == 0)
{
digitalWrite(LcdHbXBee, LOW);
zln = 6;
delay(100);
Serial.println(" an");
}
else if (zln == 0)
{
SWert01[index - 1] = c;
}
else if (zln == 1)
{
SWert02[index - 1] = c;
Y = index;
}
else if (zln == 2)
{
SWert03[index - 1] = c;
}
else if (zln == 3)
{
SWert04[index - 1] = c;
}
else if (zln == 4)
{
SWert05[index - 1] = c;
}
else if (zln == 5)
{
SWert06[index - 1] = c;
zlAuto = 1;
}
}
else
if ((c == '\n' || c == '\r') && index > 0)
{
serialBuffer[index] = '\0';
if ( c == '\n')
{
zln++;
}
if (zln == 6)//6
{
zln = 0;//1
}
index = 0;//0
return true;
}
}
return false;
}
//-----------------------------------------------------------------------------
void LCDA()//Display Seite A
{
lcd.clear();
lcd.setCursor(8, 0);
lcd.print(TextUEA);
lcd.setCursor(8, 2);
lcd.print(SWert01);
lcd.print(" ");
lcd.write(GradSym);
lcd.print("C");
if (Y == 4)
{
lcd.setCursor(24, 2);
}
else
{
lcd.setCursor(23, 2);
}
lcd.print(SWert03);
lcd.print(" ");
lcd.write(GradSym);
lcd.print("C");
lcd.setCursor(8, 3);
lcd.print(SWert02);
lcd.print(" rF%");
lcd.setCursor(24, 3);
lcd.print(SWert04);
lcd.print(" rF%");
}
//-----------------------------------------------------------------------------------------------------------------
void LCDB()//Display Seite B
{
lcd.clear();
lcd.setCursor(17, 0);
lcd.print(TextUEB);
lcd.setCursor(8, 2);
lcd.print(SWert05);
lcd.print(" ppm");
lcd.setCursor(22, 2);
lcd.print(SWert06);
lcd.print(" hPa");
}
sollte alles sein.
in diese Dinger knallt er mir noch die LCDan/LCDaus rein.
else if (zln == 0)
{
SWert01[index - 1] = c;
}
else if (zln == 1)
das liegt aber an dem Zähler, das bekomme ich hin.
Am liebsten wäre es mir, einfach int\n und ASCII\n zu übertragen.
Über einen \n Zähler könnte ich die Werte zuordnen und auch den
ASCII auswerten.
So wie es jetzt ist bekomme ich es zum laufen, aber ich glaube es ist der
letzte Dreck- mir gefällt es nicht.
Gruß und Dank
Andreas