Цитата:
Сообщение от 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(2, INPUT); // пин 2 можно переназначить }
void loop() { if(!digitalRead(2)) // пин 2 можно переназначить { CAN0.readMsgBuf(&len, rxBuf); 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;
}
Тоесть я проверяю и так наличие единицы.