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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.10.2015, 13:23   #91
xmetal
Пользователь
 
Регистрация: 29.07.2015
Регион: 64
Машина: VW Tiguan
Сообщений: 89
xmetal has a brilliant futurexmetal has a brilliant futurexmetal has a brilliant futurexmetal has a brilliant futurexmetal has a brilliant futurexmetal has a brilliant futurexmetal has a brilliant futurexmetal has a brilliant futurexmetal has a brilliant futurexmetal has a brilliant futurexmetal has a brilliant future
По умолчанию

Цитата:
Сообщение от T_r_D Посмотреть сообщение
Будет в итоге штук 30 если см менню разбирусь, а если нет, то штук 15.
Вообще странно, что при перехвате сообщений подряд, как ты говоришь, есть пропуски...
Цитата:
Сообщение от T_r_D Посмотреть сообщение
И настиг чисто технический вопрос использования arduino pro micro.
Значит так, кан шилд использует пин 2 (видимо как int 0).
А модулю радио нужен это пин как SDA.
Как это подружить или переназначить пин SDA или INT0?
Или может это будет работать и так?
Судя по скетчу из 4 страницы пин 2 не используется вообще. Так что можно его не соединять с кан шилдом.
xmetal вне форума   Ответить с цитированием
Старый 28.10.2015, 13:25   #92
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
По умолчанию

Цитата:
Сообщение от xmetal Посмотреть сообщение
Вообще странно, что при перехвате сообщений подряд, как ты говоришь, есть пропуски...
Судя по скетчу из 4 страницы пин 2 не используется вообще. Так что можно его не соединять с кан шилдом.
Он внутри библиотеки скорее всего используется.
Но я попробую его отпаять

Пин 2 законнекчен с выводом 12 (INT) MCP2515

И повторюсь- как вот это повторить на ардуино

125 6 01110000 TTTTTTTT AAAAAAAA 0SXEBBBB MMMMMMMM 00000000 [[JJJJJJJJ x20] [HHHHHHHH x20] x0-4]
6 Показать меню списка треков.
TTTTTTTT - количество треков,
AAAAAAAA - offset экрана списка треков,
S - флаг "покажи список треков"
E - флаг "список треков сдвинулся" на 1 позицию выше или ниже за пределы 4х видимых в данный момент. Направление сдвига определяется по BBBB
BBBB - offset выбранного трека внутри экрана списка треков
MMMMMMMM - дескриптор текстовых данных, идущих далее.
каждая пара бит соответствует наличию исполнителя и названия трека, идущих далее пакетами по 20 байт в соответствующем порядке.
Позиции соответствуют позициям на экране, кроме ситуации наличия флага E
[JJJJJJJJ x20] - 20 байт имени исполнителя
[HHHHHHHH x20] - 20 байт названия трека

125 1 00000000 Спрятать меню списка треков. (Нажатие на OK после выбора трека в LIST, нажатие на ESC, по таймаут)
T_r_D вне форума   Ответить с цитированием
Старый 28.10.2015, 13:51   #93
lti1
Старший Пользователь
 
Аватар для lti1
 
Регистрация: 17.01.2010
Возраст: 48
Город: Самара
Регион: 63, 163
Машина: Skoda Octavia A5 FL && Skoda Octavia Tour && ̶F̶F̶3̶
Сообщений: 457
lti1 has a reputation beyond reputelti1 has a reputation beyond reputelti1 has a reputation beyond reputelti1 has a reputation beyond reputelti1 has a reputation beyond reputelti1 has a reputation beyond reputelti1 has a reputation beyond reputelti1 has a reputation beyond reputelti1 has a reputation beyond repute
По умолчанию

А может быть пропуски потому, что не используется пин 2?
Попробуйте этот скетч:
PHP код:
#include <mcp_can.h>
#include <SPI.h>

long unsigned int rxId;
unsigned char len 0;
unsigned char rxBuf[8];

MCP_CAN CAN0(10);

void setup()
{
  
Serial.begin (115200);
  
CAN0.begin(CAN_500KBPS); // скорость CAN
  
pinMode(2INPUT); // пин 2 можно переназначить
}

