Seeed Studio Canbus shild Frage

Hi
Habe ein Can shild von Seeed studio. Will auf meinen Audi Radio candaten senden, klappt soweit auch gut wenn ich den Radio ausgebaut habe. Ich benutze einen Drehimpulsgeber für Lauter und leiser.
Versuch ich das dann im Auto und drehe zb 1 hoch, dann sendet es irgendwie und ca in 100ms tackt.
Verwende den Infotaiment bus wo nur Radio und boardcomputer verbunden sind.
Hoffe einer kann helfen.
Danke
lg

Orkane:
...Ich benutze einen Drehimpulsgeber für Lauter und leiser.
Versuch ich das dann im Auto und drehe zb 1 hoch, dann sendet es irgendwie und ca in 100ms tackt.
Verwende den Infotaiment bus wo nur Radio und boardcomputer verbunden sind.
Hoffe einer kann helfen.

Was sendet, wann und wo in 100ms Takt ?
Wie sollen wir helfen, wenn du keine genauen Angaben machst.
Und zeige uns deinen Sketch in Code-Tags.

Evtl. treten auch Probleme mit der Betriebsspannung auf.
Spannung zu hoch, zu niedrig oder mit Störungen.

Hi HotSystems

// demo: CAN-BUS Shield, send data
#include <mcp_can.h>
#include <SPI.h>
#include <Encoder.h>


const int SPI_CS_PIN = 9;

MCP_CAN CAN(SPI_CS_PIN);                                    // Set CS pin


unsigned long previousMillis = 0;
Const long interval = 500;

void setup()
{
    Serial.begin(115200);

    while (CAN_OK != CAN.begin(CAN_500KBPS))              // init can bus : baudrate = 100k
    {
        Serial.println("CAN BUS Shield init fail");
        Serial.println(" Init CAN BUS Shield again");
        delay(100);
    }
    Serial.println("CAN BUS Shield init ok!");
}

unsigned char volup[2] = {0x3A, 0x01};
unsigned char voldown[2] = {0x3A, 0x00};
unsigned char alive[2] = {0x39, 0x00};

long oldPosition  = -999;

void loop()
{   

   unsigned long currentMillis = millis ();
    if (currentMillis - previousMillis >= interval) {
      previousMillis = currentMillis
    CAN.sendMsgBuf(0x5c3, 0, 2, alive);      // Sende alive if alle 500ms
    }
    long newPosition = myEnc.read();
  int differenz=newPosition-oldPosition;
  if (differenz==1) CAN.sendMsgBuf(0x5c3, 0, 2, volup);
  else if (differenz==-1) CAN.sendMsgBuf(05c3, 0, 2, voldown);
  oldPosition = newPosition; 
}

Der code funktioniert wenn ich nur auf den Radio sende einwandfrei.
Wenn dann der Tacho bzw bordcomputer auch auf dem can bus hängt und ich drehe zb rechts dann dann sendet das shild durchgehend volup und zwischendrin mal voldown bis ich reset drücke.
Hoffe jetzt is verständlicher.
Lg

Orkane:
...Der code funktioniert wenn ich nur auf den Radio sende einwandfrei.
Wenn dann der Tacho bzw bordcomputer auch auf dem can bus hängt und ich drehe zb rechts dann dann sendet das shild durchgehend volup und zwischendrin mal voldown bis ich reset drücke.
Hoffe jetzt is verständlicher.

OK, da muss ich hier passen.

Vermutlich "funkt" der Boardcomputer dazwischen.

Kannst du denn eindeutig feststellen, wo die Impulse herkommen ?

Lass dir das doch mal im Seriellen Monitor anzeigen.

Ja irgendwas macht der tacho.

long newPosition = myEnc.read();
  int differenz=newPosition-oldPosition;
  if (differenz==1) CAN.sendMsgBuf(0x5c3, 0, 2, volup) && Serial.println("LAUTER");
  else if (differenz==-1) CAN.sendMsgBuf(05c3, 0, 2, voldown) && Serial.println("LEISER");
  oldPosition = newPosition;

Lass mir auch immer das was gesendet wird im Serielln Monitor anzeigen.
Versteh nur nicht wie das dann einfluss auf den code hat wenn dann auch der tacho dran hängt. Das schild sollte eigentlich nur senden? ::slight_smile:

Orkane:
Ja irgendwas macht der tacho.

long newPosition = myEnc.read();

int differenz=newPosition-oldPosition;
  if (differenz==1) CAN.sendMsgBuf(0x5c3, 0, 2, volup) && Serial.println("LAUTER");
  else if (differenz==-1) CAN.sendMsgBuf(05c3, 0, 2, voldown) && Serial.println("LEISER");
  oldPosition = newPosition;




Lass mir auch immer das was gesendet wird im Serielln Monitor anzeigen.
Versteh nur nicht wie das dann einfluss auf den code hat wenn dann auch der tacho dran hängt. Das schild sollte eigentlich nur senden? ::)

Ich sehe keine Anweisung, die Daten auf dem seriellen Monitor anzeigen.
Nur lauter und leiser, aber nicht was der CAN-Bus ausgibt.

Und wenn doch, zeigst du die auch an, wenn du das Teil im Auto verbaut hast ?

Edit:

Hast du bei deinen Messungen den Motor laufen ?

Ja zum Versuch lass ich mir das auch anzeigen. Ist das falsch wenn der serielle Monitor mitläuft beim senden?
Ne hab nur zündung an. Wenn der motor läuft kommt noch das Geschwindigkeit Signal dazu was auf den radio geschickt wird.
Der radio sendet nur die titelanzeige und navi wenn aktiv. Der tacho sendet nur die uhrzeit und Geschwindigkeit.

Hi Hotsystems
Jetzt klapps. Hab einen fehler im code gehabt.
Habe die daten von drehimpulsgeber in den timer reingeschmissen.
Lg

Orkane:
Hi Hotsystems
Jetzt klapps. Hab einen fehler im code gehabt.
Habe die daten von drehimpulsgeber in den timer reingeschissen.
Lg

Prima, das freut mich und danke für die Rückmeldung.