PCCar.ru - Ваш автомобильный компьютер

Вернуться   PCCar.ru - Ваш автомобильный компьютер > MP3Car ТехИнфа > Общение с машиной

Ответ
 
Опции темы Поиск в этой теме
Старый 05.02.2016, 14:46   #171
T_r_D
Старший Пользователь
 
Регистрация: 03.07.2015
Регион: 77, 97, 99, 177
Сообщений: 372
T_r_D is a jewel in the roughT_r_D is a jewel in the roughT_r_D is a jewel in the rough
По умолчанию

Вот окончательный скетч который точно работает с одной строчкой, тоесть First Frame + Consecutive Frame. У меня больше 1 Consecutive Frame не идёт с моим дисплеем.
PHP код:
#include <SPI.h>
#include "mcp_can.h"
MCP_CAN CAN(10);
unsigned char len 0;
unsigned char buf[8];
INT32U canId 0x000// идентификаторы могут быть 11-ти или 29-битные

int LengthP
int DataBuf[100];
int DataBufSize;

void setup()
{
    
Serial.begin(38400);
    
pinMode(9INPUT);
delay (7000);
START_INIT:
    if(
CAN_OK == CAN.begin(CAN_125KBPS,MCP_8MHz))
    {
Serial1.println("Init OK!");}
    else
    {
Serial1.println("Init fail");delay(100);goto START_INIT;}
}


