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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.01.2016, 01:38   #121
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 Посмотреть сообщение
millis - это не задержка, а текущее время.
В нормальной программе delay быть не должно.
Я и написал что через.
Уже разобрался. Глюк компилятора однако.
Если нет пробела между переменными и знаком "-" почему-то бред был.

За библиотеку спасибо.


PS Я уже двигаюсь к завершению первоочередной задачи.
У меня остались только непонятные глюки при коннекте планшета к модулю. По неизвестным причинам и без всякой логики иногда при коннекте приложение вылетает с ошибкой.

Ну и не пойму ни как как сделать чтоб работало всё в фоне.
Поток создан, а всёравно при свёртывании приложения если не терминировать коннект сокета, то вываливается с ошибкой.
Надо тоже разобраться.
T_r_D вне форума   Ответить с цитированием
Старый 26.01.2016, 11:27   #122
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
По умолчанию

В связи с выходом новой версии драйвера у Фелча, вернулся на провод.
К проге прикрутил работу сервиса в фоне, окна сообщений поверх всего.

Купил планшет новый Lenovo tab 2. Вот его и буду использовать.
Скоро установка в машину будет.
T_r_D вне форума   Ответить с цитированием
Старый 01.02.2016, 00:46   #123
Dmitry8
Пользователь
 
Регистрация: 10.12.2013
Регион: 63, 163
Сообщений: 53
Dmitry8 is on a distinguished road
По умолчанию

Цитата:
Сообщение от T_r_D Посмотреть сообщение
В связи с выходом новой версии драйвера у Фелча, вернулся на провод.
Что за драйвера? И кто такой Фелч?
Dmitry8 вне форума   Ответить с цитированием
Старый 02.02.2016, 14:35   #124
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
По умолчанию

Это вот этот человек.
Где-то на форуме его так называли. Как его зовут на самом деле понятия не имею.
https://github.com/felHR85/UsbSerial

На самом деле дело было не в дровах, а в посылках. Если передавать с промикры в виде чисел, то не фига не работает. Нужно жёстко указать что передаём стринг.

Короче вот так надо передавать
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-битные

unsigned long time0 = -120;

//TRIP
//RPM|SPD|LPK|AVG.LPK|AVG_SPD|Trp|Tmp
//   /100 /10  /10                   делить на
int OUTLINES[] = {0,0,0,-1,-1,0,0,-1,-1,-1};
int OUTLINES2[] = {0,0,0,-1,-1,0,0,-1,-1,-1};

//Кнопки на руле
int SWSV 0;
       
//Меню аудио настроек
int AP 0;
int APV 0;
String AUDIOAUDIO2 ="0:0";

//Банды, частота
int RB 0;
float RFR 0;
String BANDFREQBANDFREQ2 "0:0";

//RDS
String RDS ="NO RDS";

void setup()
{
    
Serial1.begin(38400);
    
pinMode(9INPUT);
    
delay(10000);

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())
       
if(!digitalRead(9)) // пин 9 можно переназначить                         
       
{
       
CAN.readMsgBuf(&lenbuf);
       
canId CAN.getCanId();

//_________________________________TRIP___________________________________
          
if(canId == 182//0B6
          
{
          
OUTLINES[0] = (int)buf[0] << buf[1] >> 3//Обороты
          
OUTLINES[1] = ((int)buf[2] << buf[3]);         //скорость / 100
          
}

          if(
canId == 545//221
          
{
          
OUTLINES[2] = (int)buf[1] << buf[2];          //моментальный расход / 10, если -1 то показаний нет
          //ARCFL = (int)buf[3] << 8 | buf[4];                //Километры на остатке топлива
          
}

          if(
canId == 673//0B6
          
{
          
OUTLINES[3] = (int)buf[3] << buf [4];         //Расход на 100км /10
          
OUTLINES[4] = buf[0];                                     //Средняя скорость
          
OUTLINES[5] = ((int)buf[1] << buf [2]);       //Трип
          
}

          if(
canId == 246//0F6
          
{
          
OUTLINES[6] = (buf[6] / 2) - 39;                           //Температура
          //Odometr = ((unsigned long)buf[2] << 16 | (unsigned int)buf[3] << 8 | buf[4])/10; //Там есть десятые километра
          
}
//______________________________ERROR MSG_________________________________
          
if(canId == 417//1A1
          
{
            if(
buf[0] == 128//buf[2]bit[1] X00000000 X=1 when SHOW 0R buf[0] 0x80(128) show, 0x7F(127) hide, 0xff(255) clear (default)
            
{
            
OUTLINES[7] = buf[1];
            } else {
OUTLINES[7] = -1;}
          }
//_________________________________VOLUME_________________________________          
          
if(canId == 421//1A5
          
{
          
OUTLINES[8] = buf[0];
          }
//_________________________Кнопки на руле справа__________________________
          
if(canId == 543//21F
          
{
/*          SWSV = buf[1];
          if(bitRead(buf[0],7) == 0 && bitRead(buf[0],6) == 0 && bitRead(buf[0],3) == 0 && bitRead(buf[0],2) == 0 && bitRead(buf[0],1) == 0){OUTLINES[8] = -1;} //Release
          if(bitRead(buf[0],7) == 1){OUTLINES[8] = 1;} //Forward
          if(bitRead(buf[0],6) == 1){OUTLINES[8] = 2;} //Backward
          if(bitRead(buf[0],3) == 1 && bitRead(buf[0],2) == 1){OUTLINES[8] = 3;} //Mute
          if(bitRead(buf[0],3) == 1 && bitRead(buf[0],2) == 0){OUTLINES[8] = 4;} //Vol Up
          if(bitRead(buf[0],2) == 1 && bitRead(buf[0],3) == 0){OUTLINES[8] = 5;} //Vol Down
          if(bitRead(buf[0],1) == 1){OUTLINES[8] = 6;} //Source */
          
}
//__________________________Меню настройки аудио__________________________
          
if(canId == 485//1E5
          
{
           
AP 0;
           
APV 0
           if (
bitRead(buf[0],7) == 1){AP 1APV = (buf[0] & 0x7F) - 63;} //BALANCE L/R ||логическое И с 01111111. Где 0 там всегда 0 
           
if (bitRead(buf[1],7) == 1){AP 2APV = (buf[1] & 0x7F) - 63;} //BALANCE RR/FF
           
if (bitRead(buf[2],7) == 1){AP 3APV = (buf[2] & 0x7F) - 63;} //BASS
           
if (bitRead(buf[4],7) == 1){AP 4APV = (buf[4] & 0x7F) - 63;} //TREBLE
           
if (bitRead(buf[5],7) == 1){AP 5APV bitRead(buf[5],6);}    //LOUD
           
if (bitRead(buf[5],4) == 1){AP 6APV bitRead(buf[5],2);}    //AUTO VOLUME
           
if (bitRead(buf[6],6) == 1){AP 7
                                       if ((
buf[6] & 0x1F) == 3){APV 1;}  //NONE ||//Логическое И c 00011111
                                       
if ((buf[6] & 0x1F) == 7){APV 2;}  //CLASSIC
                                       
if ((buf[6] & 0x1F) == 11){APV 3;} //JAZZ-BLUES
                                       
if ((buf[6] & 0x1F) == 15){APV 4;} //POP-ROCK
                                       
if ((buf[6] & 0x1F) == 19){APV 5;} //VOCAL
                                       
if ((buf[6] & 0x1F) == 23){APV 6;} //TECHNO
                                      
}
          
AUDIO String(AP) + ":" String(APV);
          }
//_______________Включено или нет радио, источник на радио________________
          
if(canId == 357//165
          
{
          if (
buf[0] == 192){OUTLINES[9] = 1;} else {OUTLINES[9] = 0;} //ON/OFF
          
if (buf[2] == 16){OUTLINES[9] = 2;} //Radio
          
if (buf[2] == 32){OUTLINES[9] = 3;} //CD
          
if (buf[2] == 48){OUTLINES[9] = 4;} //CD-Changer
          
if (buf[2] == 64){OUTLINES[9] = 5;} //AUX 1
          
if (buf[2] == 80){OUTLINES[9] = 6;} //AUX 2
          
}
//_________________________Банды и частота радио__________________________
//первые 2 меняются иногда, последнии 3 незнамо что (мусор или уровень сигнала), 
//частота и мусор не пропадают при отключении магнитолы
          
if(canId == 549//225
          
{
          if (
bitRead(buf[2],4) == 1){RB 0RFR = (int)buf[3] << buf[4];RFR RFR 20 50;}//FM1
          
if (bitRead(buf[2],5) == 1){RB 1RFR = (int)buf[3] << buf[4];RFR RFR 20 50;}//FM2
          
if (bitRead(buf[2],6) == 1){RB 2RFR = (int)buf[3] << buf[4];RFR RFR 20 50;}//FM AST
          
if (bitRead(buf[2],4) == && bitRead(buf[2],6) == 1){RB 3RFR = (int)buf[3] << buf[4];}//AM
          
BANDFREQ String(RB) + ":" String(RFR);
          }
//________________________________RDS_____________________________________
          
if(canId == 677//2A5
          
{
            for(
int i 0i<leni++)
            {
            
RDS RDS buf[i];
            }
          }
             
//Выводим данные.
/*
Serial.print("Steering while valcoder value:"); Serial.print(SWSV); Serial.print(" | ");
*/
if ((OUTLINES[0] != OUTLINES2[0] || 
    
OUTLINES[1] != OUTLINES2[1] || 
    
OUTLINES[2] != OUTLINES2[2] || 
    
OUTLINES[3] != OUTLINES2[3] || 
    
OUTLINES[4] != OUTLINES2[4] || 
    
OUTLINES[5] != OUTLINES2[5] || 
    
OUTLINES[6] != OUTLINES2[6] ||
    
OUTLINES[7] != OUTLINES2[7] ||
    
OUTLINES[8] != OUTLINES2[8] || 
    
AUDIO != AUDIO2 ||
    
OUTLINES[9] != OUTLINES2[9] ||
    
BANDFREQ != BANDFREQ2) &&
    (
millis() - time0) > 100)
    {
String s String(OUTLINES[0]) + "|" +
                
String(OUTLINES[1]) + "|" +
                
String(OUTLINES[2]) + "|" +
                
String(OUTLINES[3]) + "|" +
                
String(OUTLINES[4]) + "|" +
                
String(OUTLINES[5]) + "|" +
                
String(OUTLINES[6]) + "|" +
                
String(OUTLINES[7]) + "|" +
                
String(OUTLINES[8]) + "|" +
                
AUDIO "|" +
                
String(OUTLINES[9]) + "|" +
                
BANDFREQ;
        
Serial.print(s);
     
OUTLINES2[0] = OUTLINES[0];
     
OUTLINES2[1] = OUTLINES[1];
     
OUTLINES2[2] = OUTLINES[2];
     
OUTLINES2[3] = OUTLINES[3];
     
OUTLINES2[4] = OUTLINES[4];
     
OUTLINES2[5] = OUTLINES[5];
     
OUTLINES2[6] = OUTLINES[6];
     
OUTLINES2[7] = OUTLINES[7];
     
OUTLINES2[8] = OUTLINES[8];
     
AUDIO2 AUDIO;  
     
OUTLINES2[9] = OUTLINES[9];
     
BANDFREQ2 BANDFREQ;
        
time0 millis();
    }
}

T_r_D вне форума   Ответить с цитированием
Старый 02.02.2016, 14:38   #125
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 написано следующее:
Миниатюры
Нажмите на изображение для увеличения
Название: IMG_20012016_132749.png
Просмотров: 528
Размер:	66.2 Кб
ID:	42420  
T_r_D вне форума   Ответить с цитированием
Старый 02.02.2016, 14:40   #126
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
По умолчанию

Пакеты которые приходят вот:
Как это собрать просто в строки на стороне ардуины с пометкой строки которая в данный момент выделена?
Вложения
Тип файла: rar rds2.rar (22.1 Кб, 439 просмотров)
T_r_D вне форума   Ответить с цитированием
Старый 02.02.2016, 14:46   #127
autowp
Пользователь
 
Аватар для autowp
 
Регистрация: 13.12.2012
Возраст: 40
Город: Москва
Регион: 77, 97, 99, 177
Машина: Peugeot 407 Coupe
Сообщений: 82
autowp is on a distinguished road
По умолчанию

Смотрите в сторону ISO 15765-2 (мультифреймовые посылки)
https://en.wikipedia.org/wiki/ISO_15765-2
http://www.canbushack.com/blog/index...&c=1&tb=1&pb=1
autowp вне форума   Ответить с цитированием
Старый 02.02.2016, 14:54   #128
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
По умолчанию

Да я понимаю как они идут.
Идёт пакет в котором сначала инфа техническая (показывает меню или нет и так далее), а последние два байта это начало строки данных.
Потом в какой- то посылке дальше идёт сообщение начинающиеся с символа "!" и после него 6 байт продолжение строки. Что значит 8 байт я не понимаю.

Как всю эту кашу собрать воедино-то. Я этого сообразить не могу.
T_r_D вне форума   Ответить с цитированием
Старый 02.02.2016, 15:05   #129
autowp
Пользователь
 
Аватар для autowp
 
Регистрация: 13.12.2012
Возраст: 40
Город: Москва
Регион: 77, 97, 99, 177
Машина: Peugeot 407 Coupe
Сообщений: 82
autowp is on a distinguished road
По умолчанию

Цитата:
Сообщение от T_r_D Посмотреть сообщение
Да я понимаю как они идут.
Идёт пакет в котором сначала инфа техническая (показывает меню или нет и так далее), а последние два байта это начало строки данных.
Потом в какой- то посылке дальше идёт сообщение начинающиеся с символа "!" и после него 6 байт продолжение строки. Что значит 8 байт я не понимаю.

Как всю эту кашу собрать воедино-то. Я этого сообразить не могу.
Не, не надо так подходить к вопросу. Надо сначала собрать всю посылку в цельное сообщение, а уже потом анализировать её содержимое. Она переменной длины. Названий может не быть вообще или быть только частично.

Поэтому изучите организацию таких посылок и напишите код, который соберёт её, согласно протоколу. Готовый код на Си показать не могу, не писал, но вот на java, если чем-то поможет (ищите по слову isMultiFrame )
https://github.com/autowp/CAN/blob/m...CanClient.java
autowp вне форума   Ответить с цитированием
Старый 02.02.2016, 16:16   #130
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
По умолчанию

Чо-то я не понимаю тогда!
Как организован пакет?
Идёт первая посылка, потом он ждёт ответа от принимающий стороны?
Потом кидает пакеты с данными длинна которых описана в первом пакете и опять ждёт подтверждения?
Или как?
T_r_D вне форума   Ответить с цитированием
Ответ


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

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

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



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


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