Hallo,
ich hoffe ihr könnt mir helfen.
In meinem Projekt geht es darum NOx-Werte zu messen und diese wiederum auf eine SD-Karte zu speichern.
Meine verwendeten Teile:
- Arduino UNO
- NOx –Sensor
- Bluetooth shield HC-05
- Seedstudio CAN-Bus shield (29 bit extented identifier)
- Adafruit data logger shield+SD Card
Der Sensor ist mit CAN_h und CAN_l des CAN-Bus shields verbunden, die Spannungsversorgung des Sensors ist von einem Netzteil.
So weit so gut, doch leider bin ich ein totaler Anfänger, wenn es um den CAN-Bus geht.
Folgendes Programm habe ich getestet:
// demo: CAN-BUS Shield, receive data with check mode
// send data coming to fast, such as less than 10ms, you can use this way
// loovee, 2014-6-13
#include <SPI.h>
#include "mcp_can.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.begin(9600);
START_INIT:
if(CAN_OK == CAN.begin(CAN_250KBPS)) // init can bus : baudrate = 250k
{
Serial.println("CAN BUS Shield init ok!");
}
else
{
Serial.println("CAN BUS Shield init fail");
Serial.println("Init CAN BUS Shield again");
delay(100);
goto START_INIT;
}
}
unsigned char stmp[8] = {0, 1, 2, 3, 4, 5, 6, 7};
void loop()
{
unsigned char len = 0;
unsigned char buf[8];
if(CAN_MSGAVAIL == CAN.checkReceive()) // check if data coming
{
CAN.readMsgBuf(&len, buf); // read data, len: data length, buf: data buf
unsigned long canId = CAN.getCanId();
Serial.println("-----------------------------");
Serial.print("get data from ID: ");
Serial.println(canId, HEX);
for(int i = 0; i<len; i++) // print the data
{
Serial.print(buf[i]);
Serial.print("\t");
}
Serial.println();
// send data: id = 0x00, standart flame, data len = 8, stmp: data buf
CAN.sendMsgBuf(0xFEDF, 0, 4, stmp);
delay(100); // send data per 100ms
}
}
/*********************************************************************************************************
END FILE
*********************************************************************************************************/
Die richtige Baudrate habe ich eingestellt (250k)
Ich empfange folgende Nachricht am PC.
Am Serial Monitor kommt immer:
Get data from ID:18F00F52
255 255 255 255 255 127 31 31
Interpretiere ich das Status-Byte richtig? (ich nehme an, Byte 4 aus „Overview Transmit signals“):
Bit S3 S2 S1 S0
31 O2-signal not valid NOx-signal not valid Not available Not available
127 O2-signal vaild Not available Not available Not available
255 Not available Not available Not available Not available
Wie kann ich dem Sensor ein Start signal geben und wie bekomme ich die Messwerte?
Im Anhang ist das Datenblatt vom NOx-Sensor mit dem transfer protocol & receive signals.
Schon mal Danke für die Antworten!
Conti UniNOx12V_spec_11 03 08.pdf (876 KB)