void loop()
{
//  if(CAN_MSGAVAIL == CAN.checkReceive()) // check if data coming
if(!digitalRead(9))
    {
        
CAN.readMsgBuf(&lenbuf);
        
canId CAN.getCanId();
         
          if(
canId == 293// 125HEX
          
{
            if ((
buf[0] >> 4) == 0x01)
            {
              
LengthP = ((buf[0] & 0x0F) * 256 buf[1]) - (len 2);
              
DataBufSize len;
              for (
int i=0i<len;i++){
              
DataBuf[i] = buf[i];
              }
            }

            if(((
buf[0] >> 4) == 0x02) && LengthP 0){
              
int Length2 LengthP len;
              if (
Length2 len){
                for (
int i 0len;i++){
                
DataBuf[DataBufSize] = buf[i];
                }
                
DataBufSize DataBufSize len;
              }
              else{
                for (
int i=0LengthP;i++){
                
DataBuf[DataBufSize] = buf[i];
                }
                
DataBufSize DataBufSize LengthP;
                
                for (
int i=0DataBufSize;i++){
                 
Serial.print(DataBuf[i], HEX);
                 
Serial.print(" "); 
                }
                 for (
int i=0DataBufSize;i++){
                 
Serial.print(char(DataBuf[i]));
                }
                
Serial.println(" ");
              }
            }  
          
          }
    }

Выдаёт он вот такое:
10 D 10 1D 12 10 4D 41 21 58 49 4D 55 4D 20 MA!XIMUM
10 D 10 1D 11 10 20 48 21 49 54 20 46 4D 20 H!IT FM
10 D 10 1D 10 10 46 4D 21 20 38 39 2E 39 20 FM! 89.9
10 D 10 1D F 10 45 75 21 72 6F 70 61 20 20 Eu!ropa
10 D 10 1D E 10 44 4F 21 50 4F 2A 48 4F 45 DO!PO*HOE
10 D 10 1D D 10 20 44 21 41 43 48 41 20 20 D!ACHA
10 D 10 1D C 10 20 43 21 4F 4D 45 44 59 20 C!OMEDY
10 D 10 1D B 10 20 42 21 4F 43 54 4F 4B 20 B!OCTOK
10 D 10 1D A 10 42 45 21 53 54 20 46 4D 20 BE!ST FM
10 D 10 1D 9 10 42 45 21 43 48 41 20 46 4D BE!CHA FM
10 D 10 1D 8 10 61 6E 21 73 6F 6E 2E 66 6D an!son.fm
10 D 10 1D 7 10 20 39 21 38 2E 34 20 46 4D 9!8.4 FM
10 D 10 1D 6 10 39 36 21 2C 34 20 46 4D 20 96!,4 FM
10 D 10 1D 5 10 20 39 21 35 2E 36 20 46 4D 9!5.6 FM
10 D 10 1D 4 10 39 30 21 2E 33 20 46 4D 20 90!.3 FM
10 D 10 1D 3 10 38 38 21 2E 37 20 46 4D 20 88!.7 FM
10 D 10 1D 2 10 20 20 21 38 38 2E 33 20 20 !88.3
10 D 10 1D 1 10 31 30 21 37 2E 38 20 46 4D 10!7.8 FM
10 D 10 1D 0 10 31 30 21 36 2C 36 20 46 4D
То что нечитабельными символами в ascii сюда не копируется, но между хексом и нормальным текстом то, что не перевелось в ascii.
Восклицательный знак это 0 байт Consecutive Frame.

При нажатии кнопки LIST при проигрование диска на дисплее отображаются номер трека и звёздочки за место текста (ну его и нет), но в этот ID это почему-то не попадает....
T_r_D вне форума   Ответить с цитированием
Старый 06.02.2016, 18:48   #172
T_r_D
Старший Пользователь
 
Регистрация: 03.07.2015
Регион: 77, 97, 99, 177
Сообщений: 372
T_r_D is a jewel in the roughT_r_D is a jewel in the roughT_r_D is a jewel in the rough
По умолчанию

Итак, у меня классные новости!
Я купил магнитолу и дисплей, кинул их на стол, отсканировал и нашёл то, что мне не хватало.
Нашёл где прячится иконка LOUD, а так же подошёл к событию которое позволит выкинуть дисплей штатный нафиг.
Вот что я накопал:
ID от дисплея
0 <0,0,80,1> через секунд 30 после включения
4 <0,F,F0,0,0,80,1> через секунд 30 после включения
6 <FF,FF,7F,FF,0,0> через секунд 30 после включения
5E0 Один раз при подключении питания магнитолы.
1ED неизменен
167 неизменен
15B неизменен
525 неизменен
5E5 неизменен
DF Отвечае открыто меню или нет: 10,0,50 открыто, 90,0,70 не открыто.
Если не отреагировать на нажатие кнопки MENU изменением битов,
то магнитола не отреагирует и будет кнопками также переключать станции или треки.

Всего 10 ID. Скорее всего какие-то отвечают за набор функций в дисплее.
Это будет просто проверить отсканировав мой строчный дисплей (этот графический).
T_r_D вне форума   Ответить с цитированием
Старый 07.02.2016, 12:43   #173
T_r_D
Старший Пользователь
 
Регистрация: 03.07.2015
Регион: 77, 97, 99, 177
Сообщений: 372
T_r_D is a jewel in the roughT_r_D is a jewel in the roughT_r_D is a jewel in the rough
По умолчанию

Так ребят, извиняюсь.
Вчера не было времени на детальный анализ ID.
Исправляюсь

0xDF Отвечае открыто меню или нет и состояние его элементов.
За открытие меню отвечает второй байт.
50HEX 0101 0000 закрыто
70HEX 0111 0000 открыто

Первый байт отвечает за выбор элемента.
Отображает выбраный элемент в реальном времени если меню вызвано через OK
или последний элемент с которым производились действия если меню вызвано через MENU.
При повторном входе в меню любой кнопкой сбрасывается на первый элемент.
1HEX 00000001 Alternative frequencies
3HEX 00000011 Regional mode (00000010, но не включается без RDS)
24HEX 00100100 Radio-text information
42HEX 01000010 Track random play

Нулевой байт отвечает сразу за 2 функции.
при неактивном меню
10HEX 00010000 Выход из меню по таймауту или ESC
11HEX 00010001 элемен был деактивирован
12HEX 00010010 элемент был активирован
при активном
90HEX 10010000 нахождение в меню в предидущий вход действий с элементами не выполнялось
91HEX 10010001 элемент был активирован - передаётся во время нажатия OK
92HEX 10010010 элемент был деактивирован - передаётся во время нажатия OK

Тоесть если вы попали в меню через OK, то положение в нём можно отследить, если через кнопку MENU, то нет.

Последний раз редактировалось T_r_D; 07.02.2016 в 14:16.
T_r_D вне форума   Ответить с цитированием
Старый 08.02.2016, 13:19   #174
T_r_D
Старший Пользователь
 
Регистрация: 03.07.2015
Регион: 77, 97, 99, 177
Сообщений: 372
T_r_D is a jewel in the roughT_r_D is a jewel in the roughT_r_D is a jewel in the rough
По умолчанию

И ещё раз прошу помощи с мультифреймом.
Собрал пакет и не пойму как теперь его разбить на части.
Вот пример:
PHP код:
10 28 10 1E 0 41 2D 45 >>> -
21 4E 45 52 47 59 2D B0 
>>> N E R G Y ° 
22 31 30 33 2E 30 20 46 
>>> 1 0 3 0   F 
23 4D 80 20 20 38 38 2E 
>>> M Ђ     8 8 
24 33 20 20 80 39 30 2E >>> 3     Ђ 9 0 
25 33 20 46 4D 20 B0 2E >>> 3   F M   ° 
10 28 10 1E 0 41 2D 45 4E 45 52 47 59 2D B0 31 30 33 2E 30 20 46 4D 80 20 20 38 38 2E 33 20 20 80 39 30 2E 33 20 46 4D 20 B0 0 (     A-ENERGY-°103.0 FMЂ  88.3  Ђ90.3 FM ° 
Присутствует паразитный(а может и нет, а информационный) символ 80(Ђ).
На экране БК выглядит так:
-ENERGY- PTY TA
103.0 FM
88.3
90.3 FM PTY TA

И не понятно ещё где хранятся данные о PTY, но оно отображается.

B0 ° это признак TA на станции с РДС, а вот пакет для станций без РДС, но с ТА. там 0. И как его выуживать тоже не понятно. Единственное он всегда в плотную к следующей надписи идёт
PHP код:
10 28 10 1E C 41 39 33 >>> 9 3 
21 2E 36 30 0 0 0 10 
>>> . 6 0 
22 39 34 2E 38 30 0 0 
>>> 9 4 8 0 
3 0 30 39 35 2E 32 30 
>>>      0 9 5 2 0
24 0 0 0 10 39 35 2E 
>>>      9 5 .
25 36 30 0 0 0 10 2E >>> 6 0     .
10 28 10 1E C 41 39 33 2E 36 30 0 0 0 10 39 34 2E 38 30 0 0 0 30 39 35 2E 32 30 0 0 0 10 39 35 2E 36 30 0 0 0 10 0 (A93.60    94.80    095.20      95.60 
T_r_D вне форума   Ответить с цитированием
Старый 08.02.2016, 13:56   #175
autowp
Пользователь
 
Аватар для autowp
 
Регистрация: 13.12.2012
Возраст: 41
Город: Москва
Регион: 77, 97, 99, 177
Машина: Peugeot 407 Coupe
Сообщений: 82
autowp is on a distinguished road
По умолчанию

10 28 в собранном сообщение быть не должно.

>> Присутствует паразитный(а может и нет, а информационный) символ 80(Ђ).

Конечно он не паразитный. Что-то он в себе несёт, но покуда вам нет в нем нужды, игнорируйте этот байт.

Вторая посылка на первый взгляд выглядит так же, как первая. не понятен вопрос.

У всех данных фиксированные позиции в посылках. Иначе и быть не может. Если в одно сообщение информация идет 5ым байтом, то и в другом она будет 5ым байтом
autowp вне форума   Ответить с цитированием
Старый 08.02.2016, 14:29   #176
T_r_D
Старший Пользователь
 
Регистрация: 03.07.2015
Регион: 77, 97, 99, 177
Сообщений: 372
T_r_D is a jewel in the roughT_r_D is a jewel in the roughT_r_D is a jewel in the rough
По умолчанию

Цитата:
Сообщение от autowp Посмотреть сообщение
10 28 в собранном сообщение быть не должно.

>> Присутствует паразитный(а может и нет, а информационный) символ 80(Ђ).

Конечно он не паразитный. Что-то он в себе несёт, но покуда вам нет в нем нужды, игнорируйте этот байт.

Вторая посылка на первый взгляд выглядит так же, как первая. не понятен вопрос.

У всех данных фиксированные позиции в посылках. Иначе и быть не может. Если в одно сообщение информация идет 5ым байтом, то и в другом она будет 5ым байтом
Я не понял.
Выглядят-то они идентично. Вопрос как разбить на строки?
Специально дал то, что отражается на дисплее. Ведь сообщения которые в разных посылках в одной строчке на дисплеее.
Как искать разделение?

А, всё! ДОГНАЛ!
Получается что мои сообщения всегда занимают 9 байт! Счёт идёт с 6 байта первого пакета!

Это утверждение не верно!
Цитата:
У всех данных фиксированные позиции в посылках. Иначе и быть не может. Если в одно сообщение информация идет 5ым байтом, то и в другом она будет 5ым байтом
T_r_D вне форума   Ответить с цитированием
Старый 08.02.2016, 17:49   #177
T_r_D
Старший Пользователь
 
Регистрация: 03.07.2015
Регион: 77, 97, 99, 177
Сообщений: 372
T_r_D is a jewel in the roughT_r_D is a jewel in the roughT_r_D is a jewel in the rough
По умолчанию

так ребят, не наступите на грабли! Я час потратил чтоб разобраться! Символы переведённые способом char(), переводятся все и получается что даже не видимые символы могут потом складываться с видимыми давая чудесные результаты!
вот окончательный код сборки строки.
через | выводится что поддерживает данная станция.
PHP код:
          if(canId == 293// 125HEX
          
{
            if ((
buf[0] >> 4) == 0x01)
            {
              
LengthP = ((buf[0] & 0x0F) * 256 buf[1]) - 6;
              
DataBufSize 2;
              
DataBuf[0]=buf[6];
              
DataBuf[1]=buf[7];
            }    

            if(((
buf[0] >> 4) == 0x02) && LengthP 0){
              if (
LengthP 8)
              {
                for (
int i=18;i++) DataBuf[DataBufSize 1] = buf[i];
                
DataBufSize DataBufSize 7;
                
LengthP LengthP 7;
              }
              else{
                for (
int i=1LengthP+1;i++) DataBuf[DataBufSize 1] = buf[i];
                
DataBufSize DataBufSize LengthP;
                
                
//OUT OF MESSAGE
                
for (int c=0DataBufSize/9;c++){
                    
String strmsg;
                  for (
int i9*c< (9*c)+8;i++){
                    if (
DataBuf[i] > 31strmsg strmsg char(DataBuf[i]);
                    else  
strmsg strmsg " ";
                  }
                  
strmsg strmsg "|" String(DataBuf[(9*c)+8]);
                  
Message[c] = strmsg;
                }
                for (
int i=0DataBufSize/9;i++) Serial.println(Message[i]);
                }
            }  
          
          } 
T_r_D вне форума   Ответить с цитированием
Старый 09.02.2016, 13:51   #178
Dmitry8
Пользователь
 
Регистрация: 10.12.2013
Регион: 63, 163
Сообщений: 53
Dmitry8 is on a distinguished road
По умолчанию

T_r_D, а как вы собираетесь инсталлировать планшет в машину? Есть уже какой-то план? Пилить пластик будете? Заглушки штатные будут?
Dmitry8 вне форума   Ответить с цитированием
Старый 09.02.2016, 14:30   #179
T_r_D
Старший Пользователь
 
Регистрация: 03.07.2015
Регион: 77, 97, 99, 177
Сообщений: 372
T_r_D is a jewel in the roughT_r_D is a jewel in the roughT_r_D is a jewel in the rough
По умолчанию

Цитата:
Сообщение от Dmitry8 Посмотреть сообщение
T_r_D, а как вы собираетесь инсталлировать планшет в машину? Есть уже какой-то план? Пилить пластик будете? Заглушки штатные будут?
Ни чего видимого пилить не буду. Из невидимого рамку изнутри изрядно вырезать надо будет и 4 отверстия для крепления прижимной "пластины" планшета к рамке.

А пластина в кавычках потому что это площадка из оргстекла которая одновременно будет и прижимать планшет к рамке и на неё же крепиться моя плата.

А сама рамка вот
http://www.ebay.com/itm/Car-Radio-Fr...ZUAE-B&vxp=mtr

Только отверстие под SD уберу и затяну в плёнку под карбон.
T_r_D вне форума   Ответить с цитированием
Старый 09.02.2016, 14:36   #180
Dmitry8
Пользователь
 
Регистрация: 10.12.2013
Регион: 63, 163
Сообщений: 53
Dmitry8 is on a distinguished road
По умолчанию

Я думал у вас Ситроен С4 b7, как у меня. Ищу решение чтобы ничего не пилить, планшет под нужный размер пока найти не удалось.
Dmitry8 вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.



Часовой пояс GMT +4, время: 23:36.


Работает на vBulletin® версия 3.8.4.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot