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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.10.2015, 16:01   #101
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
По умолчанию

Короче получил в лоб от Pro Micro!
подключаю плату кан
10 вывод CS, 16 MOSI, 14 MISO, 15 SCK. (эти выводы идут подряд на самом деле на плате дуины взято отсюда распиновка https://learn.sparkfun.com/tutorials...3-hookup-guide)
И нефига не работает!
Такое впечатление что контроллер подвисает!
Отcоединяем SCK и естественно эрор инита.

Даже попробовал именно под эту плату бутлоадер
https://github.com/sparkfun/Arduino_Boards

и ни чего!

Перепаял назад на Nano- всё работает снова!
Это так, ради страховки, ну типо не попалил ли я платку кана пока паял.

У кого какие соображения?
Хочется на pro-micro всё собрать.

Последний раз редактировалось T_r_D; 29.10.2015 в 17:35.
T_r_D вне форума   Ответить с цитированием
Старый 30.10.2015, 14:27   #102
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
По умолчанию

Сам себе отвечаю.
Всё и так работало, просто то что в void setup() было в порт не попадало.
Другие ардуины проходили инит при подключении программы к COM порту (или сбрасывались), а эта нет. Так что если нужно увидеть эти сообщения, то нужна задержка в 10 секунд. Там лоадер инится 8 секунд.
А по подключению то что выше написал.
И ещё на ардуине перемычку запаял чтоб плата CAN питалась напрямую от порта, а не через резистор на плате.
Как только всё заработает окончательно питание с USB разъёма вообще уберу.

Ща время нету, но попозде попробую с Interupt сделать и скажу пропали задержки или нет.

По поводу меню. Само меню реально прошито в дисплее.
Дисплей ловит нажатия на кнопки после получение сообщения от магнитолы что мы нажали кнопку меню.
Далее обрабатывает нажатия кнопок и в обратку выдаёт в 125 сообщение активна настройка или нет.
Скорее всего при изменении значения меню посылается или модифицируется сообщение. И скорее всего это сообщение 1E0.
Так что данные об том что в данный момент на дисплее отображает меню в CAN не идёт.
Посему это можно реализовать только ловя нажатие кнопок без пропусков и задержек.

Если модуль радио покажет себя лутчше чем штатная магнитола, то париться с этим я больше не буду.
T_r_D вне форума   Ответить с цитированием
Старый 30.10.2015, 19:14   #103
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
По умолчанию

Цитата:
Сообщение от lti1 Посмотреть сообщение
Если потом планируете передавать эти данные в винду, можно писать как число, потом отправлять с помощью Serial.write
PHP код:
for (int i=0<= 7i++) Serial.write(buf[i]); 
Если в андройд, то так не подойдет.
Я немного обманул, Serial.write на андройде то же нормально работает. Убрал у себя английские буквы и символы, оставил только русские.
PHP код:
unsigned code_ru[66]={0x04010x04100x04110x04120x04130x04140x04150x04160x04170x04180x04190x041A0x041B0x041C0x041D0x041E0x041F0x04200x04210x04220x04230x04240x04250x04260x04270x04280x04290x042A0x042B0x042C0x042D0x042E0x042F0x04510x04300x04310x04320x04330x04340x04350x04360x04370x04380x04390x043A0x043B0x043C0x043D0x043E0x043F0x04400x04410x04420x04430x04440x04450x04460x04470x04480x04490x044A0x044B0x044C0x044D0x044E0x044F};
charru[66]={ "\u0401""\u0410""\u0411""\u0412""\u0413""\u0414""\u0415""\u0416""\u0417""\u0418""\u0419""\u041A""\u041B""\u041C""\u041D""\u041E""\u041F""\u0420""\u0421""\u0422""\u0423""\u0424""\u0425""\u0426""\u0427""\u0428""\u0429""\u042A""\u042B""\u042C""\u042D""\u042E""\u042F""\u0451""\u0430""\u0431""\u0432""\u0433""\u0434""\u0435""\u0436""\u0437""\u0438""\u0439""\u043A""\u043B""\u043C""\u043D""\u043E""\u043F""\u0440""\u0441""\u0442""\u0443""\u0444""\u0445""\u0446""\u0447""\u0448""\u0449""\u044A""\u044B""\u044C""\u044D""\u044E""\u044F"};


for(
byte j=0j<66j++)

 if(
Buf[i]==code_ru[j]) Serial.print(ru[j]);

Миниатюры
Нажмите на изображение для увеличения
Название: Screenshot_2015-10-30-19-07-37.jpg
Просмотров: 1036
Размер:	36.0 Кб
ID:	41449   Нажмите на изображение для увеличения
Название: Файл 31.10.15, 15 09 29.jpg
Просмотров: 886
Размер:	70.0 Кб
ID:	41455  

Последний раз редактировалось lti1; 31.10.2015 в 15:22.
lti1 вне форума   Ответить с цитированием
Старый 31.10.2015, 15:10   #104
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 Посмотреть сообщение
Может так?
Код:
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);
}
А можно это сделать массивом, а не пересобирать целиком строчку каждый раз?
Я наступаю на грабли
char* OUTLINE[] = {"RPM","|","SPD","|","ILPK","|","LPK","|","Trip"," |","AVG SPD","|","Themp"};
задали массив и так его можно выводить спокойно, но он требует char.
модифицируем строку которая в int
RPM = (int)buf[0] << 5 | buf[1] >> 3;
в
str = String((int)buf[0] << 5 | buf[1] >> 3);
загоняем в массив
OUTLINE[0] = str;
Получаем несоответствие типов данных.
Как это побороть?
мне просто нужно чтоб был какой нить разделитель в строке между числами.
T_r_D вне форума   Ответить с цитированием
Старый 31.10.2015, 19:48   #105
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
По умолчанию

