Да, да, хорошо. Попробую. Спасибо что не бросаете в проблеме

Да, да, хорошо. Попробую
Ну спасибо, что согласились )) Вы поймите, отладка в уме - дело тухлое изначально, нужно знать точно, что происходит

BOBAH71:
ID должен начать приходить с CAN0, но к ней ничего не подключено сейчас
тогда там, наверно, мусор, который может случайно (или не случайно) совпасть с нужным ИД
Проще поставить вывод в Сериал и посмотреть, что происходит.
Может обнулить? Или сделать через & ?

Или сделать через & ?
Нет такого логического оператора

BOBAH71:
Да, да, хорошо. Попробую
Ну спасибо, что согласились )) Вы поймите, отладка в уме - дело тухлое изначально, нужно знать точно, что происходит
Не сердитесь на меня пж. Это мой первый проект на ардуинке

Может обнулить? Или сделать через & ?
вам заняться нечем?
Добавьте уже печать и выясните, какое значение приходит.
Сначала диагностика - потом лечение.
Допил кофе и побежал пробовать. О результате отпишусь

Нет такого логического оператора
Вот и я про тоже. Сегодня работал с этим оператором &&
в своем скетче.
Сег вновь взял стандартный пример и начал заново. По (rxId == 0x7DF) проблем нет, все воспринимается системой адекватно!
Начал с первого if, в мониторе то что мне нужно и нет цикла. Ответ верный. Добавил второй if и …. Он не срабатывает, нет ответа вообще. Играл с таймингом, переносил {}, результата нет. Сейчас с телефона, доберусь до компа выложу скетч и монитор. Возможно перегрузил свой старый мозг, была еще другая работа. Буду проверять.

v258:
Нет такого логического оператора
Вот и я про тоже. Сегодня работал с этим оператором
&&
в своем скетче.
А что вы думаете про оператор по_битного сравнения, Возвращающий булевую переменную?

Сег вновь взял стандартный пример и начал заново. По (rxId == 0x7DF) проблем нет, все воспринимается системой адекватно!
Начал с первого if, в мониторе то что мне нужно и нет цикла. Ответ верный. Добавил второй 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
CAN0.readMsgBuf(&rxId, &len, rxBuf); // Read data: len = data length, buf = data byte(s)
{ Serial.println("CAN0 receive buffer:");
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;
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); }
{ Serial.println("CAN0 receive buffer:");
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(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)
{ Serial.println("CAN0 receive buffer:");
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();
}
}
else
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); }
}
else
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
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();
}
delay(0);
}
/*********************************************************************************************************
END FILE
*********************************************************************************************************/
[/code]
монитор
запрос FC flow control это запрос на второй фрейм длинной посылки. Он приходит не как широкополосный(0x7DF) запрос но как обращение к конкретному устройству (0x7E0).
Всего ответ содержит три фрейма.
Но ответ должен приходить от 0x7E8 на все эти запросы.
Какой-то кошмарный скетч.
Методом копипасты писали? Зачем после строки 88 опять начинается какой-то вывод в Serial? Зачем два раза CAN0_INT проверять?
Этак не только if залипнет, но и void loop() перестанет работать.
Начните сначала, ловите один фрейм, меняйте ID, отсылайте назад.

А что вы думаете про оператор по_битного сравнения, Возвращающий булевую переменную
Думаю, что такой оператор в Си и С++ отсуствует напрочь

Какой-то кошмарный скетч.
Методом копипасты писали? Зачем после строки 88 опять начинается какой-то вывод в Serial? Зачем два раза CAN0_INT проверять?
Этак не только if залипнет, но и void loop() перестанет работать.Начните сначала, ловите один фрейм, меняйте ID, отсылайте назад.
Первая замена сработала. Но это первый фрейм. Команда на FC поступила( запрос с Id 0x7E0) с ожиданием ответа в rxBuf[2]. Но ответа от ардуинки нет. Копипастом сделал вывод на монитор порта, мне он нах не нужен, только увидеть. Потом уберу это.

BOBAH71:
А что вы думаете про оператор по_битного сравнения, Возвращающий булевую переменную
Думаю, что такой оператор в Си и С++ отсуствует напрочь
In C++, the & operator can have different meanings depending on the context:
- Bitwise AND Operator:
- When used with integer types, it performs a bitwise AND operation. It compares each bit of the two operands and produces a result where each bit is 1 only if the corresponding bits in both operands are 1.
- Example:
int a = 5; // 0101 in binary
int b = 3; // 0011 in binary
int result = a & b; // result = 1 (0001 in binary)
- Address-of Operator:
- When used with a variable, it returns the memory address of that variable.
- Example:
int x = 10;
int* ptr = &x; // ptr now stores the address of x
- Reference Operator:
- When used in a variable declaration, it creates a reference, which is an alias for another variable.
- Example:
int y = 20;
int& ref = y; // ref is now a reference to y
ref = 30; // y is now 30
Important Considerations:
- Bitwise vs. Logical AND: Don’t confuse the bitwise AND operator (&) with the logical AND operator (&&). The logical AND operator is used to combine boolean expressions.
- Precedence: Be mindful of operator precedence. The & operator has higher precedence than the logical operators.
- Pointers and References: Understanding the concepts of pointers and references is crucial for effective use of the & operator.
Generative AI is experimental.

Потом уберу это.
Потом и приходите.
Наврядли кому-то интересно будет копаться в том, что даже автору не нужно.