receiving certain bytes of data on canbus

hey guys i am currently ongoing with a canbus mcp2515 module , Reading data is fine and have managed to get some info that corresponds to lights and so on. My light ID is 0x270 with 3 bytes of data, When lights are in off position the bytes are (0x32, 0x10, 0x32), When in on position the 2nd byte of data (0x00) changes to (0xC0). I want to be able to send a command only when the 2nd byte changes to 0xC0… Is their any advice on how i can go about doing so? i am using an example below but need to know if monitoring certain bytes is possible?

#include <SPI.h>
#include "mcp_can.h"

/*SAMD core*/
    #define SERIAL SerialUSB
    #define SERIAL Serial

// 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 = 10;

MCP_CAN CAN(SPI_CS_PIN);                                    // Set CS pin

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

void setup() {

    while (CAN_OK != CAN.begin(CAN_500KBPS)) {            // init can bus : baudrate = 500k
        SERIAL.println("CAN BUS Shield init fail");
        SERIAL.println(" Init CAN BUS Shield again");
    SERIAL.println("CAN BUS Shield init ok!");

    attachInterrupt(digitalPinToInterrupt(interruptPin), MCP2515_ISR, FALLING); // start interrupt

        set mask, set both the mask to 0x3ff
    CAN.init_Mask(0, 0, 0x7ff);                         // there are 2 mask in mcp2515, you need to set both of them
    CAN.init_Mask(1, 0, 0x7ff);

        set filter, we can receive id from 0x04 ~ 0x09
    CAN.init_Filt(0, 0, 0x04);                          // there are 6 filter in mcp2515
    CAN.init_Filt(1, 0, 0x05);                          // there are 6 filter in mcp2515

    CAN.init_Filt(2, 0, 0x06);                          // there are 6 filter in mcp2515
    CAN.init_Filt(3, 0, 0x07);                          // there are 6 filter in mcp2515
    CAN.init_Filt(4, 0, 0x08);                          // there are 6 filter in mcp2515
    CAN.init_Filt(5, 0, 0x09);                          // there are 6 filter in mcp2515


void MCP2515_ISR() {
    flagRecv = 1;

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

        flagRecv = 0;                // clear flag
        CAN.readMsgBuf(&len, buf);    // read data,  len: data length, buf: data buf

        SERIAL.print("Get Data From id: ");
        for (int i = 0; i < len; i++) { // print the data
            SERIAL.print(buf[i], HEX);



you are reading 8 bytes of Canbus data into the array buf[8]
you can test a particular byte so (comparing second byte with 0xC0)


excellent man thanks alot :slight_smile: