色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何使用CanBus發送和接收特定數據

454398 ? 來源:工程師吳畏 ? 2019-07-26 09:09 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

為什么選擇CanBus?

CAN-BUS是一種常見的工業總線,因為它的行程距離長,通訊速度中等可靠性。它常見于現代機床上,例如汽車診斷總線。

在本教程中,我將使用SeedStudio CanBus模塊。它與SPI接口配合使用,并且添加了OBD-II轉換器電纜并導入了OBD-II庫,您可以構建板載診斷設備或數據記錄器。

硬件概述

Arduino Uno R3

CanBus模塊

DB9接口

V_OBD

LED指示燈

終端 - CanH,CanL

Arduino Uno Pinout

串行槽連接器

I2C槽連接器

ICSP引腳

收發

結果

可以總線消息

讓我向您解釋一下CanBus消息。每條消息都包含一個ID和一些數據。 Id的起始位置為0x000,十六進制為0x7FF或十進制為0至2047.

每條消息的數據可以是1到8個字節, 每個字節的值可以是0到255之間的值。

CAN總線可以以高達1 Mbit/s的幾種不同速度運行。典型速率為100 kbit/s,125 kbit/s和500 kbit/s。較慢的速率允許更長的總線。 總線上的所有設備必須以相同的速度傳輸。

Arduino代碼

讓我們開始編寫代碼。我將簡單地將一個電位計數據和按鈕數據發送到CanBus模塊上的另一個Arduino。確保你使用一個Arduino作為主(發件人)而另一個作為奴隸(接收者)。

你應該從這里下載CanBus庫。

現在我們開始編寫 Master (發件人) 代碼。

//Canbus Send Data (MASTER)

#include

#include

#include

const int SPI_CS_PIN = 10;

MCP_CAN CAN(SPI_CS_PIN);

int potPin = A0;

int btnPin = 8;

int potValue = 0;

int cantxValue = 0;

int btnValue = 0;

我們包括 和用于Canbus模塊的 庫。 “const int SPI_CS_PIN = 10;”MCP_CAN CAN(SPI_CS_PIN);“ 代碼用于初始化模塊。最后我們添加變量。 potPin,potValue,cantxValue 整數用于讀取和發送電位計值和 btnPin,btnValue 整數用于讀取和發送按鈕值

void setup()

{

Serial.begin(115200);

while (CAN_OK != CAN.begin(CAN_500KBPS)) // baudrate 500kbps

{

Serial.println(“CAN BUS Shield init fail”);

Serial.println(“Init CAN BUS Shield again”);

delay(100);

}

Serial.println(“CAN BUS Initialisation Succesful!”);

}

在設置功能中,我們啟動Serial Comminication并檢查模塊是否正常工作。

void loop()

{

potValue = analogRead(potPin);

btnValue = digitalRead(btnPin);

cantxValue = map(potValue,0,1025,0,255);

Serial.print(“cantxValue: ”);

Serial.println(cantxValue);

Serial.print(“btnValue: ”);

Serial.println(btnValue);

//Create CanBus data pack

unsigned char canMsg[8] = {cantxValue, btnValue, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};

//Send Data Construction: id = 0x07B --- standart Flame --- data lenght = 8 ---- stmp:data buf

CAN.sendMsgBuf(0x07B, 0, 8, canMsg);

delay(100);

}

在循環功能中,我們讀取了電位計值和按鈕值。我已經提到消息值應該在0到255之間。如你所知,potensiometer值可能在0 - 1025之間。因此我們將potensiometer值從0-1025映射到0-255,代碼為“cantxValue = map(potValue,0,1025,0,255);“。

我們是串行打印值,以檢查everthing工作正常。然后我們創建一個數據包來發送Slaver(Receiver)。數據包可以是8個字節,但我們只使用2個字節。

創建數據包后,我們將它傳遞給Slaver。 “CAN.sendMsgBuf(0x07B,0,8,canMsg);”命令有4個參數,我在代碼中解釋過。

多數,我們將數據發送給Slaver。你可以在和看到完整的代碼。

現在,讓我們來吧寫 Slaver(接收器)代碼 來讀取我們的數據。

// CAN-BUS Receive Data

#include “mcp_can.h”

