日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

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

3天內不再提示

如何使用CanBus發(fā)送和接收特定數據

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

掃碼添加小助手

加入工程師交流群

為什么選擇CanBus?

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

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

硬件概述

Arduino Uno R3

CanBus模塊

DB9接口

V_OBD

LED指示燈

終端 - CanH,CanL

Arduino Uno Pinout

串行槽連接器

I2C槽連接器

ICSP引腳

收發(fā)

結果

可以總線消息

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

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

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

Arduino代碼

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

你應該從這里下載CanBus庫。

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

//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 整數用于讀取和發(fā)送電位計值和 btnPin,btnValue 整數用于讀取和發(fā)送按鈕值

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);

}

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

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

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

多數,我們將數據發(fā)送給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;

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

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);

}

}

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

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

    關注

    90

    文章

    3724

    瀏覽量

    97459
  • CANBUS
    +關注

    關注

    2

    文章

    33

    瀏覽量

    19155
  • Arduino
    +關注

    關注

    190

    文章

    6527

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    如何為 S32DS 中的特定變量(RAM、閃存、數據閃存)強制使用特定內存區(qū)域?

    remain 不受固件重新編程的影響或部分重新定位——功能類似于 EEPROM。 My Questions 如何配置S32DS 中的項目設置為變量(RAM、閃存或數據閃存)保留和分配特定內存地址? 我該
    發(fā)表于 04-16 06:52

    是否可以通過基于UART的DMA在兩個外部SRAM之間發(fā)送接收數據?

    兩個MPC5777C微控制器通過外部總線接口連接到兩個外部SRAM。是否可以通過基于UART的DMA在兩個外部SRAM之間發(fā)送接收數據?
    發(fā)表于 04-06 07:38

    RDMA設計28:RoCE v2 發(fā)送接收模塊設計

    v2 數據包或從 RoCE v2數據包中解析出遠程主機信息及數據。RoCE v2 發(fā)送接收模塊的結構和
    發(fā)表于 01-25 10:45

    RDMA設計19:RoCE v2 發(fā)送接收模塊設計

    為 RoCE v2 數據包或從 RoCE v2數據包中解析出遠程主機信息及數據。RoCE v2 發(fā)送接收模塊的結構和
    發(fā)表于 01-06 08:08

    RS485電路及發(fā)現數據能發(fā),不能接收的原因?

    傳輸的可靠性。 2、收發(fā)器:RS-485收發(fā)器是連接到通信線路的芯片,負責將邏輯電平的數據轉換成電壓信號發(fā)送到線路上,以及將從線路上接收到的電壓信號轉換成邏輯電平的數據。這些收發(fā)器通常
    發(fā)表于 12-25 07:11

    請問CW32R031在接收發(fā)送數據時如何保持低功耗?

    CW32R031在接收發(fā)送數據時如何保持低功耗?
    發(fā)表于 12-25 06:14

    UART發(fā)送數據后,接收端未收到數據,原因有哪些?

    UART 發(fā)送數據后,接收端未收到數據,可能的原因有哪些?
    發(fā)表于 11-24 06:03

    UART接口數據接收發(fā)送數據

    具體方法和步驟 UART模塊依照UART協議標準的異步方式發(fā)送接收數據,每個UART模塊有TX和RX兩根數據線,TX為輸出,RX為輸入。使用TX
    發(fā)表于 10-29 07:37

    請問rt_thread的uart下如何支持9位數據發(fā)送接收?

    目前項目中有使用UART進行數據發(fā)送接收,但是此部分UART比較特殊,其使用9bit進行數據傳輸,其中第9位用于指示當前是地位還是數據
    發(fā)表于 09-28 07:56

    變頻器CANBUS網絡通訊異常深度解析

    數據丟包,重則引發(fā)系統停機。本文將從硬件層、協議層、應用層三個維度,結合典型故障案例,系統剖析變頻器CANBUS通信異常的成因及解決方案。 一、硬件層故障:物理連接的隱形殺手 某化工廠的變頻器群控系統頻繁出現通信中斷,最終排
    的頭像 發(fā)表于 09-17 22:18 ?1763次閱讀
    變頻器<b class='flag-5'>CANBUS</b>網絡通訊異常深度解析

    移植CANfestival,發(fā)現can無法接收數據,為什么?

    通過can的上位機來發(fā)送報文,發(fā)現如下的情況 無論發(fā)送任何數據,發(fā)現rt_device_read返回值是0,查了一下函數返回值發(fā)現讀取失敗 然后我在下面一行打印接收到的
    發(fā)表于 09-11 07:46

    如何確定PSoC? Creator 中綁定數據的行/位置?

    十六進制轉儲的比較可以看出,粘合數據似乎存儲在第 389 行和第 391 行。 有幾個問題。 那么,是否有適當的行來保護引導加載程序 0-388? 如何確定PSoC? Creator 中綁定數據的行/位置? 我可以設置粘合數據
    發(fā)表于 07-22 07:58

    磁致伸縮位移傳感器CANbus數字輸出

    博爾森磁致伸縮位移傳感器采用CANbus協議,具備高精度、高速傳輸和多位置設定功能,適用于工業(yè)自動化場景。
    的頭像 發(fā)表于 07-21 09:35 ?737次閱讀
    磁致伸縮位移傳感器<b class='flag-5'>CANbus</b>數字輸出

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

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

    CYUSB3014數據接收異常的原因?

    使用的是AN65974(cyfxslfifosync)。streamer使用BeginDataXfer(), WaitForXfer() 和 FinishDataXfer()的方法異步接收數據
    發(fā)表于 05-19 06:33
    廉江市| 瓮安县| 乐亭县| 松江区| 临安市| 北宁市| 禄丰县| 商洛市| 永清县| 长沙县| 岳普湖县| 梧州市| 利辛县| 德钦县| 柳河县| 信阳市| 咸阳市| 固阳县| 宜宾市| 沙坪坝区| 准格尔旗| 板桥市| 拉孜县| 醴陵市| 平远县| 巨鹿县| 南雄市| 沙河市| 沈阳市| 建阳市| 沁阳市| 巴青县| 屏南县| 比如县| 威远县| 交口县| 阿拉善盟| 浦东新区| 濮阳县| 新晃| 德钦县|