Estoy utilizando el Arduino Uno , Pantalla de bus CAN y Cable OBDII a DB9 utilizando sus bibliotecas proporcionadas . Sólo pude inicializarlo.
Lecturas:
Mientras esté conectado al coche:
- CAN-Alto: 2,7 V - 3,0 V
- CAN-Low: 2,4 V - 2,7 V
Mientras no esté conectado al coche:
- CAN-Alto: ~2,4 V
- CAN-Bajo: ~2,5 V
Nota: en ambos casos el Arduino está conectado a mi PC por USB (para depuración).
Código de ejemplo:
#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);
}