PDA

Просмотр полной версии : Прошу помощи с кан шиной


demtro
28.04.2017, 13:23
адаптер собран по схеме от ув. lti1 подключен к ардуино нано, залит следующий скетч:
#include <SPI.h>
#include <mcp2515.h>

struct can_frame canMsg;
MCP2515 mcp2515(10);

void setup() {
Serial.begin(115200);
SPI.begin();

mcp2515.reset();
mcp2515.setBitrate(CAN_33KBPS);
mcp2515.setNormalMode();

Serial.println("------- CAN Read ----------");
Serial.println("ID DLC DATA");
}

void loop() {

if (mcp2515.readMessage(&canMsg) == MCP2515::ERROR_OK)
{
if (canMsg.can_id = 0x10438040, HEX) //фильтр по ID, при необходимости раскомментировать
{ //фильтр по ID, при необходимости раскомментировать
Serial.print("[");
Serial.print((canMsg.can_id & 0x1FFFFFFF), HEX);
Serial.print("] [");
Serial.print(canMsg.can_dlc, HEX);
Serial.print("] ");

for (int i = 0; i<canMsg.can_dlc; i++) {
Serial.print(canMsg.data[i], HEX);
Serial.print(" ");

}
Serial.println();
}
}
}
машина шевроле круз 2013 года шина GMLAN низкоскооростная работает на частоте 33.3kbps данные с ардуины идут. В интернете нашел значения кнопок руля:
Если вдруг кому интересны пакеты кнопок на руле в Cruze:
10 43 80 40 00 — Unpress (All)
10 43 80 40 01 — Vol Up
10 43 80 40 02 — Vol Down
10 43 80 40 03 — Next
10 43 80 40 04 — Prev
10 43 80 40 05 — SRC
10 43 80 40 07 — Mute
Но не могу понять как теперь сделать из всего этого адаптер кнопок руля для планшета, буду очень благодарен за помощь. Так же в этой шине есть данные о температуре за бортом, в последствии очень хотелось бы найти и их.
Кое как разобрался с фильтром по адресу (возможно не совсем правильно) пример получаемых данных приложил в архиве.

lti1
28.04.2017, 17:20
По какому ID должны прилетать значения кнопок?

demtro
28.04.2017, 17:52
На сколько я понял это id 10 43 80 40

lti1
29.04.2017, 13:22
Попробуй этот скетч, что будет происходить при нажатии на разный кнопки.
#include <SPI.h>
#include <mcp2515.h>

struct can_frame canMsg;
MCP2515 mcp2515(10);

void setup() {
Serial.begin(115200);
SPI.begin();

mcp2515.reset();
mcp2515.setBitrate(CAN_33KBPS);
mcp2515.setNormalMode();

Serial.println("------- CAN Read ----------");
Serial.println("ID DLC DATA");
}

void loop() {
if (mcp2515.readMessage(&canMsg) == MCP2515::ERROR_OK) {
if (canMsg.can_id == 0x10438040) //фильтр по ID, при необходимости раскомментировать
{ //фильтр по ID, при необходимости раскомментировать
Serial.print("[");
Serial.print((canMsg.can_id & 0x1FFFFFFF), HEX);
Serial.print("] ");
Serial.println(canMsg.data[0] & 0x07, HEX);
}
}
}

дмитрий 77
29.04.2017, 23:32
Есть альтернатива https://play.google.com/store/apps/details?id=com.theksmith.android.car_bus_interface

blogsylar
01.05.2017, 11:40
Есть альтернатива https://play.google.com/store/apps/details?id=com.theksmith.android.car_bus_interface

Далеко не на всех машинах работает, увы

demtro
01.05.2017, 20:10
данные пошли в таком виде

lti1
01.05.2017, 20:22
Если кнопки не нажимать последняя цифра всегда = 0?
[10438040] 0

demtro
01.05.2017, 21:47
Там данные идут постоянно, последний архив собран примерно за минуту, т.е если не нажимать ничего данные продолжают идти

lti1
01.05.2017, 21:57
Где Вы взяли информацию, что необходимо читать ID 0x10438040?

YAM1966
01.05.2017, 22:27
Все правильно, по ID 0x10438040 с DLC = 1 идут данные о нажатии кнопок.
Пока кнопка нажата - передается ее код, все кнопки отжаты - передается 0

Коды есть тут (http://pccar.ru/showthread.php?p=356427#post356427) для OPEL ASTRA.

demtro
01.05.2017, 22:34
Тут находил эту информацию ссыль (https://www.drive2.ru/l/1068748/)
Но как-то странно, кнопки телефона у меня нет, а 6 появляется в данных

demtro
03.05.2017, 17:39
Совместными усилиями с lti1 (точнее это полностью его заслуга) данные кнопок пошли с таким скетчем:

#include <can.h>
#include <SPI.h>
#include <mcp2515.h>

struct can_frame canMsg;
MCP2515 mcp2515(10);

void setup() {
Serial.begin(115200);
SPI.begin();

mcp2515.reset();
mcp2515.setBitrate(CAN_33KBPS);
mcp2515.setNormalMode();

Serial.println("------- CAN Read ----------");
Serial.println("ID DLC DATA");
}

void loop() {

if (mcp2515.readMessage(&canMsg) == MCP2515::ERROR_OK)
{
if ((canMsg.can_id & 0x1FFFFFFF) == 0x10438040) //фильтр по ID, при необходимости раскомментировать
{ //фильтр по ID, при необходимости раскомментировать
Serial.print("[");
Serial.print((canMsg.can_id & 0x1FFFFFFF), HEX);
Serial.print("] [");
Serial.print(canMsg.can_dlc, HEX);
Serial.print("] ");

for (int i = 0; i<canMsg.can_dlc; i++) {
Serial.print(canMsg.data[i], HEX);
Serial.print(" ");

}
Serial.println();
}
}
}

Библиотеку работающую на скорости 33kbps прикладываю.
Осталось только понять как организовать из этого адаптер для кнопок руля для планшета (или в моем случае управление цифровым потенциометром mcp41100 на котором у меня сидит управление магнитолой Sony.