Наверное так, если я правильно понял задачу:
Код:
void setup() {
Serial.begin(115200);
}

void loop() {
char *OUTLINE[] = {"RPM","|","SPD","|","ILPK","|","LPK","|","Trip","|","AVG SPD","|","Themp"}; 

for(byte i=0; i<13; i++){
Serial.print(OUTLINE[i]); //вывод: RPM|SPD|ILPK|LPK|Trip|AVG SPD|Themp
}
Serial.println();

String str;
str = String(123.456,3);
OUTLINE[8]="";
str.toCharArray(OUTLINE[8],str.length()+1); //копируем новые данные в OUTLINE[8]

for(byte i=0; i<13; i++){
Serial.print(OUTLINE[i]); //вывод: RPM|SPD|ILPK|LPK|123.456|AVG SPD|Themp
}

a:
goto a;
}
xmetal вне форума   Ответить с цитированием
Старый 01.11.2015, 10:09   #106
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 Посмотреть сообщение
Наверное так, если я правильно понял задачу:
Код:
void setup() {
Serial.begin(115200);
}

void loop() {
char *OUTLINE[] = {"RPM","|","SPD","|","ILPK","|","LPK","|","Trip","|","AVG SPD","|","Themp"}; 

for(byte i=0; i<13; i++){
Serial.print(OUTLINE[i]); //вывод: RPM|SPD|ILPK|LPK|Trip|AVG SPD|Themp
}
Serial.println();

String str;
str = String(123.456,3);
OUTLINE[8]="";
str.toCharArray(OUTLINE[8],str.length()+1); //копируем новые данные в OUTLINE[8]

for(byte i=0; i<13; i++){
Serial.print(OUTLINE[i]); //вывод: RPM|SPD|ILPK|LPK|123.456|AVG SPD|Themp
}

a:
goto a;
}
Ты просто мой спаситель!
Именно это и нужно.
Блин, какой С оказывается не простой язык. Паскаль проще.
T_r_D вне форума   Ответить с цитированием
Старый 01.11.2015, 14:03   #107
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 *OUTLINE[] = {"RPM","|","SPD","|","ILPK","|","LPK","|","Trip"," |","AVG SPD","|","Themp"};

for(int i=0; i<13; i++){
Serial.print(OUTLINE[i]);
}
Так будет всё правильно, но стоит между этим вставить
OUTLINES[0] = "";
str = String(123);
str.toCharArray(OUTLINES[0],str.length()+1);
OUTLINES[1] = "bbb";
как вместо того что нужно получим
123123|bbb|SPD|||

А если сделаем вот так, то получим ещё круче!
OUTLINES[0] = "";
str = String(123);
str.toCharArray(OUTLINES[0],str.length()+1);

OUTLINES[1] = "";
str = String(278);
str.toCharArray(OUTLINES[1],str.length()+1);

OUTLINES[2] = "str";

выведет
278278|278|str|||

Последний раз редактировалось T_r_D; 01.11.2015 в 14:45.
T_r_D вне форума   Ответить с цитированием
Старый 02.11.2015, 15:17   #108
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
По умолчанию

