Complete newbie in terms of Arduino here.
I would like to send different can messages over my sparkfun can shield.
My can shield is for test purposes hooked up to another can sniffer i have.
I'm using the write example from the library an can also seeing the messages i sent on my can sniffer.
But when I'm adding a second message with different ID and data the code loops through it one time and then send again only one message... Please be kind to me I'm new to programming..
Code is below sends message1 for 10s and then message2 for 1s and then only message1 for the rest of the time. Why does it not loop trough everything again?
#include <Canbus.h>
#include <defaults.h>
#include <global.h>
#include <mcp2515.h>
#include <mcp2515_defs.h>
//********************************Setup Loop*********************************//
void setup() {
 Serial.begin(9600);
 Serial.println("CAN Write - Testing transmission of CAN Bus messages");
 delay(1000);
Â
 if(Canbus.init(CANSPEED_500)) //Initialise MCP2515 CAN controller at the specified speed
  Serial.println("CAN Init ok");
 else
  Serial.println("Can't init CAN");
 Â
 delay(1000);
}
//********************************Main Loop*********************************//
void loop()
{
tCAN message1;
    message1.id = 0x1A6; //formatted in HEX
    message1.header.rtr = 0;
    message1.header.length = 7; //formatted in DEC
    message1.data[0] = 0x02;
message1.data[1] = 0x8b;
message1.data[2] = 0xFF;
message1.data[3] = 0x67; //formatted in HEX
message1.data[4] = 0x00;
message1.data[5] = 0x00;
message1.data[6] = 0x1F;
tCAN message2;
    message2.id = 0x18F; //formatted in HEX
    message2.header.rtr = 0;
    message2.header.length = 8; //formatted in DEC
    message2.data[0] = 0x02;
 message2.data[1] = 0x8b;
 message2.data[2] = 0xFF;
 message2.data[3] = 0x67; //formatted in HEX
 message2.data[4] = 0x01;
 message2.data[5] = 0x8D;
 message2.data[6] = 0x1F;
 message2.data[7] = 0x1F;
mcp2515_bit_modify(CANCTRL, (1<<REQOP2)|(1<<REQOP1)|(1<<REQOP0), 0);
mcp2515_send_message(&message1);
delay(10000);
mcp2515_send_message(&message2);
delay(1000);
}
Sorry message1 is message in my code. Yes it compiles and i also see the messages in via my can sniffer. The 10s are just there to see which messages is broadcasted. But like i said i goes through the code once and then only sends message (no message2 again) for the rest of the time after the delays... Don't know why
You say your code is different to the code posted above. We aren't going to spend any more time debugging that code. Please post the actual code you're using. Use the CTRL-T autoformat first.
#include <Canbus.h>
#include <defaults.h>
#include <global.h>
#include <mcp2515.h>
#include <mcp2515_defs.h>
//********************************Setup Loop*********************************//
void setup() {
 Serial.begin(9600);
 Serial.println("CAN Write - Testing transmission of CAN Bus messages");
 delay(1000);
Â
 if(Canbus.init(CANSPEED_500)) //Initialise MCP2515 CAN controller at the specified speed
  Serial.println("CAN Init ok");
 else
  Serial.println("Can't init CAN");
 Â
 delay(1000);
}
//********************************Main Loop*********************************//
void loop()
{
tCAN message1;
    message1.id = 0x1A6; //formatted in HEX
    message1.header.rtr = 0;
    message1.header.length = 7; //formatted in DEC
    message1.data[0] = 0x02;
message1.data[1] = 0x8b;
message1.data[2] = 0xFF;
message1.data[3] = 0x67; //formatted in HEX
message1.data[4] = 0x00;
message1.data[5] = 0x00;
message1.data[6] = 0x1F;
tCAN message2;
    message2.id = 0x18F; //formatted in HEX
    message2.header.rtr = 0;
    message2.header.length = 8; //formatted in DEC
    message2.data[0] = 0x02;
 message2.data[1] = 0x8b;
 message2.data[2] = 0xFF;
 message2.data[3] = 0x67; //formatted in HEX
 message2.data[4] = 0x01;
 message2.data[5] = 0x8D;
 message2.data[6] = 0x1F;
 message2.data[7] = 0x1F;
mcp2515_bit_modify(CANCTRL, (1<<REQOP2)|(1<<REQOP1)|(1<<REQOP0), 0);
mcp2515_send_message(&message1);
delay(10000);
mcp2515_send_message(&message2);
delay(1000);
}
Found a solution to software reset and start the loop again this works.
void loop()
{
tCAN message;
    message.id = 0x1A6; //formatted in HEX
    message.header.rtr = 0;
    message.header.length = 7; //formatted in DEC
    message.data[0] = 0x02;
message.data[1] = 0x8b;
message.data[2] = 0xFF;
message.data[3] = 0x67; //formatted in HEX
message.data[4] = 0x00;
message.data[5] = 0x00;
message.data[6] = 0x1F;
tCAN message2;
    message2.id = 0x18F; //formatted in HEX
    message2.header.rtr = 0;
    message2.header.length = 8; //formatted in DEC
    message2.data[0] = 0x02;
 message2.data[1] = 0x8b;
 message2.data[2] = 0xFF;
 message2.data[3] = 0x67; //formatted in HEX
 message2.data[4] = 0x01;
 message2.data[5] = 0x8D;
 message2.data[6] = 0x1F;
 message2.data[7] = 0x1F;
mcp2515_bit_modify(CANCTRL, (1<<REQOP2)|(1<<REQOP1)|(1<<REQOP0), 0);
mcp2515_send_message(&message);
Serial.print(message.id);
delay(10);
mcp2515_send_message(&message2);
Serial.print(message2.id);
delay(10);
software_Reset();
}
void software_Reset() // Restarts program from beginning but does not reset the peripherals and registers
{
asm volatile ("Â jmp 0");Â
}
I think my problem has something to do with resetting the mcp2525.
My problem is not solved... I only can send the first 3 messages with this code all other messages will be ignored.. I think it has something to do with the mcp2525? Anybody?