查看: 1754|回复: 11

[已解决] 两套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-12-11 10:06
  • 签到天数: 110 天

    [LV.6]常住居民II

    发表于 2019-8-22 14:15 | 显示全部楼层
    串口通讯吗。这是?
  • TA的每日心情
    开心
    2019-10-3 11:55
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2019-10-3 12:03 | 显示全部楼层
    你好。
    我重复了这个试验, [Serial.print(buf);Serial.print("\t");] 有错误: no matching function for call to 'print(unsigned char [8])', 不知道什么原因?
    改为: Serial.print(buf[8]);Serial.print("\t"); 用 serial monitor 列出一个矩阵, 全是 8。
    请问原因,谢谢。

    该用户从未签到

    发表于 2019-10-6 14:12 | 显示全部楼层
    本帖最后由 cciew 于 2019-10-6 14:21 编辑
    oldshanren 发表于 2019-10-3 12:03
    你好。
    我重复了这个试验, [Serial.print(buf);Serial.print("\t");] 有错误: no matching function for ...

    这样写亲: //论坛有bug,【i】 显示不出来
    for(int i = 0; i<len; i++)
                {
                    Serial.print(buf【i】);  //改成英文的引号
                    Serial.print("\t");
                }
    1.png
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    热门推荐

    创客火首发无人机编队套装,开启不一样的人工智能教育
    创客火首发无人机编队套装
    2017年国务院发布《新一代人工智能发展规划》,提出要广泛开展人工智能科普活动,在中
    【干货分享】mega2560原理图PCB图纸altium designer18
    【干货分享】mega2560原理
    分享一下mega2560的板子 AD版本 **** 本内容被作者隐藏 **** ergo
    无源蜂鸣器声音小
    无源蜂鸣器声音小
    声音太小,如何优化下电路
    自制WiFi天气时钟基于Blinker esp-01(8266) u8g2驱动12864 LCD屏
    自制WiFi天气时钟基于Blin
    先发个实物展示视频:https://www.bilibili.com/video/BV12k4y1679Q/ 第一次发分享
    一文教你选择Arduino开发板,小白进
    一文教你选择Arduino开发
    笔者在2016年接触了Arduino,跳了万条坑,行了千里弯,到今天也算是Arduino的一
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   
    快速回复 返回顶部 返回列表