Hi SaNGRia ,
I know you, we have spoken many times before, while i have a full bench module setup, I have also been working on a Arduino solution, its not 100% finished but does work (sort of).
I can understand the guys point of view, I myself have done hundreds of hours on it trying to perfect it and get it right.
Posting on forums with working solutions normally means that others profit from your work, I too don't really mind helping other forum members out (and have done), but filling the pockets of people who just want to make a quick buck, leaves a nasty taste in the mouth, these people don't normally offer support (as they don't know what they are doing), and support falls back on the original poster (this has happened to me many many times), helping people who have paid others for your work, is not why you posted in the first place.
The code you have there will work but you need the timings to be right.
I'm more than happy to help you mate, as I know you are a proper bmw enthusiast, but only by posting you an Arduino with the code already loaded and working, you would just need to connect the wires, the MCP2515 Canbus module and a push switch and a slide switch (the E and F have different ignition codes and bus speeds) so need to be selected at Arduino start up.
I need to do some more work with the coding over the Easter break.
You will need.
2x resisters (anything that you have laying around).
1x push switch
1x slide switch
1x MCP2515 Canbus module
some wires and a solder station
You dont need a jbbr for the e series to work, but you do need a zgw for the f series. (im still working on why (i suspect thate zgw sends a command, but ive not found it yet.))
You can have a led connected to tell you when the "ignition" is on, but its not needed. (if you do you need an LED and a resister (a 330 will do).
I'll assume that you will be using the USB port from the laptop to supply the power, or you can use a 12v to 5v adapter. (for standalone bench use).
As for the Ardunio, you can either send me one or I can supply it at cost, I wont change for the coding, so that would be FOC, but just cover the postage.
If you want to have a stab at it yourself, then there are plenty of canbus sketches that get you started, something like this
This is for the F series, its an example, and if you were to load it on a ardunio it would probably work, (but needs tweaking )
//
// CAN Send Example
//
#include <mcp_can.h>
#include <SPI.h>
MCP_CAN CAN0(10); // Set CS to pin 10
void setup()
{
Serial.begin(115200);
// Initialize MCP2515 running at 16MHz with a baudrate of 500kb/s and the masks and filters disabled.
if(CAN0.begin(MCP_ANY, CAN_500KBPS, MCP_16MHZ) == CAN_OK) Serial.println("MCP2515 Initialized Successfully!");
else Serial.println("Error Initializing MCP2515...");
CAN0.setMode(MCP_NORMAL); // Change to normal mode to allow messages to be transmitted
}
const byte Stay_alive[8] PROGMEM = {0x00, 0x00, 0x8A, 0xDD, 0xF1, 0x15, 0x30, 0x02}; // 0x130, Wake up network
const byte Ignition_1[8] PROGMEM = {0x00, 0x40, 0x7F, 0x50, 0xFF, 0xFF, 0xFF, 0xFF}; // 0x26E, Ignition stage 1
const byte Ignition_2[8] PROGMEM = {0x40, 0x40, 0x3F, 0x50, 0xFF, 0xFF, 0xFF, 0xFF}; // 0x26E, Ignition stage 2
void loop()
{
// send data: ID = 0x130, Standard CAN Frame, Data length = 8 bytes, 'data' = array of data bytes to send
byte sndStatWake = CAN0.sendMsgBuf(Module_Wake, 0, 5, Wake_on);
byte sndStatIgn = CAN0.sendMsgBuf(Module_Ign, 0, 8, Ignition_1);
if(sndStat == CAN_OK){
Serial.println("Message Sent Successfully!");
} else {
Serial.println("Error Sending Message...");
}
delay(100); // send data per 100ms
}
/*********************************************************************************************************
END FILE
*********************************************************************************************************/
You need to load the canbus library,i can send you a link to the lib (use the one by Cory Fowler), its the best one to start with.
PM me direct if you want more info mate.
I know you, we have spoken many times before, while i have a full bench module setup, I have also been working on a Arduino solution, its not 100% finished but does work (sort of).
I can understand the guys point of view, I myself have done hundreds of hours on it trying to perfect it and get it right.
Posting on forums with working solutions normally means that others profit from your work, I too don't really mind helping other forum members out (and have done), but filling the pockets of people who just want to make a quick buck, leaves a nasty taste in the mouth, these people don't normally offer support (as they don't know what they are doing), and support falls back on the original poster (this has happened to me many many times), helping people who have paid others for your work, is not why you posted in the first place.
The code you have there will work but you need the timings to be right.
I'm more than happy to help you mate, as I know you are a proper bmw enthusiast, but only by posting you an Arduino with the code already loaded and working, you would just need to connect the wires, the MCP2515 Canbus module and a push switch and a slide switch (the E and F have different ignition codes and bus speeds) so need to be selected at Arduino start up.
I need to do some more work with the coding over the Easter break.
You will need.
2x resisters (anything that you have laying around).
1x push switch
1x slide switch
1x MCP2515 Canbus module
some wires and a solder station
You dont need a jbbr for the e series to work, but you do need a zgw for the f series. (im still working on why (i suspect thate zgw sends a command, but ive not found it yet.))
You can have a led connected to tell you when the "ignition" is on, but its not needed. (if you do you need an LED and a resister (a 330 will do).
I'll assume that you will be using the USB port from the laptop to supply the power, or you can use a 12v to 5v adapter. (for standalone bench use).
As for the Ardunio, you can either send me one or I can supply it at cost, I wont change for the coding, so that would be FOC, but just cover the postage.
If you want to have a stab at it yourself, then there are plenty of canbus sketches that get you started, something like this
This is for the F series, its an example, and if you were to load it on a ardunio it would probably work, (but needs tweaking )
//
// CAN Send Example
//
#include <mcp_can.h>
#include <SPI.h>
MCP_CAN CAN0(10); // Set CS to pin 10
void setup()
{
Serial.begin(115200);
// Initialize MCP2515 running at 16MHz with a baudrate of 500kb/s and the masks and filters disabled.
if(CAN0.begin(MCP_ANY, CAN_500KBPS, MCP_16MHZ) == CAN_OK) Serial.println("MCP2515 Initialized Successfully!");
else Serial.println("Error Initializing MCP2515...");
CAN0.setMode(MCP_NORMAL); // Change to normal mode to allow messages to be transmitted
}
const byte Stay_alive[8] PROGMEM = {0x00, 0x00, 0x8A, 0xDD, 0xF1, 0x15, 0x30, 0x02}; // 0x130, Wake up network
const byte Ignition_1[8] PROGMEM = {0x00, 0x40, 0x7F, 0x50, 0xFF, 0xFF, 0xFF, 0xFF}; // 0x26E, Ignition stage 1
const byte Ignition_2[8] PROGMEM = {0x40, 0x40, 0x3F, 0x50, 0xFF, 0xFF, 0xFF, 0xFF}; // 0x26E, Ignition stage 2
void loop()
{
// send data: ID = 0x130, Standard CAN Frame, Data length = 8 bytes, 'data' = array of data bytes to send
byte sndStatWake = CAN0.sendMsgBuf(Module_Wake, 0, 5, Wake_on);
byte sndStatIgn = CAN0.sendMsgBuf(Module_Ign, 0, 8, Ignition_1);
if(sndStat == CAN_OK){
Serial.println("Message Sent Successfully!");
} else {
Serial.println("Error Sending Message...");
}
delay(100); // send data per 100ms
}
/*********************************************************************************************************
END FILE
*********************************************************************************************************/
You need to load the canbus library,i can send you a link to the lib (use the one by Cory Fowler), its the best one to start with.
PM me direct if you want more info mate.