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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.03.2016, 12:36   #231
dmit
Новый Пользователь
 
Регистрация: 10.01.2007
Возраст: 49
Город: Ротсовкая обл г. Морозовск
Машина: ford Mondeo 3
Сообщений: 23
dmit is on a distinguished road
По умолчанию

Если к монитору подключиться по CAN сможет Ардуино распознать протокол и скорость ? или эти данные явно нужно знать, чтобы снюхать Ардуино с шиной на дисплее ?

т.е если выловить данные управляющие стандартными меню дисплея в шине, то этими меню можно управлять для своих сообщений !
dmit вне форума   Ответить с цитированием
Старый 18.03.2016, 14:28   #232
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
По умолчанию

dmit
Нету понятия монитор, дисплей, магнитола и так далее. Есть понятие "шина данных".
Она бывает по крайней мере двух типов- стандартная высокоскоростная и FT-CAN.
Для стандартной на плате распаяна микруха TJA1050, для FT потребуется перепайка на TJA1054 или 1055.
Эти данные можно узнать перебором. Перебирая для каждой из категорий скорость.
Но лутчше найти данные сразу.

Там не так всё просто.
Более или менее просто "читать" данные из шины и выводить их на своё устройство.

Нельзя просто взять и вмешаться своими сообщениями в шину. Точнее в некоторых случаях можно, но в 90% сообщения цикличны. Тоесть каждые, скажем 500мс, идёт передача данных о, ну допустим, нажатой или нет кнопке.
И этот статус будет в битовом виде допустим 0, а ты будешь пихать ему 1. С кнопкой это может и прокатит, а вот с сообщениями, кроме как мерцания ни чего не выйдет.

Короче. При удачном подключении к шине нужно будет заниматься анализом пакетов. Тупо тыкать кнопки, крутить ручки и смотреть что происходит.
Это долго и уныло. Да ещё можно и чего-то не заметить.
С наскока не выйдет короче.

Посмотри дату начала этой темы и пойми сколько нужно время для раскопки примерно 50% информации в шине FT(кан комфорт).
T_r_D вне форума   Ответить с цитированием
Старый 19.03.2016, 19:25   #233
dmit
Новый Пользователь
 
Регистрация: 10.01.2007
Возраст: 49
Город: Ротсовкая обл г. Морозовск
Машина: ford Mondeo 3
Сообщений: 23
dmit is on a distinguished road
Unhappy

Цитата:
Сообщение от T_r_D Посмотреть сообщение
dmit
Нету понятия монитор, дисплей, магнитола и так далее. Есть понятие "шина данных".
Она бывает по крайней мере двух типов- стандартная высокоскоростная и FT-CAN.
Для стандартной на плате распаяна микруха TJA1050, для FT потребуется перепайка на TJA1054 или 1055.
Эти данные можно узнать перебором. Перебирая для каждой из категорий скорость.
Но лутчше найти данные сразу.

Там не так всё просто.
Более или менее просто "читать" данные из шины и выводить их на своё устройство.

Нельзя просто взять и вмешаться своими сообщениями в шину. Точнее в некоторых случаях можно, но в 90% сообщения цикличны. Тоесть каждые, скажем 500мс, идёт передача данных о, ну допустим, нажатой или нет кнопке.
И этот статус будет в битовом виде допустим 0, а ты будешь пихать ему 1. С кнопкой это может и прокатит, а вот с сообщениями, кроме как мерцания ни чего не выйдет.

Короче. При удачном подключении к шине нужно будет заниматься анализом пакетов. Тупо тыкать кнопки, крутить ручки и смотреть что происходит.
Это долго и уныло. Да ещё можно и чего-то не заметить.
С наскока не выйдет короче.

