【发布时间】:2015-01-26 08:40:33
【问题描述】:
我已将我的 CAN-BUS 屏蔽连接到我的加热系统,并且我正在从总线获取数据。
这是有效的(我认为)。
但是,我无法获得我想要的数据。
请看附图。
它说它在 CAN 开放的情况下运行,节点应该是 80(0X50 十六进制)。
但是,当我放置一个仅显示来自节点 80 的数据的过滤器时,我将无法获得任何数据。
另外,当我尝试不使用过滤器时,我不会从模块中获取任何数据!
它还说它每 1 秒发送一次心跳。这是我在节点 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();
}
}
【问题讨论】:
-
标签和
goto确实有它们的位置。使用它们而不是循环不是这样的地方。 -
抱歉,Joachim 我不太清楚你在说什么!
-
与你的问题无关,但不要使用
goto作为实现循环的方式。 -
还有谁可以帮忙???