Строка 134: for (int i = 0; i < 54; i++) DATA[i + 41] = MULTIFRAME[i]; правильно, что копирует 54 байта, а не 55?
Строка в конце Serial.write(DATA, 161); передает 161, а не 162 байта, правильно? Зачем объявляли 162 байта?
Проверку на изменения может сделать так?
Код:
if (!digitalRead(9))
{
CAN.readMsgBuf(&len, buf);
canId = CAN.getCanId();
.......................
.......................
arrcmp = memcmp(DATA, DATA2, 161); // перенести сюда
}
if ((millis() - time0) > 100 && arrcmp != 0){
Serial.write(DATA, 161);
memcpy(DATA2, DATA, 161);
time0 = millis();
}
Перенести memcmp выше, а то получается, что оно постоянно вызывается.
Вообще по логике получается, что данные в DATA еще полностью не заполнились, а уже идет сравнение с DATA2 и если оно несовпадает, то идет отправка на планшет.
Надо вводить флаг, который будет разрешать/запрещать сравнение DATA с DATA2.
(millis() - time0) > 100 - некая задержка чтобы DATA успел заполнится, не совсем понял?