Посмотри дату начала этой темы и пойми сколько нужно время для раскопки примерно 50% информации в шине FT(кан комфорт).
1.Т.е. получается сразу ориентироваться на перепайку микрухи ? скорее всего в Теане тоже FT(кан комфорт)
2. Получается кроме анализа никакой радости не принес попытка разбираться с сообщениями. Если я допустим вычислю как опустить стеклоподъемник , то послав свое сообщение , а не нажимая кнопки стекло не опуститься ? Или монитор не напишет слово и не прорисует стандартное меню ?
3. Хотел бы уточнить по Вашему проекту . Как я понял Вы просто перевели содержимое штатного монитора на свой ! Т.е. вы выловили сообщения , расшифровали их и средсвами Андроид нарисовали на экране андроида в своей современной интерпритации ! Ардуин у вас вылавливает сообщения , а далее что , кто занимается формирование новой информации на основе выловленых данных, тоже Ардуин ? Как соединен АРдуин с Андроид ? Вот здесь можно подробнее ?
dmit вне форума   Ответить с цитированием
Старый 20.03.2016, 14:11   #234
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
По умолчанию

1 Сначала пробовать.
2 Пока не увидишь что происходит и не попробуешь послать пакет ни чего не узнаешь. Протокол у всех разный.
2. У меня всё идёт при помощи разных ID и байт/бит в них, сама визуализация в дисплее вшита. Отдельно только идёт мультифрейм для вывода сообщений и RDS.
Они идут фактически в ASCII.
Ардуина ловит с платы кан сообщения и передаёт их на сериал порт, а к тому уже подключена микруха которая выдаёт это на ЮСБ(стандартный разъём на плате ардуины). Далее по юсб это подключено к планшету.
На планшете при помощи изисканий вот этого дяди написан софт
https://github.com/felHR85/UsbSerial/releases/
T_r_D вне форума   Ответить с цитированием
Старый 20.03.2016, 14:14   #235
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
По умолчанию

Народ, а теперь вопрос на засыпку!
Походу я загрузил дуину настолько, что она стала тупо не успевать за пакетами.

Как отфильтровать аппаратно при помощи mcp пакеты?
нашёл только это
INT8U init_Mask(const INT8U num,const INT32U ulData); /* init Masks */
INT8U init_Filt(const INT8U num,const INT8U ext,const INT32U ulData);
Что с этим делать не понятно.
Какой фильтр подсовывать и маску чего?
Мне надо пропускать около 30 ID, а всё остальное игнорировать.

Сегодня выяснилось что очень большие грабли с приёмом одиночных сообщений.
Коими является мультифрейм.
Дома всё ок, всё принимается нормально, менюшки выскакивают, очень редко бывают пустыми, но это фигня.
В машине меню показывает с 10 нажатия, часто не закрывает.
Единственное логическое объяснение такому поведению это то, что ардуина сравнивает все пакеты которые приходят немаленьким кодом и просто захлёбывается данными.

Последний раз редактировалось T_r_D; 20.03.2016 в 18:00.
T_r_D вне форума   Ответить с цитированием
Старый 20.03.2016, 19:05   #236
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
По умолчанию

Там по-моему можно только 6 аппаратных фильтров настроить. Нужно либо оптимизировать проверки, либо переносить всю логику в андроид. Ардуине оставить фильтр и передачу сырых данных в компорт.
xmetal вне форума   Ответить с цитированием
Старый 21.03.2016, 05:56   #237
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 фильтров.
Мало.
Нужно проверять 21 ID.

По пробую заменить if на switch.
Должно быть быстрее.

Ps.
Попробовал подключить к своей шине стандартный контроллер can с tja1050 и увидил странную штуку- половину id он видит, но только половину ))
T_r_D вне форума   Ответить с цитированием
Старый 21.03.2016, 12:19   #238
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
По умолчанию

Я больше думаю на то, что где-то слишком долго идет обработка самих данных. На ардуиновский код можно посмотреть?
xmetal вне форума   Ответить с цитированием
Старый 24.03.2016, 19:30   #239
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 Посмотреть сообщение
Я больше думаю на то, что где-то слишком долго идет обработка самих данных. На ардуиновский код можно посмотреть?
Дома буду- скину.
Там вообще странная штука получилась.
Походу глюк компилятора при работе с памятью.
Короче, если код мультифрейма вконце, то нужно перед сравнением массивов ставит delay(2). Имено 2- меньше не работает. Если его нет, то вывод оконечного массива в порт получается с ошибками.тоесть каша тупо пишется.
Такое происходит похоже только при интенсивной работе с массивами в памяти.
Если код мультифреймом вначале, то работает без делея.
Вообще понять не могу в чём дело.

