Проблема с оператором if

Строка 74, оператор if игнорируется, сразу начинается выполнение функции после него в бесконечном цикле.
Компилируется без ошибок.
Подскажет кто?

[code]
// 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];

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: 250k@16MHz
  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: 250k@16MHz
  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
    Serial.println("CAN0 receive buffer:");
    CAN0.readMsgBuf(&rxId, &len, rxBuf);       // Read data: len = data length, buf = data byte(s)
if ((rxId & 0x80000000) == 0x80000000)     // Determine if ID is standard (11 bits) or extended (29 bits)
      sprintf(msgString, "Extended ID: 0x%.8lX  DLC: %1d  Data:", (rxId & 0x1FFFFFFF), len);
    else
      sprintf(msgString, "Standard ID: 0x%.3lX       DLC: %1d  Data:", rxId, len);

    Serial.print(msgString);

    if ((rxId & 0x40000000) == 0x40000000) {  // Determine if message is a remote request frame.
      sprintf(msgString, " REMOTE REQUEST FRAME");
      Serial.print(msgString);
    } else {
      for (byte i = 0; i < len; i++) {
        sprintf(msgString, " 0x%.2X", rxBuf[i]);
        Serial.print(msgString);
      }
    }

    Serial.println();
  }
    if (rxId == 0x7DF) // && rxBuf[0] == 0x02 && rxBuf[1] == 0x09 && rxBuf[2] == 0x02);
    {
      rxId = 0x7E8;
      len = 8;
      rxBuf[0] = 0x10;
      rxBuf[1] = 0x14;
      rxBuf[2] = 0x49;
      rxBuf[3] = 0x02;
      rxBuf[4] = 0x01;
      rxBuf[5] = 0x31;
      rxBuf[6] = 0x46;
      rxBuf[7] = 0x54;

     
      CAN0.sendMsgBuf(rxId, 0, len, rxBuf);      // Immediately send message out CAN0 interface
    }

   // if (rxId == 0x7E0 && rxBuf[0] == 0x30);
   // {
   //   byte t = rxBuf[2];
   //   rxId = 0x7E8;
   //   len = 8;
   //   rxBuf[0] = 0x31;
   //   rxBuf[1] = 0x31;
   //   rxBuf[2] = 0x31;
   //   rxBuf[3] = 0x31;
   //   rxBuf[4] = 0x31;
   //   rxBuf[5] = 0x31;
   //   rxBuf[6] = 0x31;
   //   rxBuf[7] = 0x31;

     // delay(t);
      
     // CAN0.sendMsgBuf(rxId, 0, len, rxBuf);      // Immediately send message out CAN0 interface
   // }
   // { rxId = 0x7E8;
     // len = 8;
      //rxBuf[0] = 0x33;
      //rxBuf[1] = 0x33;
      //rxBuf[2] = 0x33;
      //rxBuf[3] = 0x33;
      //rxBuf[4] = 0x33;
      //rxBuf[5] = 0x33;
      //rxBuf[6] = 0x33;
      //rxBuf[7] = 0x33;

      //CAN0.sendMsgBuf(rxId, 0, len, rxBuf);      // Immediately send message out CAN0 interface
   // }
 
  
    CAN1.sendMsgBuf(rxId, 0, len, rxBuf);      // Immediately send message out CAN1 interface

    if ((rxId & 0x80000000) == 0x80000000)     // Determine if ID is standard (11 bits) or extended (29 bits)
      sprintf(msgString, "Extended ID: 0x%.8lX  DLC: %1d  Data:", (rxId & 0x1FFFFFFF), len);
    else
      sprintf(msgString, "Standard ID: 0x%.3lX       DLC: %1d  Data:", rxId, len);

    Serial.print(msgString);

    if ((rxId & 0x40000000) == 0x40000000) {  // Determine if message is a remote request frame.
      sprintf(msgString, " REMOTE REQUEST FRAME");
      Serial.print(msgString);
    } else {
      for (byte i = 0; i < len; i++) {
        sprintf(msgString, " 0x%.2X", rxBuf[i]);
        Serial.print(msgString);
      }
    }

    Serial.println();

  if (!digitalRead(CAN1_INT)) {                       // If interrupt pin is low, read CAN1 receive buffer
    Serial.println("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

    if ((rxId & 0x80000000) == 0x80000000)    // Determine if ID is standard (11 bits) or extended (29 bits)
      sprintf(msgString, "Extended ID: 0x%.8lX  DLC: %1d  Data:", (rxId & 0x1FFFFFFF), len);
    else
      sprintf(msgString, "Standard ID: 0x%.3lX       DLC: %1d  Data:", rxId, len);

    Serial.print(msgString);

    if ((rxId & 0x40000000) == 0x40000000) {  // Determine if message is a remote request frame.
      sprintf(msgString, " REMOTE REQUEST FRAME");
      Serial.print(msgString);
    } else {
      for (byte i = 0; i < len; i++) {
        sprintf(msgString, " 0x%.2X", rxBuf[i]);
        Serial.print(msgString);
      }
    }

    Serial.println();
  }



}


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

Палки не той системы // , а надо ||.

Классика ;

Это комментарий

Всё таки очки надо одевать, блин.

палки // это я уже поотключал все временно, оставил только одну проверку, эффекта нет

@BOBAH71
Грубых ошибок в коде не вижу.
Однако просто примите к сведению, что if “не работать” не может. Ищите косяки у себя

Не имеет отношения к проблеме, просто чтоб что-либо сказать… В этом условии второе 0x40000000 лишнее:

if (rxId == 0x7DF) {
 ... 
} else {
Serial.println(rxId, HEX);
}

проблема в строке 74

простите, не понял

А точка с запятой в конце этой строки какую роль играет?

И?
Вы это уже писали в первом сообщении.
Я вам на это и отвечаю.

Как проявляется то, что условие в строке 74 не работает? И с чего вы взяли, что оно должно работать? Вы уверены, что выражение rxId == 0x7DF в вашем коде всегда истина?

ты сравниваешь unsigned long и int. ХЗ чо там компилятор сравнивает

1 лайк

она за комментами, никакую

вводить переменную?

Это сейчас она за комментами. А раньше она тоже была?

Да какую переменную?? Приведение типов нужно сделать явное.

Я бы начал с совета в сообщении 8… которое вы " не поняли"

1 лайк

завтра буду разбираться, надо выспаться.
спасибо всем откликнувшимся

Неплохо звучит если знать что на часах в Мск 9 утра :slight_smile: а в других часовых поясах и того больше