void loop()
{
    if(!
digitalRead(2)) // пин 2 можно переназначить                         
    
{
      
CAN0.readMsgBuf(&lenrxBuf);              
      
rxId CAN0.getCanId();                    
 
      if (
rxId == 0x306// фильтр по ID, в данном случае по ID 0x306
       
{

       }
    }

lti1 вне форума   Ответить с цитированием
Старый 28.10.2015, 14:07   #94
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
По умолчанию

Цитата:
Сообщение от lti1 Посмотреть сообщение
А может быть пропуски потому, что не используется пин 2?
Попробуйте этот скетч:
PHP код:
#include <mcp_can.h>
#include <SPI.h>

long unsigned int rxId;
unsigned char len 0;
unsigned char rxBuf[8];

MCP_CAN CAN0(10);

void setup()
{
  
Serial.begin (115200);
  
CAN0.begin(CAN_500KBPS); // скорость CAN
  
pinMode(2INPUT); // пин 2 можно переназначить
}

void loop()
{
    if(!
digitalRead(2)) // пин 2 можно переназначить                         
    
{
      
CAN0.readMsgBuf(&lenrxBuf);              
      
rxId CAN0.getCanId();                    
 
      if (
rxId == 0x306// фильтр по ID, в данном случае по ID 0x306
       
{

       }
    }

if(!digitalRead(2)) что тут означает восклицательный знак?

Если я правильно понимаю, то проверяется возникновение чего-то на пине 2, и если оно появилось, то читаем данные из буфера.
У меня написано тоже самое, только проверка делается
if(CAN_MSGAVAIL == CAN.checkReceive())

в библиотеке
INT8U MCP_CAN::checkReceive(void)
{
INT8U res;
res = mcp2515_readStatus(); /* RXnIF in Bit 1 and 0 */
if (res & MCP_STAT_RXIF_MASK)
{
return CAN_MSGAVAIL;
}
else
{
return CAN_NOMSG;
}
}

.....................................
INT8U MCP_CAN::mcp2515_readStatus(void)
{
INT8U i;
MCP2515_SELECT();
spi_readwrite(MCP_READ_STATUS);
i = spi_read();
MCP2515_UNSELECT();

return i;
}

Тоесть я проверяю и так наличие единицы.
T_r_D вне форума   Ответить с цитированием
Старый 28.10.2015, 14:12   #95
xmetal
Пользователь
 
Регистрация: 29.07.2015
Регион: 64
Машина: VW Tiguan
Сообщений: 89
xmetal has a brilliant futurexmetal has a brilliant futurexmetal has a brilliant futurexmetal has a brilliant futurexmetal has a brilliant futurexmetal has a brilliant futurexmetal has a brilliant futurexmetal has a brilliant futurexmetal has a brilliant futurexmetal has a brilliant futurexmetal has a brilliant future
По умолчанию

lti1, вот только подумал тоже самое
xmetal вне форума   Ответить с цитированием
Старый 28.10.2015, 14:15   #96
lti1
Старший Пользователь
 
Аватар для lti1
 
Регистрация: 17.01.2010
Возраст: 48
Город: Самара
Регион: 63, 163
Машина: Skoda Octavia A5 FL && Skoda Octavia Tour && ̶F̶F̶3̶
Сообщений: 457
lti1 has a reputation beyond reputelti1 has a reputation beyond reputelti1 has a reputation beyond reputelti1 has a reputation beyond reputelti1 has a reputation beyond reputelti1 has a reputation beyond reputelti1 has a reputation beyond reputelti1 has a reputation beyond reputelti1 has a reputation beyond repute
По умолчанию

Цитата:
Сообщение от T_r_D Посмотреть сообщение
if(!digitalRead(2)) что тут означает восклицательный знак?

Если я правильно понимаю, то проверяется возникновение чего-то на пине 2, и если оно появилось, то читаем данные из буфера.
У меня написано тоже самое, только проверка делается
if(CAN_MSGAVAIL == CAN.checkReceive())

в библиотеке
INT8U MCP_CAN::checkReceive(void)
{
INT8U res;
res = mcp2515_readStatus(); /* RXnIF in Bit 1 and 0 */
if (res & MCP_STAT_RXIF_MASK)
{
return CAN_MSGAVAIL;
}
else
{
return CAN_NOMSG;
}
}

.....................................
INT8U MCP_CAN::mcp2515_readStatus(void)
{
INT8U i;
MCP2515_SELECT();
spi_readwrite(MCP_READ_STATUS);
i = spi_read();
MCP2515_UNSELECT();

return i;
}

Тоесть я проверяю и так наличие единицы.
Что тут рассуждать, попробуйте и будет понятно. У меня пропусков нет, скорость CAN 500 kbps.
lti1 вне форума   Ответить с цитированием
Старый 28.10.2015, 14:22   #97
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
По умолчанию

Цитата:
Сообщение от lti1 Посмотреть сообщение
Что тут рассуждать, попробуйте и будет понятно. У меня пропусков нет, скорость CAN 500 kbps.
А строка-то что означает?
if(!digitalRead(2))
Я блин не как не въеду в синтаксис!
Что делает "!"
T_r_D вне форума   Ответить с цитированием
Старый 28.10.2015, 15:05   #98
xmetal
Пользователь
 
Регистрация: 29.07.2015
Регион: 64
Машина: VW Tiguan
Сообщений: 89
xmetal has a brilliant futurexmetal has a brilliant futurexmetal has a brilliant futurexmetal has a brilliant futurexmetal has a brilliant futurexmetal has a brilliant futurexmetal has a brilliant futurexmetal has a brilliant futurexmetal has a brilliant futurexmetal has a brilliant futurexmetal has a brilliant future
По умолчанию

! - логический оператор. Пример !1=0 (false), !0=1 (true). Если на ножке 0 то условие выполняется

Можно немного ускорить работу, чтобы было поменьше лишних проверок:
Код:
if(!digitalRead(2)) // check if data coming
{
CAN.readMsgBuf(&len, buf);
canId = CAN.getCanId();

if(canId == 246) //0F6
{
...
goto output; // пропускаем остальные ID
}

if(canId == 182) //0B6
{
...
goto output; // пропускаем остальные ID
}

if(canId == 545) //221
{
...
goto output; // пропускаем остальные ID
}

if(canId == 543) //21F
{
...
goto output; // пропускаем остальные ID
}

if(canId == 997) //3E5
{
...
goto output; // пропускаем остальные ID
}

if(canId == 357) //165
{
...
goto output; // пропускаем остальные ID
}

if(canId == 549) //225
{
...
goto output; // пропускаем остальные ID
}

if(canId == 421) //1A5
{
VOL = buf[0];
}

output: //прыгаем сразу сюда
//Выводим данные.
if (incomingByte == 98){;Serial.print("Speed: "); Serial.println(Speed);}
if (incomingByte == 99){Serial.print("RPM: "); Serial.println(RPM);}
if (incomingByte == 100){Serial.print("Instant fuel consumption /100Km: "); Serial.println(ILPK);}
if (incomingByte == 101){Serial.print("Run on current fuel level: "); Serial.println(ARCFL);}
if (incomingByte == 102){Serial.print("Themperature: "); Serial.println(Themperature);}
...
}

Последний раз редактировалось xmetal; 28.10.2015 в 16:11.
xmetal вне форума   Ответить с цитированием
Старый 28.10.2015, 18:55   #99
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
По умолчанию

Цитата:
Сообщение от xmetal Посмотреть сообщение
! - логический оператор. Пример !1=0 (false), !0=1 (true). Если на ножке 0 то условие выполняется
[/CODE]
Спасибо.
А про 125 сообщение ни кто не знает как его отобразить?

И всётаки как загнать все данные в одну строку?
Хочу вообще уменьшить скорость выдачи данных в порт.
Если ни чего не поменялось в группе данных, то их и не выводить в порт.
Тогда скорость порта станет вообще не особо критичной.
T_r_D вне форума   Ответить с цитированием
Старый 28.10.2015, 22:36   #100
xmetal
Пользователь
 
Регистрация: 29.07.2015
Регион: 64
Машина: VW Tiguan
Сообщений: 89
xmetal has a brilliant futurexmetal has a brilliant futurexmetal has a brilliant futurexmetal has a brilliant futurexmetal has a brilliant futurexmetal has a brilliant futurexmetal has a brilliant futurexmetal has a brilliant futurexmetal has a brilliant futurexmetal has a brilliant futurexmetal has a brilliant future
По умолчанию

Цитата:
Сообщение от T_r_D Посмотреть сообщение
И всётаки как загнать все данные в одну строку?
Может так?
Код:
void setup() {
Serial.begin(115200);
}

void loop() {
String str= "string ";
byte data1[8] = {1,2,3,4,5,6,7,8};
byte data2[8] = {8,7,6,5,4,3,2,1};

for(byte i=0; i<8; i++){
str += data1[i];
str += " ";
}

for(byte i=0; i<8; i++){
str += data2[i];
str += " ";
}

Serial.println(str);
delay(5000);
}
xmetal вне форума   Ответить с цитированием
Ответ


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

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

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



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


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