Если заменить if на switch, то задержки даже в 20 мало- каша пишется.
Может совместно разобраться выйдет...
T_r_D вне форума   Ответить с цитированием
Старый 24.03.2016, 23:18   #240
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 код:
#include <SPI.h>
#include "mcp_can.h"
MCP_CAN CAN(10);
unsigned char len 0;
unsigned char buf[8];
INT32U canId 0x000;
unsigned long time0 = -120;

//RDS
int digit1digit2;

uint8_t DATA[162] = {};
uint8_t DATA2[162] = {};
boolean Flag false;
boolean Flag2 false;
int Count 0;
int Count2 0;
int FMS 0;
int VolCount 5;
int arrcmp;

//Multiframe
int LengthP
int DataBufSize;
int Scroll 0;
uint8_t MULTIFRAMEFTMP[3] = {};
uint8_t MULTIFRAMETMP[54] = {};
uint8_t MULTIFRAME[55] = {};
//Multiframe RDTxT
//Package length: 64
int LengthR
int DataBufSizeR;

void setup()
{
  
DATA[14] = 0x20;
    
Serial.begin(115200);
    
pinMode(9INPUT);
    
CAN.begin(CAN_125KBPS,MCP_8MHz);
}

unsigned long time2 0;
unsigned char stmp[8] = {140015100160};