#include

#include

#define INT8U unsigned char

const int SPI_CS_PIN = 10;

MCP_CAN CAN(SPI_CS_PIN);

INT8U len = 0;

INT8U buf[8];

unsigned char canId;

char str[20];

int btnvalue;

int potvalue;

再次,我們正在添加必要的庫。我們創建變量以協助收到數據。

void setup()

{

Serial.begin(115200);

while (CAN_OK != CAN.begin(CAN_500KBPS)) // canbus baudrate 500kbps

{

Serial.println(“CAN BUS Shield init fail!!!”);

Serial.println(“Init CAN BUS Shield again.。.”);

delay(100);

}

Serial.println(“CAN BUS Initialisation Succesful”);

}

我們再次檢查模塊是否正常工作。

void loop()

{

while (CAN_MSGAVAIL == CAN.checkReceive())

{

CAN.readMsgBuf(&len, buf);

canId = CAN.getCanId();

potvalue = buf[0];

btnvalue = buf[1];

}

Serial.print(“ Potensiometer Value : ”);

Serial.print(potvalue);

Serial.print(“ Button Value : ”);

Serial.println(btnvalue);

}

}

在循環函數中,我們檢查是否有任何帶代碼的消息“while(CAN_MSGAVAIL == CAN.checkReceive())”如果有任何接收數據,我們會讀取發送方CanBus ID,并將緩沖區分配給要在函數中使用的變量。然后我們串行打印值以檢查它們是否正確。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 編程
    +關注

    關注

    88

    文章

    3689

    瀏覽量

    95259
  • CANBUS
    +關注

    關注

    2

    文章

    31

    瀏覽量

    18789
  • Arduino
    +關注

    關注

    190

    文章

    6498

    瀏覽量

    192185
