Can Bus Daten filtern

Gast #4016401
Lesenswert?
• ▲
▼
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
Gast #4016449
Lesenswert?
• ▲
▼
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.
Gast #4016484
Lesenswert?
• ▲
▼
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

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.