init_Filt()

描述

CAN ID 的過濾器。在 86Duino 中,有 32 組 CAN 的 ID 過濾器,從外部設備進來的 CAN 資料中,過濾器可以決定要接收哪一個 CAN ID 的資料;此函式還可以配合 init_Mask(),將可接收的 CAN ID 限制在 A ~ B 的區間。如果在 sketch 中,沒有呼叫 init_Mask() 也沒有呼叫 init_Filt(),CAN 函式庫會自動接收來自所有 CAN ID 的資料。

語法


CAN.init_Filt(num, ext, ulData)

參數

num:第幾組過濾器,值的範圍: 0 ~ 31
ext:傳送資料的格式,有以下 4 種

  1. CAN_STDID:標準資料幀,符合 CAN 2.0A 規範,ID 範圍:0 ~ 0x7FF
  2. CAN_EXTID:擴展資料幀,使用 CAN 2.0B 規範,ID 範圍:0 ~ 0x1FFFFFFF
  3. CAN_STDID_REMOTE:標準遠端幀,符合 CAN 2.0A 規範,ID 範圍:0 ~ 0x7FF
  4. CAN_EXTID_REMOTE:擴展遠端幀,符合 CAN 2.0B 規範,ID 範圍:0 ~ 0x1FFFFFFF

ulData:過濾器值。請看以下範例:

        沒有設定遮罩:
        0 0 0 0 0 0 1 1    過濾器值 0x03
        0 0 0 0 0 0 0 0    遮罩值 0x00

        CAN ID:0x03

        有設定遮罩:
        0 0 0 1 1 0 0 1    過濾器值 0x19
        0 0 0 0 0 0 0 1    遮罩值 0x01

        CAN ID 的接收區間為:0x18、0x19

        0 1 0 1 1 1 0 0    過濾器值 0x5C
        0 0 0 0 0 1 1 1    遮罩值 0x07

        CAN ID 的接收區間為:0x58 ~ 0x5F

回傳

CAN_FAIL:設定失敗
CAN_OK:設定成功

範例

#include <CANBus.h>
unsigned char buf[8] = {0, 1, 2, 3, 4, 5, 6, 7};

void setup() {
    Serial.begin(115200);
    CAN.begin(CAN_500KBPS); // 設定 CAN 的傳輸速度為 500KBPS
    CAN.init_Filt(0, CAN_STDID, 0x019); // 設定第 0 過濾器,值為 0x019,使用標準資料幀
    CAN.init_Mask(0, CAN_STDID, 0x01); // 設定第 0 遮罩,值為 0x01,使用標準資料幀
}

void loop() {
    CAN.beginTransmission(0x00, CAN_STDID);    // 外部 CAN device 的 ID 為 0x00,使用標準資料幀
    CAN.write(buf, 8);                         // 送出 8 bytes 資料
    CAN.endTransmission();                     // 結束傳送
    delay(10);
}

See also

init_Mask()
beginTransmission()
write()
endTransmission()


函式庫參考主頁面

The text of the 86Duino reference is licensed under a Creative Commons Attribution-ShareAlike 3.0 License. Code samples in the reference are released into the public domain.