Köpt på mig MCP2515 CANbus kort och ett Arduino Pro Micro kort.
Installtion av Arduino kortet hittar man här:
https://learn.sparkfun.com/tutorials/pro-micro--fio-v3-hookup-guide/all
och så här kopplar man inkl. 12 volts reg på RAW och GND.
Sen kan man krympa ner den mer än detta men som vanligt tar vi det senare......
Här är koden och tanken är att man filtrerar bort all information man inte vill ha med.
Det är ju mycket babbel på CANbusen.
// demo: CAN-BUS Shield, receive data
#include <mcp_can.h>
//#include <mcp_can_dfs.h>
#include <SPI.h>
long unsigned int rxId;
unsigned char len = 0;
unsigned char rxBuf[8];
unsigned long OLDmilliSek;
MCP_CAN CAN0(10); // Set CS to pin 9
#define CAN0_INT 2 //tillagt
void setup()
{
Serial.begin(9600);
//CAN0.begin(MCP_ANY, CAN_33K3BPS, MCP_16MHZ);
//CAN0.begin(CAN_47K619BPS,2); // init can bus :CAN_33K3BPS baudrate = 33.3(GMLAN) with 8MHZ change 2 to 1 run with 16mhz oscilator
//CAN0.begin(CAN_33K3BPS,1); // CAN0.begin(CAN_47K619BPS,1); CANbus-I
CAN0.begin(CAN_500KBPS,1); // CANBUS-P powertrain
//pinMode(CAN0_INT, INPUT); // Configuring pin for /INT input
pinMode(2, INPUT); // Setting pin 2 for /INT input
Serial.println("MCP2515 Library Receive CAN BUS Example...");
}
void loop(){
unsigned long currentmilliSek = millis(); // / 1000 ; //unsigned long värde i sekunder
if(digitalRead(CAN0_INT)== LOW) // If pin 2 is low, read receive buffer
{
CAN0.readMsgBuf(&len, rxBuf); // Read data: len = data length, buf = data byte(s)
rxId = CAN0.getCanId(); // Get message ID
if(rxId == 0x439 ){ // 290= steeringwheel || rxId == 0x530 om Id = ACC 520 eller 530 0x280 crusies byte 4
//filtrerar bort 439h - SPA distance
} else {
Serial.print("ID: ");
Serial.print(rxId, HEX);
Serial.print(" Data: ");
for(int i = 0; i<len; i++) // Print each byte of the data
{
if(rxBuf[0] < 0x80) { // shows changed Status
if(rxBuf[i] < 0x10) // If data byte is less than 0x10, add a leading zero
{
Serial.print("0");
}
Serial.print(rxBuf[i], HEX);
Serial.print(" ");
} // satus change end
}
Serial.print(" ");Serial.print(currentmilliSek-OLDmilliSek);Serial.println();
OLDmilliSek=currentmilliSek; // tidstämpel
} // filter end
}
}
Inga kommentarer:
Skicka en kommentar