Короче сделал вот так:
#include <SPI.h>
#include "mcp_can.h"
MCP_CAN CAN(10);
unsigned char len = 0;
unsigned char buf[8];
INT32U canId = 0x000; // идентификаторы могут быть 11-ти или 29-битные

//RPM SPD ILPK LPK AVG_SPD Trp Tmp
// /100 /10 /10 делить на
int OUTLINES[] = {0,0,0,0,0,0,0};

void setup()
{
Serial.begin(115200);
pinMode(9, INPUT);
delay(10000);

START_INIT:
if(CAN_OK == CAN.begin(CAN_125KBPS,MCP_8MHz))
{Serial.println("Init OK!");}
else
{Serial.println("Init fail");delay(100);goto START_INIT;}
}


void loop()
{

if(CAN_MSGAVAIL == CAN.checkReceive())
{
CAN.readMsgBuf(&len, buf);
canId = CAN.getCanId();

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

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

if(canId == 673) //0B6
{
OUTLINES[3] = (int)buf[3] << 8 | buf [4]; //Расход на 100км /10
OUTLINES[4] = buf[0]; //Средняя скорость
OUTLINES[5] = ((int)buf[1] << 8 | 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; //Там есть десятые километра
}
}

__________________________________Выводим данные__________________________________
Serial.print("<TRIP|");
for(int i = 0; i < 7; i++)
{
Serial.print(OUTLINES[i]);
if (i != 6){Serial.print("|");}
}
Serial.println(">");
}

Это собственно всё что показывает борт комп не считая сообщений информационных.
Ну и то что закоменчено, то на верхнем дисплее и скорость с оборотами тоже.

Надо ещё поколдовать и сделать что если массив не менялся, то и данные выводить не надо.
T_r_D вне форума   Ответить с цитированием
Старый 02.11.2015, 21:58   #109
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 Посмотреть сообщение
но поторопился!
char *OUTLINE[] = {"RPM","|","SPD","|","ILPK","|","LPK","|","Trip"," |","AVG SPD","|","Themp"};

for(int i=0; i<13; i++){
Serial.print(OUTLINE[i]);
}
Так будет всё правильно, но стоит между этим вставить
OUTLINES[0] = "";
str = String(123);
str.toCharArray(OUTLINES[0],str.length()+1);
OUTLINES[1] = "bbb";
как вместо того что нужно получим
123123|bbb|SPD|||

А если сделаем вот так, то получим ещё круче!
OUTLINES[0] = "";
str = String(123);
str.toCharArray(OUTLINES[0],str.length()+1);

OUTLINES[1] = "";
str = String(278);
str.toCharArray(OUTLINES[1],str.length()+1);

OUTLINES[2] = "str";

выведет
278278|278|str|||
В OUTLINE[0] = " "; вставьте пробелы, в количестве равном количеству символов в str = String(123);
PHP код:
void setup() { 
Serial.begin(115200); 

void loop() {
char *OUTLINE[] = {"RPM","|","SPD","|","ILPK","|","LPK","|","Trip"," |","AVG SPD","|","Themp"};
String str
OUTLINE[0] = "   ";
str String(123);
str.toCharArray(OUTLINE[0],str.length()+1);
OUTLINE[2] = "bbb";
for(
int i=0i<13i++){
Serial.print(OUTLINE[i]);
}
Serial.println("");
delay(5000);

Результат: 123|bbb|ILPK|LPK|Trip |AVG SPD|Themp
Какой-то костыль получается, но работает. Ссылка.
lti1 вне форума   Ответить с цитированием
Старый 02.11.2015, 23:24   #110
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 Посмотреть сообщение
В OUTLINE[0] = " "; вставьте пробелы, в количестве равном количеству символов в str = String(123);
PHP код:
void setup() { 
Serial.begin(115200); 

void loop() {
char *OUTLINE[] = {"RPM","|","SPD","|","ILPK","|","LPK","|","Trip"," |","AVG SPD","|","Themp"};
String str
OUTLINE[0] = "   ";
str String(123);
str.toCharArray(OUTLINE[0],str.length()+1);
OUTLINE[2] = "bbb";
for(
int i=0i<13i++){
Serial.print(OUTLINE[i]);
}
Serial.println("");
delay(5000);

Результат: 123|bbb|ILPK|LPK|Trip |AVG SPD|Themp
Какой-то костыль получается, но работает. Ссылка.
А если этот самый str каждый раз разной длины?
Я уже int массив сделал, в принципе и так пойдёт.
T_r_D вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

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

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



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


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