void loop()
{
//  if ((millis() - time2) > 100){
//  CAN.sendMsgBuf(0x036, 0, 8, stmp); //Это пакет зажигания.
//  time2 = millis();}
  
       
if(!digitalRead(9))
       {
       
CAN.readMsgBuf(&lenbuf);
       
canId CAN.getCanId();

if(
canId == 0x125) {
  if (
buf[0] == 1) {
     
bitWrite(DATA[30],5,0);bitWrite(DATA[30],6,0);bitWrite(DATA[30],7,0);
     
memset(MULTIFRAMEFTMP0sizeof(MULTIFRAMEFTMP));
     
memset(MULTIFRAMETMP0sizeof(MULTIFRAMETMP));
     
memset(MULTIFRAME0sizeof(MULTIFRAME));
     for (
int i=0i<55i++) DATA[i+41] = 0x00;
  }
  else {              
              if (
buf[0] == 4DATA[39] = buf[4];
               if (
buf[1] == 112 &&  buf[0] == 6){
                  
bitWrite(DATA[30],7,1);
                  
bitWrite(DATA[30],5,0);
                  
bitWrite(DATA[30],6,0);
                   if (
buf[4]!=16 && buf[4]!=19 && 
                       
buf[4]!=64 && buf[4]!=65 && 
                       
buf[4]!=66 && buf[4]!=67DATA[39] = buf[4];
                   else {
                    if (
buf[4] == 16 || buf[4] == 64DATA[39] = 0x00;
                    if (
buf[4] == 65DATA[39] = 0x01;
                    if (
buf[4] == 66DATA[39] = 0x02;
                    if (
buf[4] == 19 || buf[4] == 67DATA[39] = 0x03;
                    }
                    if (
buf[4] == 16Scroll 1;
                    if (
buf[4] == 19Scroll 2;
                    if (
buf[4] != 16 && buf[5] != 19Scroll 0;
                  
DATA[40] = buf[3] + 0x01;
               }
              
              if ((
buf[0] >> 4) == 0x01){
                
LengthP = ((buf[0] & 0x0F) * 256 buf[1]) - 6;
                
DataBufSize 0;
                
MULTIFRAMEFTMP[0] = buf[6];
                
MULTIFRAMEFTMP[1] = buf[7];
                if (
buf[1] == 13 || buf[1] == 22 || buf[1] == 31 || buf[1] == 40){
                    
FMS 1;
                    if (
buf[5] == 64 || buf[5] == 16DATA[39] = 0x00;
                    if (
buf[5] == 65 || buf[5] == 33DATA[39] = 0x01;
                    if (
buf[5] == 66 || buf[5] == 50DATA[39] = 0x02;
                    if (
buf[5] == 67 || buf[5] == 19DATA[39] = 0x03;
                    if (
buf[5] == 16Scroll 1;
                    if (
buf[5] == 19Scroll 2;
                    if (
buf[5] != 16 && buf[5] != 19Scroll 0;
                    }
                if (
buf[1] == 58){
                    
FMS 2;
                    if (
buf[3] == 16DATA[39] = 0x00;
                    if (
buf[3] == 32DATA[39] = 0x01;
                    if (
buf[3] == 48DATA[39] = 0x02;
                    if (
buf[3] == 64DATA[39] = 0x03;
                    if (
buf[3] == 80DATA[39] = 0x04;
                    if (
buf[3] == 96DATA[39] = 0x05;
                    
Scroll 0;
                    }
             } 

              if(((
buf[0] >> 4) == 0x02) && LengthP != 0multiframef();
              if(((
buf[0] >> 4) == 0x02) && LengthP == 0)
              {
              if (
Scroll == 0){
              
MULTIFRAME[0] = MULTIFRAMEFTMP[0];
              
MULTIFRAME[1] = MULTIFRAMEFTMP[1];
              for(
int i=0;i<=51;i++) MULTIFRAME[i+2] = MULTIFRAMETMP[i];}

              if (
Scroll == 1){
                for (
int i 26i>=0i--) MULTIFRAME[i+9] = MULTIFRAME[i];
                
MULTIFRAME[0] = MULTIFRAMEFTMP[0];
                
MULTIFRAME[1] = MULTIFRAMEFTMP[1];
                for (
int i 0i<7;i++) MULTIFRAME[i+2] = MULTIFRAMETMP[i];
                }

              if (
Scroll == 2){
                for (
int i 0i<=26i++) MULTIFRAME[i] = MULTIFRAME[i+9];
                
MULTIFRAME[27] = MULTIFRAMEFTMP[0];
                
MULTIFRAME[28] = MULTIFRAMEFTMP[1];
                for (
int i 0i<7;i++) MULTIFRAME[i+29] = MULTIFRAMETMP[i];
                }
              for (
int i=0i<54i++) DATA[i+41] = MULTIFRAME[i];
              if (
FMS == 1) {bitWrite(DATA[30],5,1); bitWrite(DATA[30],6,0); bitWrite(DATA[30],7,0);}
              if (
FMS == 2) {bitWrite(DATA[30],6,1); bitWrite(DATA[30],5,0); bitWrite(DATA[30],7,0);}
              }
  }
}
          if(
canId == 0xA4 && bitRead(DATA[21],5) == 1)
            {
              if ((
buf[0] >> 4) == 0x01){
                
LengthR = ((buf[0] & 0x0F) * 256 buf[1]) - 6;
                
DataBufSizeR 98;
                
DATA[96] = buf[6];
                
DATA[97] = buf[7];
              } 

              if(((
buf[0] >> 4) == 0x02) && LengthR 0multiframeRF();
              if(((
buf[0] >> 4) == 0x02) && LengthR == 0){
              }
             }
          if(
canId == 0xB6){
          
DATA[0] = buf[0];DATA[1] = buf[1];
          
DATA[2] = buf[2];DATA[3] = buf[3];}
          if(
canId == 0x221){DATA[4] = buf[1];DATA[5] = buf[2];
          
bitWrite(DATA[36],3,bitRead(buf[0],3));} 
          if(
canId == 0x2A1){DATA[6] = buf[3];DATA[7] = buf[4];<< buf [4];
          
DATA[8] = buf[0];
          
DATA[9] = buf[1];DATA[10] = buf[2];}
          if(
canId == 0xF6DATA[11] = buf[6];
          if(
canId == 0x1A1){if (bitRead(buf[2],7) == 1DATA[12] = 0x01; else DATA[12] = 0x00;
          
DATA[13] = buf[1];}
          if(
canId == 0x1A5//421 1A5
            
if (buf[0] <= 30){ 
            
DATA[14] = buf[0];
            
VolCount 0;
            }
            else {
              if (
VolCount 5VolCount VolCount +1;
              else 
DATA[14] = 0x1F;
            }
          if(
canId == 0x1E5){
            if (
bitRead(buf[0],7) == || bitRead(buf[1],7) == || bitRead(buf[2],7) == || bitRead(buf[4],7) == || 
                
bitRead(buf[5],7) == || bitRead(buf[5],4) == || bitRead(buf[6],6) == 1){
                  if (
bitRead(buf[0],7) == 1){DATA[15] = 0x01DATA[16] = (buf[0] & 0x7F);}
                  if (
bitRead(buf[1],7) == 1){DATA[15] = 0x02DATA[16] = (buf[1] & 0x7F);}
                  if (
bitRead(buf[2],7) == 1){DATA[15] = 0x03DATA[16] = (buf[2] & 0x7F);}
                  if (
bitRead(buf[4],7) == 1){DATA[15] = 0x04DATA[16] = (buf[4] & 0x7F);}
                  if (
bitRead(buf[5],7) == 1){DATA[15] = 0x05DATA[16] = bitRead(buf[5],6);}
                  if (
bitRead(buf[5],4) == 1){DATA[15] = 0x06DATA[16] = bitRead(buf[5],2);}
                  if (
bitRead(buf[6],6) == 1){DATA[15] = 0x07;
                                       if ((
buf[6] & 0x1F) == 3)DATA[16] = 1;
                                       if ((
buf[6] & 0x1F) == 7)DATA[16] = 2
                                       if ((
buf[6] & 0x1F) == 11)DATA[16] = 3;
                                       if ((
buf[6] & 0x1F) == 15)DATA[16] = 4;
                                       if ((
buf[6] & 0x1F) == 19)DATA[16] = 5;
                                       if ((
buf[6] & 0x1F) == 23)DATA[16] = 6;
                                       }
                  }else 
DATA[15] = 0x00;
           
bitWrite(DATA[21],7,bitRead(buf[5],6));
           }

          if(
canId == 0x165)
          {
          if (
buf[0] == 192)DATA[17] = 0x01; else DATA[17] = 0x00;
          if (
buf[2] == 16){DATA[17] = 0x02;}
          if (
buf[2] == 32){DATA[17] = 0x03;}
          if (
buf[2] == 48){DATA[17] = 0x04;}
          if (
buf[2] == 64){DATA[17] = 0x05;}
          if (
buf[2] == 80){DATA[17] = 0x06;}
          }
          if(
canId == 0x225 && DATA[17] == 0x02)
          {
          
DATA[19] = buf[3];
          
DATA[20] = buf[4];
          
DATA[31] = buf[1];
          
bitWrite(DATA[18],0,bitRead(buf[2],4));
          
bitWrite(DATA[18],1,bitRead(buf[2],5));
          
bitWrite(DATA[18],2,bitRead(buf[2],6));
          if (
bitRead(buf[2],4) == && bitRead(buf[2],6) == 1)bitWrite(DATA[18],3,1); else bitWrite(DATA[18],3,0);
          
bitWrite(DATA[18],4,bitRead(buf[0],2));
          
//bitWrite(DATA[18],5,bitRead(buf[0],7));
          
            
if (bitRead(buf[0],2) == 1Flag true;
            if (
bitRead(buf[0],2) == && Flag == true){
            
Count Count 1;
              if (
Count 2){
              if (
bitRead(buf[0],7) == 0) {bitWrite(DATA[18],5,1);bitWrite(DATA[18],6,0);} 
              if (
bitRead(buf[0],7) == 1) {bitWrite(DATA[18],5,0);bitWrite(DATA[18],6,1);} 
              
Flag false;
              
Count 0;
              
Flag2 true;
              
Count2 0;
             }                               
            }
            if (
Flag2 == true){
              
Count2Count2 1;
              if (
Count2 == 14){
                  
bitWrite(DATA[18],5,0);
                  
bitWrite(DATA[18],6,0);
                  
Count2 0;
                  
Flag2 false;
                }
            }
            
          }
          if(
canId == 0x1E0)
          {
            
bitWrite(DATA[21],0,bitRead(buf[0],5));
            
bitWrite(DATA[21],1,bitRead(buf[0],2));
            
bitWrite(DATA[21],2,bitRead(buf[1],7));
            
bitWrite(DATA[21],3,bitRead(buf[2],5));
            
bitWrite(DATA[21],4,bitRead(buf[3],7));
            
bitWrite(DATA[21],5,bitRead(buf[4],5));
          }
          if(
canId == 0x2A5 && DATA[17] == 0x02)
          {
            if (
buf[0] != && buf[1] != && buf[2] != && buf[3] != && buf[4] != && buf[5] != && buf[6] != && buf[7] != && buf[8] != 0){
            for(
int i 22i<=29i++) DATA[i] = buf[i-22];}
            else
            {
DATA[22] = 0x20;DATA[23] = 0x4E;DATA[24] = 0x4F;DATA[25] = 0x20;
            
DATA[26] = 0x52;DATA[27] = 0x44;DATA[28] = 0x53;DATA[29] = 0x00;}
          }
          if(
canId == 0x365 && DATA[17] == 0x03DATA[20] = buf[0];            
          if(
canId == 0x3A5 && DATA[17] == 0x03)
          {
            if (
buf[3] == 255 && buf[4] == 127){
            
DATA[22] = 0x20;DATA[23] = 0x20;DATA[24] = 0x20;DATA[25] = 0x2D;DATA[26] = 0x2D;DATA[27] = 0x3A;DATA[28] = 0x2D;DATA[29] = 0x2D;}
            else {
            
converter(buf[0]);
            
DATA[22] = digit1;
            
DATA[23] = digit2;
            
DATA[24] = 0x2D;
            
converter(buf[3]);
            
DATA[25] = digit1;
            
DATA[26] = digit2;
            
DATA[27] = 0x3A;
            
converter(buf[4]);
            
DATA[28] = digit1;
            
DATA[29] = digit2;
            }  
          }
if (
DATA[17] == 0x04) {
          if(
canId == 0x162DATA[19] = buf[3];
          if(
canId == 0x1A2DATA[20] = buf[0];
          if(
canId == 0x1E2)
          {
            if (
buf[3] == 255 && buf[4] == 127){
            
DATA[22] = 0x20;DATA[23] = 0x20;DATA[24] = 0x20;DATA[25] = 0x2D;DATA[26] = 0x2D;DATA[27] = 0x3A;DATA[28] = 0x2D;DATA[29] = 0x2D;}
            else {
            
converter(buf[0]);
            
DATA[22] = digit1;
            
DATA[23] = digit2;
            
DATA[24] = 0x2D;
            
converter(buf[3]);
            
DATA[25] = digit1;
            
DATA[26] = digit2;
            
DATA[27] = 0x3A;
            
converter(buf[4]);
            
DATA[28] = digit1;
            
DATA[29] = digit2;
            }
          }
}

if(
canId == 0x265) {
bitWrite(DATA[21],6,bitRead(buf[0],4));
bitWrite(DATA[30],0,bitRead(buf[1],7));
bitWrite(DATA[30],1,bitRead(buf[1],6));
bitWrite(DATA[30],2,bitRead(buf[1],5));
bitWrite(DATA[30],3,bitRead(buf[0],5));
bitWrite(DATA[30],4,bitRead(buf[0],2));
DATA[32] = buf[2];
DATA[33] = buf[3];
}

          if(
canId == 0x21F)
          {
          
bitWrite(DATA[34],0,bitRead(buf[0],7));
          
bitWrite(DATA[34],1,bitRead(buf[0],6));
          if(
bitRead(buf[0],3) == && bitRead(buf[0],2) == 1bitWrite(DATA[34],2,1); else bitWrite(DATA[34],2,0);
          if(
bitRead(buf[0],3) == && bitRead(buf[0],2) == 0bitWrite(DATA[34],3,1); else bitWrite(DATA[34],3,0);
          if(
bitRead(buf[0],2) == && bitRead(buf[0],3) == 0bitWrite(DATA[34],4,1); else bitWrite(DATA[34],4,0);
          
bitWrite(DATA[34],5,bitRead(buf[0],1));
          
DATA[37] = buf[1];
          }

          if(
canId == 0x3E5)
          {
          
bitWrite(DATA[34],6,(bitRead(buf[0],6)));
          
bitWrite(DATA[34],7,(bitRead(buf[0],4)));
          
bitWrite(DATA[35],0,(bitRead(buf[0],0)));
          
bitWrite(DATA[35],1,(bitRead(buf[1],6)));
          
bitWrite(DATA[35],2,(bitRead(buf[1],4)));
          
bitWrite(DATA[35],3,(bitRead(buf[1],0)));
          
bitWrite(DATA[35],4,(bitRead(buf[2],6)));
          
bitWrite(DATA[35],5,(bitRead(buf[2],4)));
          
bitWrite(DATA[35],6,(bitRead(buf[2],2)));
          
bitWrite(DATA[35],7,(bitRead(buf[5],6)));
          
bitWrite(DATA[36],0,(bitRead(buf[5],4)));
          
bitWrite(DATA[36],1,(bitRead(buf[5],2)));
          
bitWrite(DATA[36],2,(bitRead(buf[5],0)));
          }
  }


//delay(2); //Не знаю зачем, но без этого и со строкой выше высыпается каша!
arrcmp memcmp(DATA,DATA2,161);
if ((
millis() - time0) > 100 && arrcmp != 0){
  
Serial.write(DATA161);
  
memcpy(DATA2,DATA,161);
  
time0 millis();}  
}

void converter(int inpint){
              if (
inpint 10){
                
digit1 48;
                
digit2 inpint 48;
              }
              else{
                if (
inpint 89) {digit1 48digit2 inpint 42;}
                else if (
inpint 79) {digit1 48digit2 inpint 32;}
                     else if (
inpint 69) {digit1 48digit2 inpint 22;}
                          else if (
inpint 59) {digit1 48digit2 inpint 12;}
                               else if (
inpint 49) {digit1 48digit2 inpint 2;}
                                    else if (
inpint 39) {digit1 48digit2 inpint 8;}
                                         else if (
inpint 29) {digit1 48digit2 inpint 18;}
                                              else if (
inpint 19) {digit1 48digit2 inpint 28;}
                                                   else if (
inpint 9) {digit1 48digit2 inpint 38;}
              }
}

void multiframef(){
              if (
LengthP 7)
              {
                for (
int i=07;i++) MULTIFRAMETMP[DataBufSize] = buf[i+1];
                
DataBufSize DataBufSize 7;
                
LengthP LengthP 7;
              }
              else{
                for (
int i=0LengthP;i++) MULTIFRAMETMP[DataBufSize] = buf[i+1];
                
LengthP 0;
              }
}

void multiframeRF(){
              if (
LengthR 7)
              {
                for (
int i=07;i++) DATA[DataBufSizeR] = buf[i+1];
                
DataBufSizeR DataBufSizeR 7;
                
LengthR LengthR 7;
              }
              else{
                for (
int i=0LengthR;i++) DATA[DataBufSizeR] = buf[i+1];
                
LengthR 0;
              }


Последний раз редактировалось T_r_D; 25.03.2016 в 00:18.
T_r_D вне форума   Ответить с цитированием
Ответ


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

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

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



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


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