我已经把我的CAN总线屏蔽连接到了我的加热系统上,我正在从公共汽车上获取数据。
这起作用了(我想)。但是,我无法得到我想要的数据。请看附图。
可打开数据
CAN总线日志
它说它正在与CAN一起运行,节点应该是80 (0X50十六进制)。但是,当我在仅显示节点80的数据的筛选器上时,我将得不到任何数据。
另外,当我尝试不使用过滤器时,我将不会从模块中获得任何数据!
它还说它每1s发送一次心跳。这是我在Node id 1862年(0X746十六进制)上找到的。
如何从模块读取数据。
从屏蔽中读取的代码:
#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();
}
}发布于 2016-01-30 22:10:12
代码是正确的,但是mcp_can库和兼容屏蔽有一个可能的问题。最初的种子工作室屏蔽使用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和LO是否正确连接。这可能是另一个问题。检查您的SPI_CS_PIN是否正确设置(在您的scetch是CS上的引脚9)。
然后,您应该通过在总线上发送CAN消息来检查您的连接/速度/CS--该消息必须由您的CAN总线嗅探器捕获。
https://stackoverflow.com/questions/28146874
复制相似问题