- #include <mcp_can.h> //подключили библиотеку can
- #include <SPI.h>
- long unsigned int rxId;
- unsigned char len = 0;
- unsigned char rxBuf[8];
- unsigned char txBuf[8];
- unsigned char rxBuf_dec [16];
- char msgString[128]; // Array to store serial string
- //char time_start[16];
- //byte time_out[8];
- void GetSort();
- #define CAN2_INT 2 // Set INT to pin 2
- MCP_CAN CAN2(10); // Set CS to pin 10
- //нажатие кнопок на новом руле
- long unsigned int new_button_id = 0x4A1;
- byte new_vol_up[8] = {0x00, 0x40, 0x00, 0xB4, 0x00, 0x00, 0x40, 0x00};
- byte new_vol_down[8] = {0x00, 0x20, 0x00, 0xB4, 0x00, 0x00, 0x40, 0x00};
- byte new_prev[8] = {0x00, 0x08, 0x00, 0xB4, 0x00, 0x00, 0x40, 0x00};
- //byte new_prev_long[8] = {0x00, 0x08, 0x00, 0xB4, 0x00, 0x00, 0x40, 0x00};
- byte new_next[8] = {0x00, 0x10, 0x00, 0xB4, 0x00, 0x00, 0x40, 0x00};
- //byte new_next_long[8] = {0x00, 0x10, 0x00, 0xB4, 0x00, 0x00, 0x40, 0x00};
- byte new_mode[8] = {0x00, 0x00, 0x00, 0xB4, 0x00, 0x00, 0x50, 0x00};
- byte new_green_phone[8] = {0x00, 0x00, 0x00, 0xB4, 0x00, 0x00, 0x48, 0x00};
- byte new_red_phone[8] = {0x00, 0x04, 0x00, 0xB4, 0x00, 0x00, 0x40, 0x00};
- byte new_voice[8] = {0x00, 0x02, 0x00, 0xB4, 0x00, 0x00, 0x40, 0x00};
- //время и дата новый магниофон
- long unsigned int new_time = 0x4D2;
- //нажатие кнопок на старом руле
- long unsigned int old_button_id = 0x02002080;
- byte old_next[8] = {0x08, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01}; //Сравниваем только 1 и 6 бит
- byte old_next_long[8] = {0x08, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x01}; //Сравниваем только 1 и 6 бит
- byte old_vol_up[8] = {0x01, 0x00, 0x01, 0x00, 0x00, 0x21, 0x00, 0x01}; //Сравниваем только 1 и 3 бит
- byte old_vol_down[8] = {0x01, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x01}; //Сравниваем только 1 и 3 бит
- byte old_prev[8] = {0x08, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x01}; //Сравниваем только 1 и 6 бит
- byte old_prev_long[8] = {0x08, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x01}; //Сравниваем только 1 и 6 бит
- byte old_rt[8] = {0x04, 0x00, 0x00, 0x00, 0x40, 0x28, 0x00, 0x01}; //Сравниваем только 1 бит
- byte old_voice[8] = {0x10, 0x00, 0x00, 0x00, 0x40, 0x28, 0x00, 0x01}; //Сравниваем только 1 бит
- //время и дата старый магниофон
- long unsigned int old_time = 0x03FC0080;
- byte time_start[16] = {0x0, 0x1, 0x0, 0x0, 0x3, 0x1, 0x3, 0x3, 0x3, 0xA, 0x3, 0x1, 0x3, 0x7, 0x2, 0x0};
- byte time_out[8] = {0x01, 0x00, 0x31, 0x30, 0x3A, 0x35, 0x35, 0x20};
- //CAN2.readMsgBuf(&rxId, &len, rxBuf)
- void setup()
- {
- Serial.begin(115200); //скорость монитора порта
- // Инициализируем кан модул
- if(CAN2.begin(MCP_STDEXT, CAN_125KBPS, MCP_20MHZ) == CAN_OK) // STD - фильтр кан, скорость кан, частота чего то
- Serial.println("MCP2515 Initialized Successfully!");
- else
- Serial.println("Error Initializing MCP2515...");
- CAN2.setMode(MCP_NORMAL); // Режим работы кан модуль нормальный
- CAN2.init_Mask(0,1,0x0FFFFFFF); // Init first mask...
- CAN2.init_Filt(0,1,0x02002080); // Init first filter...
- CAN2.init_Filt(1,1,0x03FC0080); // Init second filter...
- CAN2.init_Mask(1,0,0x0FFF0000); // Init second mask...
- CAN2.init_Filt(2,0,0x04D20000); // Init third filter...
- CAN2.init_Filt(3,0,0x04A10000); // Init fouth filter...
- CAN2.init_Filt(4,0,0x04D20000); // Init fifth filter...
- CAN2.init_Filt(5,0,0x04D20000); // Init sixth filter...
- Serial.println("MCP2515_2 Library Receive Example...");
- }
- byte test[8] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07};
- void loop() {
- if(!digitalRead(CAN2_INT)){ // Если появилась информация на CAN2
- //начинаем искать нажатие кнопок на стором руле
- CAN2.readMsgBuf(&rxId, &len, rxBuf); // Read data: len = data length, buf = data byte(s)
- if((rxId & 0x1FFFFFFF) == old_button_id) { //Проверяем ID пакета
- if (rxBuf[0] == old_next[0]){
- if (rxBuf[5] == old_next[5]){
- CAN2.sendMsgBuf(new_button_id, 8, new_next);
- }
- }
- // if (rxBuf[0] == old_next_long[0]){
- // if (rxBuf[5] == old_next_long[5]){
- // CAN2.sendMsgBuf(new_button_id, 8, new_next_long);
- // }
- // }
- if (rxBuf[0] == old_vol_up[0]){
- if (rxBuf[2] == old_vol_up[2]){
- CAN2.sendMsgBuf(new_button_id, 8, new_vol_up);
- }
- }
- if (rxBuf[0] == old_vol_down[0]){
- if (rxBuf[2] == old_vol_down[2]){
- CAN2.sendMsgBuf(new_button_id, 8, new_vol_down);
- }
- }
- if (rxBuf[0] == old_prev[0]){
- if (rxBuf[5] == old_prev[5]){
- CAN2.sendMsgBuf(new_button_id, 8, new_prev);
- }
- }
- // if (rxBuf[0] == old_prev_long[0]){
- // if (rxBuf[5] == old_prev_long[5]){
- // CAN2.sendMsgBuf(new_button_id, 8, new_prev_long);
- // }
- // }
- if (rxBuf[0] == old_rt[0]){
- CAN2.sendMsgBuf(new_button_id, 8, new_mode);
- }
- if (rxBuf[0] == old_voice[0]){
- CAN2.sendMsgBuf(new_button_id, 8, new_voice);
- }
- }
- // int i=0;
- // for (i=0;i<8;i++) {
- // if (rxBuf[i] == test[i]);
- // else break ;
- // if (i == 7) {
- // CAN2.sendMsgBuf(new_button_id, 8, new_next);
- //CAN2.readMsgBuf(&rxId, &len, rxBuf); // Read data: len = data length, buf = data byte(s)
- if( rxId == new_time) { //Проверяем ID пакета
- GetSort();
- CAN2.sendMsgBuf(old_time, 1, 8, time_out);
- }
- CAN2.readMsgBuf(&rxId, &len, rxBuf); // Read data: len = data length, buf = data byte(s)
- if((rxId & 0x80000000) == 0x80000000) // Determine if ID is standard (11 bits) or extended (29 bits)
- sprintf(msgString, "Extended ID: 0x%.8lX DLC: %1d Data:", (rxId & 0x1FFFFFFF), len);
- else
- sprintf(msgString, "Standard ID: 0x%.3lX DLC: %1d Data:", rxId, len);
- Serial.print(msgString);
- if((rxId & 0x40000000) == 0x40000000){ // Determine if message is a remote request frame.
- sprintf(msgString, " REMOTE REQUEST FRAME");
- Serial.print(msgString);
- } else {
- for(byte i = 0; i<len; i++){
- sprintf(msgString, " 0x%.2X", rxBuf[i]);
- Serial.print(msgString);
- }
- }
- Serial.println();
- }
- }
- void GetSort()
- {
- //CAN2.readMsgBuf(&rxId, &len, rxBuf);
- for (int n = 0; n<len; n++)
- {
- rxBuf_dec[2*n] = rxBuf[n] / 16;
- rxBuf_dec[2*n+1] = rxBuf[n] % 16;
- printf("\n%d %d %d",rxBuf[n],rxBuf_dec[2*n], rxBuf_dec[2*n+1]);
- }
- //for (int n = 4; n<len; n++)//ну или тупо ячейка к ячейке
- // {
- // time_start[n] = rxBuf_dec[n+5];
- // }
- time_start[5] = rxBuf_dec[10];
- time_start[7] = rxBuf_dec[11];
- time_start[11] = rxBuf_dec[12];
- time_start[13] = rxBuf_dec[13];
- for (int n = 0; n<len*2; n=n+2)
- {
- time_out[n] = rxBuf_dec[n]+rxBuf_dec[n+1]*16;
- }
- }