首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用通过CAN总线发送的信息使Arduino上的LED闪烁时出现问题

使用通过CAN总线发送的信息使Arduino上的LED闪烁时出现问题
EN

Stack Overflow用户
提问于 2019-04-05 06:24:30
回答 1查看 326关注 0票数 0

我一直在摆弄CAN-bus,试图学习基础知识,以便在未来的项目中使用它。我有两个MCP2515芯片连接的arduinos,我在它们之间发送消息。我已经能够很好地连接芯片并在arduinos之间发送消息,但是当我修改代码以使LED闪烁时,如果第一个字节是0x00或0x01,它就不会闪烁。我添加了打印语句来检查它是否进入循环,确实如此,使用串行监视器,我可以看到它是yeet和yote,但数字引脚3保持在~0V。

这可能是一个arduino的问题,而不是一个CAN总线的问题,但是有人能帮我理解为什么我的LED不闪烁吗?代码正在进入循环,所以它应该正在处理命令,我将引脚初始化为输出,但我仍然没有闪烁。

注意,发送arduino正在发送交替的数据包,首先是以0X01作为第一数据字节的数据包,然后是以0x00作为第一数据字节的数据包。这些数据分组被5000毫秒分开。

我目前使用的是这里提供的CAN库https://github.com/autowp/arduino-mcp2515

接收arduino的代码

代码语言:javascript
复制
#include <SPI.h>
#include <mcp2515.h>

struct can_frame canMsg;
MCP2515 mcp2515(10);

int LED_PIN = 3;
void setup() {
  Serial.begin(115200);
  SPI.begin();
  pinMode(LED_PIN, OUTPUT);
  mcp2515.reset();
  mcp2515.setBitrate(CAN_125KBPS);
  mcp2515.setNormalMode();

  Serial.println("------- CAN Read ----------");
  Serial.println("ID  DLC   DATA");
}

void loop() {

  if (mcp2515.readMessage(&canMsg) == MCP2515::ERROR_OK) {

    Serial.print(canMsg.can_id, HEX); // print ID
    Serial.print(" "); 
    Serial.print(canMsg.can_dlc, HEX); // print DLC
    Serial.print(" ");
    if(canMsg.data[0] == 0x00){
      digitalWrite(LED_PIN,HIGH);
      Serial.print("YEET");
    }
    if(canMsg.data[0] == 0x01){
      digitalWrite(LED_PIN,LOW);
      Serial.print("YOTE");
    }
    for (int i = 0; i<canMsg.can_dlc; i++)  {  // print the data

      Serial.print(canMsg.data[i],HEX);
      Serial.print(" ");

    }

    Serial.println();      
  }

}

和用于传输arduino的代码以确保完整性

代码语言:javascript
复制
#include <SPI.h>
#include <mcp2515.h>

struct can_frame canMsg1;
struct can_frame canMsg2;
MCP2515 mcp2515(10);


void setup() {

  canMsg1.can_id  = 0x0F6;
  canMsg1.can_dlc = 8;
  canMsg1.data[0] = 0x01;
  canMsg1.data[1] = 0x87;
  canMsg1.data[2] = 0x32;
  canMsg1.data[3] = 0xFA;
  canMsg1.data[4] = 0x26;
  canMsg1.data[5] = 0x8E;
  canMsg1.data[6] = 0xBE;
  canMsg1.data[7] = 0x86;

  canMsg2.can_id  = 0x036;
  canMsg2.can_dlc = 8;
  canMsg2.data[0] = 0x00;
  canMsg2.data[1] = 0x00;
  canMsg2.data[2] = 0x00;
  canMsg2.data[3] = 0x08;
  canMsg2.data[4] = 0x01;
  canMsg2.data[5] = 0x00;
  canMsg2.data[6] = 0x00;
  canMsg2.data[7] = 0xA0;

  while (!Serial);
  Serial.begin(115200);
  SPI.begin();

  mcp2515.reset();
  mcp2515.setBitrate(CAN_125KBPS);
  mcp2515.setNormalMode();

  Serial.println("Example: Write to CAN");
}

void loop() {

  mcp2515.sendMessage(&canMsg1);
  delay(5000);
  mcp2515.sendMessage(&canMsg2);

  Serial.println("Messages sent");

  delay(5000);

}
EN

回答 1

Stack Overflow用户

发布于 2019-04-05 06:36:08

抱歉,我是个笨蛋。我忘了电路板的电源线不是一直连到电路板上的。我将Arduino连接到电路板的适当部分以接收电源和接地,但将LED连接到未连接的接地引脚。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55525775

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档