Facebook
From Baby Armadillo, 1 Year ago, written in Plain Text.
Embed
Download Paste or View Raw
Hits: 93
  1.  
  2.  
  3. #include <mcp_can.h>                        //подключили библиотеку can
  4. #include <SPI.h>
  5.  
  6. long unsigned int rxId;
  7. unsigned char len = 0;
  8. unsigned char rxBuf[8];
  9. unsigned char txBuf[8];
  10. unsigned char rxBuf_dec [16];
  11. char msgString[128];                        // Array to store serial string
  12. //char time_start[16];
  13. //byte time_out[8];
  14. void GetSort();
  15. #define CAN2_INT 2                              // Set INT to pin 2
  16.  
  17. MCP_CAN CAN2(10);                               // Set CS to pin 10
  18.    
  19.    //нажатие кнопок на новом руле
  20.    
  21.    long unsigned int new_button_id = 0x4A1;
  22.    
  23.    byte new_vol_up[8] = {0x00, 0x40, 0x00, 0xB4, 0x00, 0x00, 0x40, 0x00};
  24.    byte new_vol_down[8] = {0x00, 0x20, 0x00, 0xB4, 0x00, 0x00, 0x40, 0x00};
  25.    byte new_prev[8] = {0x00, 0x08, 0x00, 0xB4, 0x00, 0x00, 0x40, 0x00};
  26.    //byte new_prev_long[8] = {0x00, 0x08, 0x00, 0xB4, 0x00, 0x00, 0x40, 0x00};
  27.    byte new_next[8] = {0x00, 0x10, 0x00, 0xB4, 0x00, 0x00, 0x40, 0x00};
  28.    //byte new_next_long[8] = {0x00, 0x10, 0x00, 0xB4, 0x00, 0x00, 0x40, 0x00};
  29.    byte new_mode[8] = {0x00, 0x00, 0x00, 0xB4, 0x00, 0x00, 0x50, 0x00};
  30.    byte new_green_phone[8] = {0x00, 0x00, 0x00, 0xB4, 0x00, 0x00, 0x48, 0x00};
  31.    byte new_red_phone[8] = {0x00, 0x04, 0x00, 0xB4, 0x00, 0x00, 0x40, 0x00};
  32.    byte new_voice[8] = {0x00, 0x02, 0x00, 0xB4, 0x00, 0x00, 0x40, 0x00};
  33.  
  34.    //время и дата новый магниофон
  35.  
  36.    long unsigned int new_time = 0x4D2;
  37.  
  38.    //нажатие кнопок на старом руле
  39.    
  40.    long unsigned int old_button_id = 0x02002080;
  41.    
  42.    byte old_next[8] = {0x08, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01};          //Сравниваем только 1 и 6 бит
  43.    byte old_next_long[8] = {0x08, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x01};     //Сравниваем только 1 и 6 бит
  44.    byte old_vol_up[8] = {0x01, 0x00, 0x01, 0x00, 0x00, 0x21, 0x00, 0x01};        //Сравниваем только 1 и 3 бит
  45.    byte old_vol_down[8] = {0x01, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x01};      //Сравниваем только 1 и 3 бит
  46.    byte old_prev[8] = {0x08, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x01};          //Сравниваем только 1 и 6 бит
  47.    byte old_prev_long[8] = {0x08, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x01};     //Сравниваем только 1 и 6 бит
  48.    byte old_rt[8] = {0x04, 0x00, 0x00, 0x00, 0x40, 0x28, 0x00, 0x01};            //Сравниваем только 1 бит
  49.    byte old_voice[8] = {0x10, 0x00, 0x00, 0x00, 0x40, 0x28, 0x00, 0x01};         //Сравниваем только 1 бит
  50.        
  51.     //время и дата старый магниофон
  52.  
  53.   long unsigned int old_time = 0x03FC0080;
  54.  
  55.   byte time_start[16] = {0x0, 0x1, 0x0, 0x0, 0x3, 0x1, 0x3, 0x3, 0x3, 0xA, 0x3, 0x1, 0x3, 0x7, 0x2, 0x0};
  56.   byte time_out[8] = {0x01, 0x00, 0x31, 0x30, 0x3A, 0x35, 0x35, 0x20};
  57.    
  58.     //CAN2.readMsgBuf(&rxId, &len, rxBuf)
  59.    
  60.  
  61.  
  62.  
  63. void setup()
  64. {
  65.    Serial.begin(115200);                           //скорость монитора порта
  66.  
  67.   // Инициализируем кан модул
  68.  
  69.   if(CAN2.begin(MCP_STDEXT, CAN_125KBPS, MCP_20MHZ) == CAN_OK)  // STD - фильтр кан, скорость кан, частота чего то
  70.     Serial.println("MCP2515 Initialized Successfully!");
  71.   else
  72.     Serial.println("Error Initializing MCP2515...");
  73.  
  74.     CAN2.setMode(MCP_NORMAL);                     // Режим работы кан модуль нормальный
  75.    
  76.    CAN2.init_Mask(0,1,0x0FFFFFFF);                // Init first mask...
  77.    CAN2.init_Filt(0,1,0x02002080);                // Init first filter...
  78.    CAN2.init_Filt(1,1,0x03FC0080);                // Init second filter...
  79.  
  80.    CAN2.init_Mask(1,0,0x0FFF0000);                // Init second mask...
  81.    CAN2.init_Filt(2,0,0x04D20000);                // Init third filter...
  82.    CAN2.init_Filt(3,0,0x04A10000);                // Init fouth filter...
  83.    CAN2.init_Filt(4,0,0x04D20000);                // Init fifth filter...
  84.    CAN2.init_Filt(5,0,0x04D20000);                // Init sixth filter...
  85.    
  86.     Serial.println("MCP2515_2 Library Receive Example...");
  87.    
  88. }
  89.  
  90.  byte test[8] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07};
  91.  
  92.    
  93. void loop() {
  94.  
  95.  
  96.     if(!digitalRead(CAN2_INT)){                       // Если появилась информация на CAN2
  97.  
  98.       //начинаем искать нажатие кнопок на стором руле
  99.  
  100.        CAN2.readMsgBuf(&rxId, &len, rxBuf);      // Read data: len = data length, buf = data byte(s)
  101.  
  102.       if((rxId & 0x1FFFFFFF) == old_button_id) {                         //Проверяем ID пакета
  103.                                            
  104.                  if (rxBuf[0] == old_next[0]){
  105.                     if (rxBuf[5] == old_next[5]){
  106.                         CAN2.sendMsgBuf(new_button_id, 8, new_next);
  107.                     }
  108.                  }
  109.                  // if (rxBuf[0] == old_next_long[0]){
  110.                  //   if (rxBuf[5] == old_next_long[5]){
  111.                  //       CAN2.sendMsgBuf(new_button_id, 8, new_next_long);
  112.                  //   }
  113.                 // }
  114.                   if (rxBuf[0] == old_vol_up[0]){
  115.                     if (rxBuf[2] == old_vol_up[2]){
  116.                         CAN2.sendMsgBuf(new_button_id, 8, new_vol_up);
  117.                     }
  118.                  }
  119.                   if (rxBuf[0] == old_vol_down[0]){
  120.                     if (rxBuf[2] == old_vol_down[2]){
  121.                         CAN2.sendMsgBuf(new_button_id, 8, new_vol_down);
  122.                     }
  123.                  }
  124.                   if (rxBuf[0] == old_prev[0]){
  125.                     if (rxBuf[5] == old_prev[5]){
  126.                         CAN2.sendMsgBuf(new_button_id, 8, new_prev);
  127.                     }
  128.                  }
  129.                 // if (rxBuf[0] == old_prev_long[0]){
  130.                 //   if (rxBuf[5] == old_prev_long[5]){
  131.                 //       CAN2.sendMsgBuf(new_button_id, 8, new_prev_long);
  132.                 //   }
  133.                 // }
  134.                   if (rxBuf[0] == old_rt[0]){
  135.                       CAN2.sendMsgBuf(new_button_id, 8, new_mode);
  136.                    
  137.                  }
  138.                   if (rxBuf[0] == old_voice[0]){
  139.                       CAN2.sendMsgBuf(new_button_id, 8, new_voice);
  140.               }
  141.          }          
  142.    
  143.    //            int i=0;
  144.    //            for (i=0;i<8;i++)  {
  145.    //              if (rxBuf[i] == test[i]);                    
  146.    //               else break ;
  147.    //                   if (i == 7) {
  148.    //                      CAN2.sendMsgBuf(new_button_id, 8, new_next);
  149.          
  150.        
  151.          
  152.       //CAN2.readMsgBuf(&rxId, &len, rxBuf);      // Read data: len = data length, buf = data byte(s)
  153.  
  154.      if( rxId == new_time) {                         //Проверяем ID пакета
  155.      GetSort();
  156.      CAN2.sendMsgBuf(old_time, 1, 8, time_out);
  157.       }
  158.  
  159.      
  160.       CAN2.readMsgBuf(&rxId, &len, rxBuf);      // Read data: len = data length, buf = data byte(s)
  161.      
  162.       if((rxId & 0x80000000) == 0x80000000)     // Determine if ID is standard (11 bits) or extended (29 bits)
  163.      
  164.       sprintf(msgString, "Extended ID: 0x%.8lX  DLC: %1d  Data:", (rxId & 0x1FFFFFFF), len);
  165.       else
  166.       sprintf(msgString, "Standard ID: 0x%.3lX       DLC: %1d  Data:", rxId, len);
  167.  
  168.       Serial.print(msgString);
  169.  
  170.    if((rxId & 0x40000000) == 0x40000000){    // Determine if message is a remote request frame.
  171.       sprintf(msgString, " REMOTE REQUEST FRAME");
  172.       Serial.print(msgString);
  173.     } else {
  174.      for(byte i = 0; i<len; i++){
  175.         sprintf(msgString, " 0x%.2X", rxBuf[i]);
  176.        Serial.print(msgString);
  177.       }
  178.     }
  179.        
  180.     Serial.println();
  181.      
  182.     }
  183. }
  184.  
  185.  
  186. void GetSort()
  187. {
  188.   //CAN2.readMsgBuf(&rxId, &len, rxBuf);
  189.   for (int n = 0; n<len; n++)
  190.   {
  191.     rxBuf_dec[2*n] = rxBuf[n] / 16;
  192.     rxBuf_dec[2*n+1] = rxBuf[n] % 16;
  193.     printf("\n%d %d %d",rxBuf[n],rxBuf_dec[2*n], rxBuf_dec[2*n+1]);
  194.    
  195.   }
  196.  
  197.   //for (int n = 4; n<len; n++)//ну или тупо ячейка к ячейке
  198.  // {
  199.  //   time_start[n] = rxBuf_dec[n+5];
  200.  // }
  201.  
  202.   time_start[5] = rxBuf_dec[10];
  203.   time_start[7] = rxBuf_dec[11];
  204.   time_start[11] = rxBuf_dec[12];
  205.   time_start[13] = rxBuf_dec[13];
  206.  
  207.   for (int n = 0; n<len*2; n=n+2)
  208.  {
  209.   time_out[n] =  rxBuf_dec[n]+rxBuf_dec[n+1]*16;
  210.  }
  211.  
  212.  
  213. }