Warum nicht??
Aber anscheint doch.
Was genau ist den jetzt ein Testsketch? Ein Code den Du fertig ausführen kannst?
Bitte:
const byte telegrammArray[10][4] PROGMEM = {
{1, 1, 1, 1},//BOS
{0, 0, 0, 0},//LAND
{1, 0, 0, 0},//ORT1
{1, 0, 0, 0},//ORT2
{1, 1, 0, 0},//KFZ1
{0, 0, 0, 0},//KFZ2
{1, 1, 1, 1},//KFZ3
{0, 0, 0, 0},//KFZ4
{0, 1, 1, 1},//AUFTRAG
{0, 0, 1, 1} //Baustufe, Richtung, Taktische Kurzinfo
};
volatile uint64_t initial_telegrammData = 0x00ULL;
void initTelegramm() {
volatile byte bitIndex = 40;
for (volatile byte i = 0; i < sizeof(telegrammArray) / sizeof(telegrammArray[0]); i++) {
for (volatile byte y = 0; y < sizeof(telegrammArray[i]) / sizeof(telegrammArray[i][0]); y++) {
byte _word = pgm_read_word(&telegrammArray[i][y]);
initial_telegrammData |= ((uint64_t)_word << bitIndex);
bitIndex -= 1;
}
}
}
void setup() {
Serial.begin(9600);
Serial.println("Hello there");
initTelegramm();
makeTelegramm();
}
void loop() {
// put your main code here, to run repeatedly:
}
byte calcCRC(uint64_t data) {
byte crc[] = {0, 0, 0, 0, 0, 0, 0};
volatile byte i = 40;
byte CRC = 0x00;
for (; i > 0; --i) {
Serial.print((byte)bitRead(data, i), DEC);
byte doinvert = (1 == (byte)bitRead(data, i)) ^ crc[6];
crc[6] = crc[5] ^ doinvert;
crc[5] = crc[4];
crc[4] = crc[3];
crc[3] = crc[2];
crc[2] = crc[1] ^ doinvert;
crc[1] = crc[0];
crc[0] = doinvert;
}
for (i = 0; i < 7; i++) {
CRC |= (crc[i] << i);
}
return CRC;
}
void makeTelegramm() {
const byte CRC = calcCRC(initial_telegrammData);
Serial.print("CRC: ");
Serial.println(CRC, BIN);
}
Das empfinde ich als schwierig. Der JS Code umfasst ca 2000 Zeilen das liest sich keiner durch. Da müsste ich den Code einkürzen und das auch noch so, dass er funktioniert. Das ist mir dann doch zu viel Arbeit.
PS.: Ich habe den Fehler bereits gefunden es lag wider am type cast
byte doinvert = (1 == (byte)bitRead(data, i)) ^ crc[6];