Это вот этот человек.
Где-то на форуме его так называли. Как его зовут на самом деле понятия не имею.
https://github.com/felHR85/UsbSerial
На самом деле дело было не в дровах, а в посылках. Если передавать с промикры в виде чисел, то не фига не работает. Нужно жёстко указать что передаём стринг.
Короче вот так надо передавать
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-битные
unsigned long time0 = -120;
//TRIP
//RPM|SPD|LPK|AVG.LPK|AVG_SPD|Trp|Tmp
// /100 /10 /10 делить на
int OUTLINES[] = {0,0,0,-1,-1,0,0,-1,-1,-1};
int OUTLINES2[] = {0,0,0,-1,-1,0,0,-1,-1,-1};
//Кнопки на руле
int SWSV = 0;
//Меню аудио настроек
int AP = 0;
int APV = 0;
String AUDIO, AUDIO2 ="0:0";
//Банды, частота
int RB = 0;
float RFR = 0;
String BANDFREQ, BANDFREQ2 = "0:0";
//RDS
String RDS ="NO RDS";
void setup()
{
Serial1.begin(38400);
pinMode(9, INPUT);
delay(10000);
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())
if(!digitalRead(9)) // пин 9 можно переназначить
{
CAN.readMsgBuf(&len, buf);
canId = CAN.getCanId();
//_________________________________TRIP___________________________________
if(canId == 182) //0B6
{
OUTLINES[0] = (int)buf[0] << 5 | buf[1] >> 3; //Обороты
OUTLINES[1] = ((int)buf[2] << 8 | buf[3]); //скорость / 100
}
if(canId == 545) //221
{
OUTLINES[2] = (int)buf[1] << 8 | buf[2]; //моментальный расход / 10, если -1 то показаний нет
//ARCFL = (int)buf[3] << 8 | buf[4]; //Километры на остатке топлива
}
if(canId == 673) //0B6
{
OUTLINES[3] = (int)buf[3] << 8 | buf [4]; //Расход на 100км /10
OUTLINES[4] = buf[0]; //Средняя скорость
OUTLINES[5] = ((int)buf[1] << 8 | buf [2]); //Трип
}
if(canId == 246) //0F6
{
OUTLINES[6] = (buf[6] / 2) - 39; //Температура
//Odometr = ((unsigned long)buf[2] << 16 | (unsigned int)buf[3] << 8 | buf[4])/10; //Там есть десятые километра
}
//______________________________ERROR MSG_________________________________
if(canId == 417) //1A1
{
if(buf[0] == 128) //buf[2]bit[1] X00000000 X=1 when SHOW 0R buf[0] 0x80(128) show, 0x7F(127) hide, 0xff(255) clear (default)
{
OUTLINES[7] = buf[1];
} else {OUTLINES[7] = -1;}
}
//_________________________________VOLUME_________________________________
if(canId == 421) //1A5
{
OUTLINES[8] = buf[0];
}
//_________________________Кнопки на руле справа__________________________
if(canId == 543) //21F
{
/* SWSV = buf[1];
if(bitRead(buf[0],7) == 0 && bitRead(buf[0],6) == 0 && bitRead(buf[0],3) == 0 && bitRead(buf[0],2) == 0 && bitRead(buf[0],1) == 0){OUTLINES[8] = -1;} //Release
if(bitRead(buf[0],7) == 1){OUTLINES[8] = 1;} //Forward
if(bitRead(buf[0],6) == 1){OUTLINES[8] = 2;} //Backward
if(bitRead(buf[0],3) == 1 && bitRead(buf[0],2) == 1){OUTLINES[8] = 3;} //Mute
if(bitRead(buf[0],3) == 1 && bitRead(buf[0],2) == 0){OUTLINES[8] = 4;} //Vol Up
if(bitRead(buf[0],2) == 1 && bitRead(buf[0],3) == 0){OUTLINES[8] = 5;} //Vol Down
if(bitRead(buf[0],1) == 1){OUTLINES[8] = 6;} //Source */
}
//__________________________Меню настройки аудио__________________________
if(canId == 485) //1E5
{
AP = 0;
APV = 0;
if (bitRead(buf[0],7) == 1){AP = 1; APV = (buf[0] & 0x7F) - 63;} //BALANCE L/R ||логическое И с 01111111. Где 0 там всегда 0
if (bitRead(buf[1],7) == 1){AP = 2; APV = (buf[1] & 0x7F) - 63;} //BALANCE RR/FF
if (bitRead(buf[2],7) == 1){AP = 3; APV = (buf[2] & 0x7F) - 63;} //BASS
if (bitRead(buf[4],7) == 1){AP = 4; APV = (buf[4] & 0x7F) - 63;} //TREBLE
if (bitRead(buf[5],7) == 1){AP = 5; APV = bitRead(buf[5],6);} //LOUD
if (bitRead(buf[5],4) == 1){AP = 6; APV = bitRead(buf[5],2);} //AUTO VOLUME
if (bitRead(buf[6],6) == 1){AP = 7;
if ((buf[6] & 0x1F) == 3){APV = 1;} //NONE ||//Логическое И c 00011111
if ((buf[6] & 0x1F) == 7){APV = 2;} //CLASSIC
if ((buf[6] & 0x1F) == 11){APV = 3;} //JAZZ-BLUES
if ((buf[6] & 0x1F) == 15){APV = 4;} //POP-ROCK
if ((buf[6] & 0x1F) == 19){APV = 5;} //VOCAL
if ((buf[6] & 0x1F) == 23){APV = 6;} //TECHNO
}
AUDIO = String(AP) + ":" + String(APV);
}
//_______________Включено или нет радио, источник на радио________________
if(canId == 357) //165
{
if (buf[0] == 192){OUTLINES[9] = 1;} else {OUTLINES[9] = 0;} //ON/OFF
if (buf[2] == 16){OUTLINES[9] = 2;} //Radio
if (buf[2] == 32){OUTLINES[9] = 3;} //CD
if (buf[2] == 48){OUTLINES[9] = 4;} //CD-Changer
if (buf[2] == 64){OUTLINES[9] = 5;} //AUX 1
if (buf[2] == 80){OUTLINES[9] = 6;} //AUX 2
}
//_________________________Банды и частота радио__________________________
//первые 2 меняются иногда, последнии 3 незнамо что (мусор или уровень сигнала),
//частота и мусор не пропадают при отключении магнитолы
if(canId == 549) //225
{
if (bitRead(buf[2],4) == 1){RB = 0; RFR = (int)buf[3] << 8 | buf[4];RFR = RFR / 20 + 50;}//FM1
if (bitRead(buf[2],5) == 1){RB = 1; RFR = (int)buf[3] << 8 | buf[4];RFR = RFR / 20 + 50;}//FM2
if (bitRead(buf[2],6) == 1){RB = 2; RFR = (int)buf[3] << 8 | buf[4];RFR = RFR / 20 + 50;}//FM AST
if (bitRead(buf[2],4) == 1 && bitRead(buf[2],6) == 1){RB = 3; RFR = (int)buf[3] << 8 | buf[4];}//AM
BANDFREQ = String(RB) + ":" + String(RFR);
}
//________________________________RDS_____________________________________
if(canId == 677) //2A5
{
for(int i = 0; i<len; i++)
{
RDS = RDS + buf[i];
}
}
//Выводим данные.
/*
Serial.print("Steering while valcoder value:"); Serial.print(SWSV); Serial.print(" | ");
*/
if ((OUTLINES[0] != OUTLINES2[0] ||
OUTLINES[1] != OUTLINES2[1] ||
OUTLINES[2] != OUTLINES2[2] ||
OUTLINES[3] != OUTLINES2[3] ||
OUTLINES[4] != OUTLINES2[4] ||
OUTLINES[5] != OUTLINES2[5] ||
OUTLINES[6] != OUTLINES2[6] ||
OUTLINES[7] != OUTLINES2[7] ||
OUTLINES[8] != OUTLINES2[8] ||
AUDIO != AUDIO2 ||
OUTLINES[9] != OUTLINES2[9] ||
BANDFREQ != BANDFREQ2) &&
(millis() - time0) > 100)
{String s = String(OUTLINES[0]) + "|" +
String(OUTLINES[1]) + "|" +
String(OUTLINES[2]) + "|" +
String(OUTLINES[3]) + "|" +
String(OUTLINES[4]) + "|" +
String(OUTLINES[5]) + "|" +
String(OUTLINES[6]) + "|" +
String(OUTLINES[7]) + "|" +
String(OUTLINES[8]) + "|" +
AUDIO + "|" +
String(OUTLINES[9]) + "|" +
BANDFREQ;
Serial.print(s);
OUTLINES2[0] = OUTLINES[0];
OUTLINES2[1] = OUTLINES[1];
OUTLINES2[2] = OUTLINES[2];
OUTLINES2[3] = OUTLINES[3];
OUTLINES2[4] = OUTLINES[4];
OUTLINES2[5] = OUTLINES[5];
OUTLINES2[6] = OUTLINES[6];
OUTLINES2[7] = OUTLINES[7];
OUTLINES2[8] = OUTLINES[8];
AUDIO2 = AUDIO;
OUTLINES2[9] = OUTLINES[9];
BANDFREQ2 = BANDFREQ;
time0 = millis();
}
}
}