Вот окончательный скетч который точно работает с одной строчкой, тоесть First Frame + Consecutive Frame. У меня больше 1 Consecutive Frame не идёт с моим дисплеем.
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);
delay (7000);
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
{
if ((buf[0] >> 4) == 0x01)
{
LengthP = ((buf[0] & 0x0F) * 256 + buf[1]) - (len - 2);
DataBufSize = len;
for (int i=0; i<len;i++){
DataBuf[i] = buf[i];
}
}
if(((buf[0] >> 4) == 0x02) && LengthP > 0){
int Length2 = LengthP - len;
if (Length2 > len){
for (int i = 0; i < len;i++){
DataBuf[i + DataBufSize] = buf[i];
}
DataBufSize = DataBufSize + len;
}
else{
for (int i=0; i < LengthP;i++){
DataBuf[i + DataBufSize] = buf[i];
}
DataBufSize = DataBufSize + LengthP;
for (int i=0; i < DataBufSize;i++){
Serial.print(DataBuf[i], HEX);
Serial.print(" ");
}
for (int i=0; i < DataBufSize;i++){
Serial.print(char(DataBuf[i]));
}
Serial.println(" ");
}
}
}
}
}
Выдаёт он вот такое:
10 D 10 1D 12 10 4D 41 21 58 49 4D 55 4D 20 MA!XIMUM
10 D 10 1D 11 10 20 48 21 49 54 20 46 4D 20 H!IT FM
10 D 10 1D 10 10 46 4D 21 20 38 39 2E 39 20 FM! 89.9
10 D 10 1D F 10 45 75 21 72 6F 70 61 20 20 Eu!ropa
10 D 10 1D E 10 44 4F 21 50 4F 2A 48 4F 45 DO!PO*HOE
10 D 10 1D D 10 20 44 21 41 43 48 41 20 20 D!ACHA
10 D 10 1D C 10 20 43 21 4F 4D 45 44 59 20 C!OMEDY
10 D 10 1D B 10 20 42 21 4F 43 54 4F 4B 20 B!OCTOK
10 D 10 1D A 10 42 45 21 53 54 20 46 4D 20 BE!ST FM
10 D 10 1D 9 10 42 45 21 43 48 41 20 46 4D BE!CHA FM
10 D 10 1D 8 10 61 6E 21 73 6F 6E 2E 66 6D an!son.fm
10 D 10 1D 7 10 20 39 21 38 2E 34 20 46 4D 9!8.4 FM
10 D 10 1D 6 10 39 36 21 2C 34 20 46 4D 20 96!,4 FM
10 D 10 1D 5 10 20 39 21 35 2E 36 20 46 4D 9!5.6 FM
10 D 10 1D 4 10 39 30 21 2E 33 20 46 4D 20 90!.3 FM
10 D 10 1D 3 10 38 38 21 2E 37 20 46 4D 20 88!.7 FM
10 D 10 1D 2 10 20 20 21 38 38 2E 33 20 20 !88.3
10 D 10 1D 1 10 31 30 21 37 2E 38 20 46 4D 10!7.8 FM
10 D 10 1D 0 10 31 30 21 36 2C 36 20 46 4D
То что нечитабельными символами в ascii сюда не копируется, но между хексом и нормальным текстом то, что не перевелось в ascii.
Восклицательный знак это 0 байт Consecutive Frame.
При нажатии кнопки LIST при проигрование диска на дисплее отображаются номер трека и звёздочки за место текста (ну его и нет), но в этот ID это почему-то не попадает....