查看: 256|回复: 7

[已解决] 两套arduino uno 和MCP2515模块进行CAN通讯的问题

[复制链接]

该用户从未签到

发表于 2019-8-20 15:39 | 显示全部楼层 |阅读模式
本帖最后由 影丿真红 于 2019-8-22 13:24 编辑

萌新想实现两个arduino进行CAN通讯,上网找了很多程序和接线方法,搭了两个设备,一个用于发送CAN,一个用于接收CAN,两个arduino uno与CAN模块接线如下:
INT——D2
SCK——D13
SI——D11
SO——D12
CS——D9
GND——GND
VCC——5V

两个MCP2515模块之间
H——H
L——L

程序如下:发送:

kittenblock中小学创客名师推荐的图形化编程软件

#include <mcp_can.h>
#include <mcp_can_dfs.h>

const int SPI_CS_PIN = 9;
MCP_CAN CAN(SPI_CS_PIN);     

void setup()
{
  Serial.begin(115200);
  // init can bus, baudrate: 500k
  if(CAN.begin(CAN_1000KBPS) ==CAN_OK) Serial.print("can init ok!!\r\n");
  else Serial.print("Can init fail!!\r\n");
}

unsigned char stmp[8] = {0, 1, 2, 3, 4, 5, 6, 7};
void loop()
{
  // send data:  id = 0x00, standrad flame, data len = 8, stmp: data buf
  CAN.sendMsgBuf(0x00, 0, 8, stmp);  
  Serial.print("Can Send Ok\r\n");
  delay(1000);
}


接收:

kittenblock中小学创客名师推荐的图形化编程软件

#include <mcp_can.h>
#include <mcp_can_dfs.h>

// the cs pin of the version after v1.1 is default to D9
// v0.9b and v1.0 is default D10
const int SPI_CS_PIN = 9;
MCP_CAN CAN(SPI_CS_PIN);                                    // Set CS pin

unsigned char flagRecv = 0;
unsigned char len = 0;
unsigned char buf[8];
char str[20];

void setup()
{
    Serial.begin(115200);

    while (CAN_OK != CAN.begin(CAN_1000KBPS))              // init can bus : baudrate = 500k
    {
        Serial.println("CAN BUS Shield init fail");
        Serial.println(" Init CAN BUS Shield again");
        delay(100);
    }
    Serial.println("CAN BUS Shield init ok!");

    attachInterrupt(0, MCP2515_ISR, FALLING); // start interrupt
}

void MCP2515_ISR()
{
    flagRecv = 1;
}

void loop()
{
    if(flagRecv) 
    {                                   // check if get data

        flagRecv = 0;                   // clear flag

            // read data,  len: data length, buf: data buf
            CAN.readMsgBuf(&len, buf);

            // print the data
            for(int i = 0; i<len; i++)
            {
                Serial.print(buf);Serial.print("\t");
            }
            Serial.println();

    }
}



上网找的库,板子都是新买的,串口监视到两个arduino都初始化成功,发送端有发送成功的Can Send Ok出现,但是接收的一直没有任何响应,只有显示初始化成功,现在没有门路了,求各位帮忙不知道是哪里的问题。

该用户从未签到

发表于 2019-8-22 08:37 | 显示全部楼层
MCP2515模块,右下角那两个pin,要短路。
  • TA的每日心情
    开心
    2019-3-25 16:13
  • 签到天数: 4 天

    [LV.2]偶尔看看I

    发表于 2019-8-20 20:55 | 显示全部楼层
    没配置通讯地址吧

    该用户从未签到

     楼主| 发表于 2019-8-20 23:06 | 显示全部楼层
    GeGeBoom 发表于 2019-8-20 20:55
    没配置通讯地址吧

    大佬请问怎样设置接收器的地址呢?,?

    该用户从未签到

     楼主| 发表于 2019-8-22 12:37 | 显示全部楼层
    cluse 发表于 2019-8-22 08:37
    MCP2515模块,右下角那两个pin,要短路。

    你好,是接收和发送两个都要呢?

    该用户从未签到

     楼主| 发表于 2019-8-22 13:23 | 显示全部楼层
    cluse 发表于 2019-8-22 08:37
    MCP2515模块,右下角那两个pin,要短路。

    可以了,万分感谢
  • TA的每日心情
    奋斗
    2019-9-21 00:13
  • 签到天数: 65 天

    [LV.6]常住居民II

    发表于 2019-8-22 14:15 | 显示全部楼层
    串口通讯吗。这是?
    您需要登录后才可以回帖 登录 | 立即注册  

    本版积分规则

    热门推荐

    求ESP8266+0.96oled的天气代码
    求ESP8266+0.96oled的天气
    新人求助
    新人求助
    仿真出错!显示原因是这个,但是找不到该出错文件
    用Arduino制作支持ROS机器人操作系统的7轴机械臂
    用Arduino制作支持ROS机器
    参赛项目:[/backcolor] 用Arduino制作支持ROS机器人操作系统的7轴机械臂[/backcolor
    为拍月亮而生的便携望远镜系统。
    为拍月亮而生的便携望远镜
    参赛项目: 便携望远镜系统 参赛组员: 1人 布丁:嵌入式软件、上位机软件、电路、结
    光敏电阻检测环境光实验
    光敏电阻检测环境光实验
    本文节选自《Arduino程序设计基础》 一些简单的电子元件就可以做传感器使用,例如我
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   ( 蜀ICP备14017632号-3 )
    快速回复 返回顶部 返回列表