我已将CAN-BUS屏蔽连接到我的供暖系统,并且我从总线获取数据 这是有效的(我认为)。 但是,我无法获得我想要的数据。 请参阅附图。
它表示它在CAN打开的情况下运行,节点应为80(0X50十六进制)。 然而,当我放置一个过滤器时,它只显示来自节点80的数据,我不会得到任何数据 此外,当我尝试不使用过滤器时,我不会从模块中获取任何数据!
它还说它每1秒发送一次心跳。我在Node id 1862(0X746 hex)上找到了这个。
如何从模块中读取数据。
从盾牌中读取的代码:
#include <SPI.h>
#include "mcp_can.h"
INT32U canId = 0x000;
MCP_CAN CAN(9);
unsigned char len = 0;
unsigned char buf[11];
char str[40];
void setup()
{
Serial.begin(38400);
START_INIT:
if(CAN_OK == CAN.begin(CAN_125KBPS))
{
Serial.println("CAN BUS Shield init ok!");
}
else
{
Serial.println("CAN BUS Shield init fail");
Serial.println("Init CAN BUS Shield again");
delay(100);
goto START_INIT;
}
}
void loop()
{
if(CAN_MSGAVAIL == CAN.checkReceive())
{
CAN.readMsgBuf(&len, buf);
canId = CAN.getCanId();
Serial.print("<");
Serial.print(canId);
for(int i = 0; i<len; i++)
{
Serial.print(",");
Serial.print(buf[i]);
}
Serial.print(">");
Serial.println();
}
}
答案 0 :(得分:0)
代码是正确的,但 mcp_can 库和兼容的屏蔽可能存在一个问题。原始的Seed-Studio屏蔽使用16 MHz晶振,但市场上还有其他兼容模块,并非所有模块都使用16 MHz晶振,有些则使用8 Mhz。
因此,首先检查要使用的CAN模块,如果它在8 MHz上运行,则必须在初始化时调整速度设置。在这种情况下,如果您需要从以125 kb / s运行的CAN总线读取CAN消息,则必须在初始化中设置 CAN.begin(CAN_250KBPS):
...
if(CAN_OK == CAN.begin(CAN_250KBPS))
...
检查是否正确连接了CAN HI和CAN LO。这可能是另一个问题。 检查您的SPI_CS_PIN是否设置正确(在您的方面是针对引脚9的CS)。
然后您应该通过在总线上发送CAN消息来检查您的连接/速度/ CS - 该消息必须由您的CAN总线嗅探器捕获。