Тема: CITROEN-ARDUINO
Показать сообщение отдельно
Старый 28.10.2015, 14:07   #94
T_r_D
Старший Пользователь
 
Регистрация: 03.07.2015
Регион: 77, 97, 99, 177
Сообщений: 372
T_r_D is a jewel in the roughT_r_D is a jewel in the roughT_r_D is a jewel in the rough
По умолчанию

Цитата:
Сообщение от lti1 Посмотреть сообщение
А может быть пропуски потому, что не используется пин 2?
Попробуйте этот скетч:
PHP код:
#include <mcp_can.h>
#include <SPI.h>

long unsigned int rxId;
unsigned char len 0;
unsigned char rxBuf[8];

MCP_CAN CAN0(10);

void setup()
{
  
Serial.begin (115200);
  
CAN0.begin(CAN_500KBPS); // скорость CAN
  
pinMode(2INPUT); // пин 2 можно переназначить
}

void loop()
{
    if(!
digitalRead(2)) // пин 2 можно переназначить                         
    
{
      
CAN0.readMsgBuf(&lenrxBuf);              
      
rxId CAN0.getCanId();                    
 
      if (
rxId == 0x306// фильтр по ID, в данном случае по ID 0x306
       
{

       }
    }

if(!digitalRead(2)) что тут означает восклицательный знак?

Если я правильно понимаю, то проверяется возникновение чего-то на пине 2, и если оно появилось, то читаем данные из буфера.
У меня написано тоже самое, только проверка делается
if(CAN_MSGAVAIL == CAN.checkReceive())

в библиотеке
INT8U MCP_CAN::checkReceive(void)
{
INT8U res;
res = mcp2515_readStatus(); /* RXnIF in Bit 1 and 0 */
if (res & MCP_STAT_RXIF_MASK)
{
return CAN_MSGAVAIL;
}
else
{
return CAN_NOMSG;
}
}

.....................................
INT8U MCP_CAN::mcp2515_readStatus(void)
{
INT8U i;
MCP2515_SELECT();
spi_readwrite(MCP_READ_STATUS);
i = spi_read();
MCP2515_UNSELECT();

return i;
}

Тоесть я проверяю и так наличие единицы.
T_r_D вне форума   Ответить с цитированием