28.10.2015, 13:23 | #91 |
Пользователь
Регистрация: 29.07.2015
Регион: 64
Машина: VW Tiguan
Сообщений: 89
|
Вообще странно, что при перехвате сообщений подряд, как ты говоришь, есть пропуски...
Судя по скетчу из 4 страницы пин 2 не используется вообще. Так что можно его не соединять с кан шилдом. |
28.10.2015, 13:25 | #92 | |
Старший Пользователь
Регистрация: 03.07.2015
Регион: 77, 97, 99, 177
Сообщений: 372
|
Цитата:
Но я попробую его отпаять Пин 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, по таймаут) |
|
28.10.2015, 13:51 | #93 |
Старший Пользователь
Регистрация: 17.01.2010
Возраст: 48
Город: Самара
Регион: 63, 163
Машина: Skoda Octavia A5 FL && Skoda Octavia Tour && ̶F̶F̶3̶
Сообщений: 457
|
А может быть пропуски потому, что не используется пин 2?
Попробуйте этот скетч: PHP код:
|
28.10.2015, 14:07 | #94 | |
Старший Пользователь
Регистрация: 03.07.2015
Регион: 77, 97, 99, 177
Сообщений: 372
|
Цитата:
Если я правильно понимаю, то проверяется возникновение чего-то на пине 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; } Тоесть я проверяю и так наличие единицы. |
|
28.10.2015, 14:12 | #95 |
Пользователь
Регистрация: 29.07.2015
Регион: 64
Машина: VW Tiguan
Сообщений: 89
|
lti1, вот только подумал тоже самое
|
28.10.2015, 14:15 | #96 | |
Старший Пользователь
Регистрация: 17.01.2010
Возраст: 48
Город: Самара
Регион: 63, 163
Машина: Skoda Octavia A5 FL && Skoda Octavia Tour && ̶F̶F̶3̶
Сообщений: 457
|
Цитата:
|
|
28.10.2015, 14:22 | #97 |
Старший Пользователь
Регистрация: 03.07.2015
Регион: 77, 97, 99, 177
Сообщений: 372
|
|
28.10.2015, 15:05 | #98 |
Пользователь
Регистрация: 29.07.2015
Регион: 64
Машина: VW Tiguan
Сообщений: 89
|
! - логический оператор. Пример !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. |
28.10.2015, 18:55 | #99 | |
Старший Пользователь
Регистрация: 03.07.2015
Регион: 77, 97, 99, 177
Сообщений: 372
|
Цитата:
А про 125 сообщение ни кто не знает как его отобразить? И всётаки как загнать все данные в одну строку? Хочу вообще уменьшить скорость выдачи данных в порт. Если ни чего не поменялось в группе данных, то их и не выводить в порт. Тогда скорость порта станет вообще не особо критичной. |
|
28.10.2015, 22:36 | #100 |
Пользователь
Регистрация: 29.07.2015
Регион: 64
Машина: VW Tiguan
Сообщений: 89
|
Может так?
Код:
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); } |
Здесь присутствуют: 2 (пользователей: 0 , гостей: 2) | |
|
|