收藏 0人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    2.4GHZ 發送/接收 ZIGBEE RFEIC,帶分集開關 skyworksinc

    電子發燒友網為你提供()2.4GHZ 發送/接收 ZIGBEE RFEIC,帶分集開關相關產品參數、數據手冊,更有2.4GHZ 發送/接收
    發表于 06-26 18:35
    2.4GHZ <b class='flag-5'>發送</b>/<b class='flag-5'>接收</b> ZIGBEE RFEIC,帶分集開關 skyworksinc

    CYUSB3014數據接收異常的原因?

    使用的是AN65974(cyfxslfifosync)。streamer使用BeginDataXfer(), WaitForXfer() 和 FinishDataXfer()的方法異步接收數據
    發表于 05-19 06:33

    為UART、MCXA142實現ISP通信的主機端,發送Ping數據包并收到預期的響應,發送接收數據包的典型順序是什么?

    我想為 UART、MCXA142 實現 ISP 通信的主機端。我發送 Ping 數據包并收到預期的響應。發送接收數據包的典型順序是什么?
    發表于 04-03 08:05

    STM32F427串口接收發送中斷同時使能,為什么會出現接收中斷丟數的情況?

    STM32F427芯片,針對UART7開啟串口接收緩存區非空中斷RXNE和串口傳輸完成中斷TC. 1.單測試收發都沒有任何問題。 2.將串口與PC機連接,PC端通過串口助手發送數據給測試板
    發表于 03-11 07:05

    RL-TCPNet UDP通信,板子能接收網絡調試助手數據,不能發送數據到網絡調試助手

    RL-TCPNet UDP通信,板子能接收網絡調試助手數據,不能發送數據到網絡調試助手,程序運行到udp_get_buf(maxlen)函數,系統報錯進入sys_error (ERRO
    發表于 02-20 10:53

    RL-TCPNet UDP通信,板子能接收網絡調試助手數據,不能發送數據到網絡調試助手!!!!

    RL-TCPNet UDP通信,板子能接收網絡調試助手數據,不能發送數據到網絡調試助手,程序運行到udp_get_buf(maxlen)函數,系統報錯進入sys_error (ERRO
    發表于 02-20 10:50

    使用TSS721過程中,只能接收數據不能發送數據怎么解決?

    在使用TSS721過程中,只能接收數據,不能發送數據。手冊中寫會有自發自收的現象,這個現象該怎么樣解決呢?
    發表于 12-17 06:33

    Air780E模組LuatOS開發實戰 —— 手把手教你搞定數據打包解包

    本文要說的是低功耗4G模組Air780E的LuatOS開發實戰,我將手把手教你搞定數據打包解包。
    的頭像 發表于 12-03 11:17 ?634次閱讀
    Air780E模組LuatOS開發實戰 —— 手把手教你搞<b class='flag-5'>定數據</b>打包解包

    ADS8689接收數據怎么和發送數據一樣?為什么?

    讀取地址14h,發送0xC8140000,并在下一幀讀取數據,得到C8140000?
    發表于 11-13 08:13

    socket 發送接收數據方法

    1. Socket 基本概念 在網絡編程中,socket 是一個通信端點。它允許程序發送接收數據。根據通信協議的不同,socket 可以分為以下幾種類型: 流式 socket
    的頭像 發表于 11-12 14:07 ?1911次閱讀

    DSP發送數據時通過外擴DA芯片產生4KHZ正弦波,接收時用DSP自帶的AD接收數據,是不是沒法實現?

    ! 還有一點小疑問:DSP發送數據時通過外擴DA芯片產生4KHZ正弦波,接收時用DSP自帶的AD接收數據,是不是沒法實現?(我這樣設計了,
    發表于 11-08 07:38

    使用main_output接口發送DIR接收的SPDIF數據給DSP遇到的疑問求解

    我想使用main_output接口發送DIR接收的SPDIF數據給DSP 同時使用mpio_b接口接收來自DSP的PCM數據 兩者使用同一
    發表于 10-25 07:08

    當AIC3204做master模式時,發送正常,但是接收時沒有數據產生,為什么?

    使用C5517EVM,AIC3204做slave模式,數據接收發送正常,此時BCLK,WCLK都有DSP提供。 當AIC3204做master模式時,發送正常,但是接收時沒有
    發表于 10-23 08:03

    LMH5401 SE-DE下,增益僅是1v/v,該怎么設定數據

    如果SE-DE下,增益僅是1v/v,該怎么設定數據
    發表于 09-02 06:13

    使用超聲波發送器和接收器構建高性能NDT系統

    電子發燒友網站提供《使用超聲波發送器和接收器構建高性能NDT系統.pdf》資料免費下載
    發表于 08-28 11:00 ?0次下載
    使用超聲波<b class='flag-5'>發送</b>器和<b class='flag-5'>接收</b>器構建高性能NDT系統
    主站蜘蛛池模板: 成人午夜精品久久久久久久秋霞 | 国产精品视频免费视频 | 征服丝袜旗袍人妻 | 久久久久久久国产精品视频 | 国产在线观看91精品 | 小777论坛| 最近在线视频观看2018免费 | 我的漂亮朋友在线观看全集免费 | 亚洲中文 字幕 国产 综合 | 伊人久久亚洲精品一区 | 夜夜国产亚洲视频香蕉 | 麻豆国产MV视频 | 久久777国产线看观看精品卜 | 亚洲高清无在码在线电影 | 欧美成人无码视频午夜福利 | 高h辣h双处全是肉一对一 | 久久综合色一综合色88中文 | 中文字幕在线播放视频 | WINDOWSCHANNEL老太 | 青青青手机视频 | 古风一女N男到处做高H | 国产欧美一区二区三区视频 | 欧美日韩免费播放一区二区 | 国产超碰人人爱被IOS解锁 | 亚洲精品线在线观看 | 国产三级在线观看视频 | 成人在线高清不卡免费视频 | 日本69xxxxx| 久久这里只有精品国产精品99 | 天天国产在线精品亚洲 | 国产99九九久久无码熟妇 | 国精产品999一区二区三区有限 | 特黄特色大片免费播放器试看 | 三级黄色在线视频中文 | 久久天堂网 | 欧美群交XXXCOM | 国产成人精品免费青青草原app | 国产不卡在线观看视频 | 日韩精品免费在线观看 | 欧美中文字幕一区二区三区 | 国产人妻精品久久久久久很牛 |

    電子發燒友

    中國電子工程師最喜歡的網站

    • 2931785位工程師會員交流學習
    • 獲取您個性化的科技前沿技術信息
    • 參加活動獲取豐厚的禮品