noiasca:
ja, im Prinzip könntest du den Sketch von Post 18 anpassen.
fylw:
Das Telegramm endet mit 3F 3F 3F 3F FF FF
Darauf basierend mal ein Vorschlag:
const uint16_t erw = 740; // Anzahl erwartete Zeichen
const uint16_t numChars = 750;
byte receivedChars[numChars];
boolean newData = false;
void setup() {
Serial.begin(115200);
Serial.println("\n<Arduino is ready>");
Serial1.begin(9600);
}
void loop() {
recvWithStartEndMarkers();
showNewData();
}
void recvWithStartEndMarkers() {
static uint16_t ndx = 0;
byte rc;
while (Serial1.available() > 0 && newData == false) {
rc = Serial1.read();
Serial.print(ndx); Serial.print('\t'); Serial.println(rc, HEX);
receivedChars[ndx] = rc;
if (ndx > 5 && receivedChars[ndx - 5] == 0x3F && receivedChars[ndx - 4] == 0x3F && receivedChars[ndx - 3] == 0x3F && receivedChars[ndx - 2] == 0x3F && receivedChars[ndx - 1] == 0xFF && receivedChars[ndx] == 0xFF) {
if (ndx == (erw-1) && receivedChars[ndx - erw+1] == 0x01 && receivedChars[ndx - erw+2] == 0x01 && receivedChars[ndx - erw+3] == 0x01 && receivedChars[ndx - erw+4] == 0x01 && receivedChars[ndx - erw+5] == 0x3F && receivedChars[ndx - erw+6] == 0x3F && receivedChars[ndx - erw+7] == 0x3F && receivedChars[ndx - erw+8] == 0x3F ) {
newData = true;
}
ndx = 0;
} else {
ndx = (1 + ndx) % numChars;
}
}
}
void showNewData() {
if (newData == true) {
Serial.print("\nDaten zur Auswertung: ");
for (uint16_t i = 0; i < erw; i++)
{
if (receivedChars[i] < 0x10) Serial.print("0");
Serial.print (receivedChars[i], HEX);
Serial.print(" ");
}
Serial.println();
newData = false;
}
}