Go Down

Topic: CAN-BUS shield send data problem (Read 444 times) previous topic - next topic


Hi all,

I have a seeed canbus shield v2.0 attached on an arduino uno.
My project is to send several data from sensors (analog/digital/i2c) from arduino to an external ECU via can bus protocol.

At the moment I have managed to connect the shield using can L & can H and declare an identifier as 0 (zero) running a send example from shield and I can see that there is a communication between the two devices, which is good.
Although, I cannot send the correct data.
To make it easier I have just loaded a temp/hum DHT11 sketch merged with some code lines of the shield's send example.

Any idea how to declare and send the temperature or humidity via can bus? I have tried several combinations but still nothing.
I don't have any experience on can bus, so any comment would be helpful.
You can find attached the code.


Code: [Select]
#include "DHT.h"

#define DHTPIN 2     // what pin we're connected to

// Uncomment whatever type you're using!
#define DHTTYPE DHT11   // DHT 11
//#define DHTTYPE DHT22   // DHT 22  (AM2302)
//#define DHTTYPE DHT21   // DHT 21 (AM2301)

// Connect pin 1 (on the left) of the sensor to +5V
// Connect pin 2 of the sensor to whatever your DHTPIN is
// Connect pin 4 (on the right) of the sensor to GROUND
// Connect a 10K resistor from pin 2 (data) to pin 1 (power) of the sensor


#include <mcp_can.h>
#include <SPI.h>

// the cs pin of the version after v1.1 is default to D9
// v0.9b and v1.0 is default D10
const int SPI_CS_PIN = 9;

MCP_CAN CAN(SPI_CS_PIN);                                    // Set CS pin

void setup()
    Serial.println("DHTxx test!");


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

unsigned char smtp[8] = {0,1,2,3,4,5,6,7};
void loop()
    // Reading temperature or humidity takes about 250 milliseconds!
    // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
    float h = dht.readHumidity();
    float t = dht.readTemperature();

    // check if returns are valid, if they are NaN (not a number) then something went wrong!
    if (isnan(t) || isnan(h))
        Serial.println("Failed to read from DHT");
        Serial.print("Humidity: ");
        Serial.print(" %\t");
        Serial.print("Temperature: ");
        Serial.println(" *C");

    CAN.sendMsgBuf(0, 0, 8, smtp);
    delay (10);

Go Up