#include //подключили библиотеку can #include 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