Ясно. Просто в списке скоростей передачи не указана 10400, а на РС, знаю, мучаются с установкой такой скорости. Значит с Ардуино легче.
Вид для печати
А по протоколу ssm1 (старые субару) кто-нибудь подключал ардуину?
Есть информация по подключению к nissan. Известно что подключение производится в моем случае по протоколу ISO-14230 (fast init). Использую вот такой алгоритм:
1. на выход K-line подаю HIGH не менее 300 мс
2. на выход K-line подаю LOW 25 мс
3. на выход K-line подаю HIGH 25 мс
4. далее StartCommunication на скорости 10400
5. прием ответа
Но ECU ответа не дает. Знающие, помогите в чем может быть проблема.Код HTML:#include <LiquidCrystal.h>
#define K_IN 0
#define K_OUT 1
//create object to control an LCD.
enum { LCD_WIDTH = 16, LCD_HEIGHT = 2 };
LiquidCrystal lcd(7, 6, 4, 5, 2, 3);
void setup() {
pinMode(K_IN, INPUT);
pinMode(K_OUT, OUTPUT);
}
void loop()
{
lcd.clear();
lcd.print("ECU init...");
obdConnect();
delay(1000);
}
void obdConnect()
{
int n,i;
byte buf[20];
buf[0]=0x81;
buf[1]=0x10;
buf[2]=0xFC;
buf[3]=0x81;
buf[4]=0x0E;
serial_tx_off();
serial_rx_off();
digitalWrite(K_OUT, HIGH);
delay(300);
digitalWrite(K_OUT, LOW);
delay(25);
digitalWrite(K_OUT, HIGH);
delay(25);
Serial.begin(10400); // switch now to 10400 bauds
for(i=0;i<5;i++)
{
Serial.write(buf[i]);
}
lcd.clear();
n=Serial.available();
if (i > 0)
{
for (i=0;i<n;i++)
{
buf[i]=Serial.read();;
}
lcd.clear();
lcd.print("OK");
}
else
{
lcd.clear();
lcd.print("Error");
}
}
void serial_rx_off() {
UCSR0B &= ~(_BV(RXEN0));
}
void serial_tx_off() {
UCSR0B &= ~(_BV(TXEN0));
delay(20);
}
Есть сомнения в моменте переключения на скорость 10400. Может быть проблема в самом подходе к решению задачи?
В представленном выше есть некоторые неточности. А паузу надо выдержать между записью запроса и приемом ответа.
С новой библиотекой Softwareserial на скорости 10400 не работает. Чтобы заработало надо отредактировать SoftwareSerial.cpp вставив строчку для частоты 16МГц { 10400, 106, 218, 218, 215, }. Проверено, работает.
А как часто и как быстро можно получать данные с OBD-II ?
Каждый ли раз при запросе данных нужно осуществлять вход? или войдя однажды можно запросы сколь угодно долго обрабатывать?
Данные получаются в соответствии со скоростью обмена. Как запросил - так и получил ответ. Другой вопрос - сколько времени потратишь на обработку этих ответов и как много параметров будешь запрашивать? Запросы надо посылать в цикле и в зависимости от длительности периода получаешь динамику изменения параметров.
А можно с k-line при подключенном бортовом компьютере Мультитроникс параллельно еще и ардуину прицепить? не будут они друг дружке мешать?