Òåìà: CITROEN-ARDUINO
Ïîêàçàòü ñîîáùåíèå îòäåëüíî
Ñòàðûé 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 âíå ôîðóìà   Îòâåòèòü ñ öèòèðîâàíèåì