Bil till Arduino meddelande: CAN-Bus sniffning och sänder med Arduino (2 / 4 steg)
Steg 2: Bekanta dig med CAN Bus bibliotek
När monterade, var noga med att ladda ner kan buss bibliotek för användning med din Arduino IDE.
Bibliotek: http://skpang.googlecode.com/files/Canbus_v4.zip
Andra filer och Arduino demos är belägna på den SK Pang webbplatsen under dokument: http://skpang.co.uk/catalog/arduino-canbus-shield-with-usd-card-holder-p-706.html.
CanBus-Shield initiering:
#include < Canbus.h > / / Glöm inte att inkludera dessa
#include < defaults.h >
#include < global.h >
#include < mcp2515.h >
#include < mcp2515_defs.h >
void setup()
{
Serial.BEGIN(9600);
Initiera MCP2515 kan flygledaren vid den specificerade hastigheten
IF(CanBus.init(CANSPEED_500))
Serial.println ("kan Init ok");
annat
Serial.println ("kan inte Init kan");
Delay(1000);
}
Shield initiering kommer att krävas för alla aktiviteter. Här, vi definierar våra kan bitrate och importera vårt bibliotek. Alla fordon kan använda olika bitrate hastigheter. För vår exempel använder vi 500 kbps.
De tillgängliga alternativen är:
CANSPEED_125 //CAN hastighet på 125 kbit/s
CANSPEED_250 //CAN hastighet på 250 kbit/s
CANSPEED_500 //CAN hastighet på 500 kbit/s
Om du är osäker på ditt fordon kan bitrate, göra lite googla...
Läs CanBus-meddelanden:
Vi läser varje meddelande här. Det kan vara lite överväldigande som ni se trafikflödet genom.
- Alla meddelanden
void loop()
{
Tkan meddelande;
om (mcp2515_check_message())
{
om (mcp2515_get_message(&message))
{
Serial.Print ("ID:");
Serial.Print(Message.ID,hex);
Serial.Print (",");
Serial.Print ("Data:");
för (int jag = 0; jag < message.header.length;i++)
{
Serial.Print(Message.data[i],hex);
Serial.Print("");
}
Serial.println("");
}}
}
Filtrering kommer att skära ut en hel del av buller. (Ser du vad jag menar när du börjar att vädra ofiltrerade.)
- Filtrera meddelanden
void loop()
{
Tkan meddelande;
om (mcp2515_check_message())
{
om (mcp2515_get_message(&message))
{
IF(Message.ID == 0x631) //filtering baserat på CanBus-meddelande-ID.
{
Serial.Print ("ID:");
Serial.Print(Message.ID,hex);
Serial.Print (",");
Serial.Print ("Data:");
för (int jag = 0; jag < message.header.length;i++)
{
Serial.Print(Message.data[i],hex);
Serial.Print("");
}
Serial.println("");
}}}
}
Message.header.length är storleken på kan meddelande.
Ovanstående var filtreras av meddelande-ID. Vi kan också filtrera baserat på meddelandedata.
om (message.id==0x631 och message.data[3]==0x04 och message.data[4]==0x0F)
Anteckningar:
1 - meddelanden kan vara längre än 3 siffror.
2 - vi formaterar inkommande meddelande-ID: N och meddelandedata som HEX.
Skriv CanBus-meddelanden:
För att skriva en kan buss meddelande, måste vi först montera meddelande komponenter: meddelande-ID, meddelandestorlek och meddelandedata. Meddelandet är uppdelade efter message.id, message.header.rtr, message.header.length och message.data [].
void loop()
{
Tkan meddelande;
Message.ID = 0x631; formaterade i HEX
Message.header.RTR = 0;
Message.header.length = 8; formaterade i DEC
Message.data[0] = 0x40;
Message.data[1] = 0x05;
Message.data[2] = 0x30;
Message.data[3] = 0xFF; formaterade i HEX
Message.data[4] = 0x00;
Message.data[5] = 0x40;
Message.data[6] = 0x00;
Message.data[7] = 0x00;
mcp2515_bit_modify (CANCTRL, (1 << REQOP2) | () 1 << REQOP1) | (1 << REQOP0), 0);
mcp2515_send_message(&Message);
Delay(1000);
}
Meddelande-ID och data skrivs HEX (0xFF, till exempel), vilket är samma format vi läsa med.
mcp2515_send_message(&Message); skickar meddelandet.