Can Bus Daten filtern

Gast #4016401
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
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
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

Eine eigene Frage? Dieser Thread ist über 11 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.