Почему не работает флаг?

На CAN0 приходит первая часть фрейма которую я изменяю и отправляю обратно в CAN0, далее от CAN0 приходит запрос на отправку второй части ответа (flow control), это работает, вторая часть ответа благополучно доходит по назначению.
Но следом на CAN0 приходит другой (отличный от первого) запрос который мне обрабатывать не надо и он нормально фильтруется и отправляется в CAN1, а вот запрос на flow control уже для этого запроса начинает обрабатываться IF (стр. 61) вместо того чтобы также лететь без изменений в CAN1.
Я использовал переменную в качестве флага, но флаг не работает. Где я ошибся?
строки 54-60 работают, 61-67 продолжают исполнять функцию несмотря на сброшенный флаг.

// Demo: Dual CAN-BUS Shields, Data Pass-through
// Written by: Cory J. Fowler
// January 31st 2014
// This examples the ability of this library to support more than one MCP2515 based CAN interface.


#include <mcp_can.h>
#include <SPI.h>

unsigned long rxId;
byte len;
byte rxBuf[8];
bool flag = false;

byte txBuf0[] = {0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55};
byte txBuf1[] = {0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA};
char msgString[128];                        // Array to store serial string

MCP_CAN CAN0(2);                              // CAN0 interface usins CS on digital pin 2
MCP_CAN CAN1(3);                               // CAN1 interface using CS on digital pin 3

#define CAN0_INT 8    //define interrupt pin for CAN0 recieve buffer
#define CAN1_INT 9    //define interrupt pin for CAN1 recieve buffer

void setup()
{
  Serial.begin(115200);

  pinMode(CAN0_INT, INPUT_PULLUP);
  pinMode(CAN1_INT, INPUT_PULLUP);

  // init CAN0 bus, baudrate: 500k@8MHz
  if (CAN0.begin(MCP_ANY, CAN_500KBPS, MCP_8MHZ) == CAN_OK) {
    Serial.print("CAN0: Init OK!\r\n");
    CAN0.setMode(MCP_NORMAL);
  } else Serial.print("CAN0: Init Fail!!!\r\n");

  // init CAN1 bus, baudrate: 500k@8MHz
  if (CAN1.begin(MCP_ANY, CAN_500KBPS, MCP_8MHZ) == CAN_OK) {
    Serial.print("CAN1: Init OK!\r\n");
    CAN1.setMode(MCP_NORMAL);
  } else Serial.print("CAN1: Init Fail!!!\r\n");

  SPI.setClockDivider(SPI_CLOCK_DIV2);         // Set SPI to run at 8MHz (16MHz / 2 = 8 MHz)

  CAN0.sendMsgBuf(0x1000000, 1, 8, txBuf0);
  CAN1.sendMsgBuf(0x1000001, 1, 8, txBuf1);
}

void loop() {
  if (!digitalRead(CAN0_INT)) {                // If interrupt pin is low, read CAN0 receive buffer
    CAN0.readMsgBuf(&rxId, &len, rxBuf);       // Read data: len = data length, buf = data byte(s)
  }
    if (rxId == 0x7DF && rxBuf[0] == 0x02){
    flag = true;
    rxId = 0x7E8;
    len = 8;
    rxBuf[1] = 0x14;
    CAN0.sendMsgBuf(rxId, 0, len, rxBuf);      // Immediately send message out CAN0 interface
  }
  if (rxId == 0x7E0 && rxBuf[0] == 0x30 && flag == true){
  rxId = 0x7E8;
  len = 8;
  rxBuf[5] = 0x15;
    CAN0.sendMsgBuf(rxId, 0, len, rxBuf);      // Immediately send message out CAN0 interface
    flag = false;
  }
    CAN1.sendMsgBuf(rxId, 0, len, rxBuf);      // Immediately send message out CAN1 interface

  if (!digitalRead(CAN1_INT)) {                       // If interrupt pin is low, read CAN1 receive buffer
    CAN1.readMsgBuf(&rxId, &len, rxBuf);       // Read data: len = data length, buf = data byte(s)
    CAN0.sendMsgBuf(rxId, 0, len, rxBuf);      // Immediately send message out CAN0 interface

  }
}

/*********************************************************************************************************
  END FILE
*********************************************************************************************************/
[/code]```

Откуда это известно?

Откуда это известно?

Ставьте отладочный вывод в сериал и смотрите, что там у вас происходит, иначе это просто тыканье пальцем в небо

Да, я тупанул, надо вывести в монитор.
А что вы скажете о том как я организовал реализацию флага в скетче, может что не так и не там вписал?

Ничего не скажу. Я вообще не понимаю, что этот флаг у вас делает

у меня два запроса подразумевающие ответ более чем в одном фрейме которые имеют разный заголовок но запрос на продолжение передачи (flow control) ответа у них одинаковый. ответ на первый запрос мне надо корректировать , а второй отправить без изменений.

странно, я использую цитирование но оно не отображается в сообщении

Ставьте вывод в сериал, без этого рассуждать о чем-то бессмысленно

Да, спасибо, я буду мониторить.

ОПЯТЬ???

Мы же с Вами это уже обсуждали аж100 сообщений, вы били себя в грудь и клялись, что добавите вывод в монитор…
Прошла неделя - вы приходите с тем же вопросом и опять вывода в монитор нет.
Вы нормальный вообще?

Нахрена тему-то новую открывать? Или надеялись, что все забудут ?

1 лайк