Hallo zusammen, bin gerade dabei Can Bus Daten auszulesen. Bekomme mit folgendem Programm alle ID's des Fahrzeuges angezeigt: #include <mcp_can.h> #include <SPI.h> long unsigned int rxId; unsigned char len = 0; unsigned char rxBuf[8]; MCP_CAN CAN0(10); // Set CS to pin 10 void setup() { Serial.begin(115200); CAN0.begin(CAN_250KBPS); // init can bus : pinMode(2, INPUT); // Setting pin 2 for /INT Serial.println("MCP2515 Library Receive Example..."); } void loop() { if(!digitalRead(2)) // If pin 2 is low, read { CAN0.readMsgBuf(&len, rxBuf); // Read data: len = data rxId = CAN0.getCanId(); // Get message ID 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[i] < 0x10) // If data byte is less { Serial.print("0"); } Serial.print(rxBuf[i], HEX); Serial.print(" "); } Serial.println(); } } zum Beispiel werden Id's mit folgendem HEX Wert angezeigt: ID:1 Data: 16 00 00 00 00 00 00 00 ID 44C Data: 01 02 03 04 05 06 07 08 möchte dieses nun auf nur EINE ID filtern aber bekommen keine passendes Programm geschrieben. Das mit zum Beispiel nur die ID 44C angezeigt wird. Kann mir da jemand weiterhelfen?? VIelen Dank im Voraus
CAN0.readMsgBuf(&len, rxBuf); // Read data: len = data rxId = CAN0.getCanId(); // Get message ID if (rxID==xxx) { Serial.print("ID: "); Serial.print(rxId, HEX); Serial.print(" Data: "); for(int i = 0; i<len; i++) }
Du kannst auch Hardwarefilter im MCP2515 setzen. Dann erfährt der Arduino von den Messages mit anderen IDs gar nichts. Die CAN_BUS_Shield-Library abstrahiert so dünn und ist so wenig dokumentiert, dass du selbst ins Datenblatt UND in den Code sehen musst, um die Filter zu benutzen.
Dankeschön für die schnelle Antwort. habe jetzt meine Programm wie folgt umgschrieben: void loop() { if(!digitalRead(2)) // If pin 2 is low, read { CAN0.readMsgBuf(&len, rxBuf); // Read data: len = rxId = CAN0.getCanId(); // Get message ID if (rxId==xxx) { Serial.print("ID: "); Serial.print(rxId, HEX); Serial.print(" Data: "); for(int i = 0; i<len; i++) // Print each byte of { if(rxBuf[i] < 0x10) // If data byte is less { Serial.print("0"); } Serial.print(rxBuf[i], HEX); Serial.print(" "); } Serial.println(); } } } Bei xxx habe ich meine ID hineingeschrieben. Nun bekomme ich leider gar keine Daten mehr angezeigt. Habe ich etwas falsch programmiert oder muss ich den unteren Teil weglassen? mfg Tm
long unsigned int ist ja für einen 29bit Identifier und unsigned int für einen 11bit Identifier oder liege ich da falsch??
so es funktioniert jetzt doch ;-) Vielen dank an Joachim Seifert.. Problem war das ich den Identifier in HEX eingegeben habe und nicht in DEZ.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.