Estoy utilizando el Arduino Uno , CAN bus shield y OBDII to DB9 Cable utilizando sus bibliotecas proporcionadas . Solo pude inicializarlo.
Lecturas :
Mientras está conectado al automóvil:
- CAN-High: 2.7 V - 3.0 V
- CAN-bajo: 2.4 V - 2.7 V
Mientras no esté conectado al automóvil:
- CAN-High: ~ 2.4 V
- CAN-bajo: ~ 2.5 V
Nota: en ambos casos, el Arduino está conectado a mi PC a través de USB (para la depuración).
Código de muestra:
#include <SoftwareSerial.h> //Software serial port
#include <Canbus.h>
#define CBRxD 5 // CAN BUS RX
#define CBTxD 4 // TX
#define DEBUG_ENABLED 1
char buffer[512]; //Data will be temporarily stored to this buffer before being written to the file
char tempbuf[15];
char lat_str[14];
char lon_str[14];
int LED2 = 7;
int LED3 = 8;
boolean scan = true;
SoftwareSerial canbusSerial(CBRxD, CBTxD);
void setup() {
Serial.begin(9600);
canbusSerial.begin(4800);
pinMode(0, INPUT);
pinMode(BTTxD, OUTPUT);
pinMode(LED2, OUTPUT);
pinMode(LED3, OUTPUT);
digitalWrite(LED2, LOW);
digitalWrite(LED3, LOW);
setupCanbus();
}
void loop() {
char recvChar;
if (canbusSerial.available()) { // Check if there's any data sent from the remote CAN bus shield
recvChar = canbusSerial.read();
Serial.print("CAN: "+recvChar);
}
if (scan) {
digitalWrite(LED3, HIGH);
if(Canbus.ecu_req(ENGINE_RPM,buffer) == 1) { /* Request for engine RPM */
Serial.println(buffer); /* Display data on Serial Monitor */
}
Serial.println(buffer);
if(Canbus.ecu_req(VEHICLE_SPEED,buffer) == 1) {
Serial.println(buffer);
}Serial.println(buffer);
if(Canbus.ecu_req(ENGINE_COOLANT_TEMP,buffer) == 1) {
Serial.print(buffer);
}Serial.println(buffer);
if(Canbus.ecu_req(THROTTLE,buffer) == 1) {
Serial.println(buffer);
}
Serial.println(buffer);
// Canbus.ecu_req(O2_VOLTAGE,buffer);
digitalWrite(LED3, LOW);
delay(100);
}
}
void setupCanbus() {
while (!Canbus.init(CANSPEED_250)) {
Serial.println("CAN Init");
}
Serial.println("CAN Init OK");
delay(1000);
}