Тема: CITROEN-ARDUINO
Показать сообщение отдельно
Старый 25.03.2016, 15:54   #241
xmetal
Пользователь
 
Регистрация: 29.07.2015
Регион: 64
Машина: VW Tiguan
Сообщений: 89
xmetal has a brilliant futurexmetal has a brilliant futurexmetal has a brilliant futurexmetal has a brilliant futurexmetal has a brilliant futurexmetal has a brilliant futurexmetal has a brilliant futurexmetal has a brilliant futurexmetal has a brilliant futurexmetal has a brilliant futurexmetal has a brilliant future
По умолчанию

Строка 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 успел заполнится, не совсем понял?

Последний раз редактировалось xmetal; 25.03.2016 в 17:28.
xmetal вне форума   Ответить с цитированием