Reducing Sketch Size Canbus Send

Hi, Im trying to build a module to mimic a canbus datastream to trick some factory modules into working in a vehicle.

I was hoping to do this on a UNO with a CAN Shield.
All up there is over 1000 messages to be transmitted.

I've run some basic tests with some short code with only and handful of messages and got it all working so have gone and added all the required messages however now it wont compile as the sketch is too big.

Below is a reduced version of the sketch with only messages 1&2 so people can get the idea of the layout. (mine has over 1k)

Thanks in advance

#include <SPI.h>
#include <mcp2515.h>

struct can_frame canMsg1;
struct can_frame canMsg2;
MCP2515 mcp2515(10);


void setup() {
  canMsg1.can_id  = 0x0F6;
  canMsg1.can_dlc = 8;
  canMsg1.data[0] = 0x8E;
  canMsg1.data[1] = 0x87;
  canMsg1.data[2] = 0x32;
  canMsg1.data[3] = 0xFA;
  canMsg1.data[4] = 0x26;
  canMsg1.data[5] = 0x8E;
  canMsg1.data[6] = 0xBE;
  canMsg1.data[7] = 0x86;

  canMsg2.can_id  = 0x036;
  canMsg2.can_dlc = 8;
  canMsg2.data[0] = 0x0E;
  canMsg2.data[1] = 0x00;
  canMsg2.data[2] = 0x00;
  canMsg2.data[3] = 0x08;
  canMsg2.data[4] = 0x01;
  canMsg2.data[5] = 0x00;
  canMsg2.data[6] = 0x00;
  canMsg2.data[7] = 0xA0;
  
  while (!Serial);
  Serial.begin(115200);
  
  mcp2515.reset();
  mcp2515.setBitrate(CAN_500KBPS, MCP_8MHZ);
  mcp2515.setNormalMode();
  
  Serial.println("Example: Write to CAN");
}

void loop() {
  mcp2515.sendMessage(&canMsg1);
  mcp2515.sendMessage(&canMsg2);

  Serial.println("Messages sent");
  
  delay(100);
}

Can you use PROGMEM for the messages?

Maybe something like this:

const struct can_frame canMsg1 =
{
  0x0F6, 
  8, 
  {
    0x8E, 0x87, 0x32, 0xFA, 0x26, 0x8E, 0xBE, 0x86
  }
};

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.