вот полный код
PHP код:
#include <SPI.h>
#include "mcp_can.h"
MCP_CAN CAN(10);
unsigned char len = 0;
unsigned char buf[8];
INT32U canId = 0x000; // идентификаторы могут быть 11-ти или 29-битные
int LengthP;
int DataBuf[100];
int DataBufSize;
void setup()
{
Serial.begin(38400);
pinMode(9, INPUT);
START_INIT:
if(CAN_OK == CAN.begin(CAN_125KBPS,MCP_8MHz))
{Serial1.println("Init OK!");}
else
{Serial1.println("Init fail");delay(100);goto START_INIT;}
}
void loop()
{
// if(CAN_MSGAVAIL == CAN.checkReceive()) // check if data coming
if(!digitalRead(9))
{
CAN.readMsgBuf(&len, buf);
canId = CAN.getCanId();
if(canId == 293) // 125HEX
{
Serial.println("PKG");
if ((buf[0] >> 4) == 0x01)
{
LengthP = (buf[0] & 0x0F * 256 + buf[1]) - (len - 2);
for (int i=0; i<len;i++){
DataBuf[i] = buf[i];
DataBufSize = i;
}
Serial.print("FIRST Length=");
Serial.println(LengthP);
}
if(((buf[0] >> 4) == 0x02) && LengthP > 0){
int Length2 = LengthP - len;
Serial.print("SECOND Length=");
Serial.print(LengthP);
Serial.print(" len=");
Serial.println(len);
if (Length2 > len){
Serial.println("SECOND>>> Length=");
Serial.print(LengthP);
Serial.print(" len=");
Serial.println(len);
for (int i = 0; i < len;i++){
DataBuf[i+DataBufSize] = buf[i];
}
DataBufSize = DataBufSize + len;
}
else{
Serial.println("SECOND2>>> Length=");
Serial.print(LengthP);
Serial.print(" len=");
Serial.println(len);
for (int i=0; i < LengthP;i++){
DataBuf[i + DataBufSize] = buf[i];
}
DataBufSize = DataBufSize + LengthP;
for (int i; i < DataBufSize;i++){
Serial.print(DataBuf[i], HEX);
}
Serial.println(" ");
}
}
}
}
}