MCP_2515 чтение и замена пакетов CAN
- Войдите на сайт для отправки комментариев
Ср, 22/12/2021 - 23:48
Всем доброго времени суток! Прошу помощи в написании скетча для ардуинки. Суть задачи: словить пакет из Кан шины с Id 0x271 и при его проявлении отправлять пакет 0x575.
В данный момент написал скетч который работает от питания хотелось бы реализовать программное включение и отключение устройств.
#include <GyverPower.h> #include <SPI.h> #include <mcp_can.h> int pin_KEY = 2; MCP_CAN CAN0(10); // Set CS to pin 10 const int MCP_CAN_INT = 3; // прерывание. Нужно для получения сообщений с шины MCP2515 CAN0(10); void setup() { Serial.begin(115200); // Initialize MCP2515 running at 8MHz with a baudrate of 100kb/s and the masks and filters disabled. if(CAN0.begin(MCP_ANY, CAN_100KBPS, MCP_8MHZ) == CAN_OK) Serial.println("MCP2515 Initialized Successfully!"); else Serial.println("Error Initializing MCP2515..."); CAN0.setMode(MCP_NORMAL); // Change to normal mode to allow messages to be transmitted // кнопка подключена к GND и D2, pinMode(pin_KEY,INPUT_PULLUP); // pinMode(pin_LIGHT,INPUT); // подключаем прерывание на пин D2 (Arduino NANO) attachInterrupt(0, wakeup, RISING); // глубокий сон power.setSleepMode(POWERDOWN_SLEEP); } byte data_key_out[1] = {0x10}; //ключ не в замке byte data_ign[1] = {0x07}; //включено зажигание // обработчик аппаратного прерывания void wakeup() { // в отличие от sleepDelay, ничего вызывать не нужно! } void send_key_out(){ CAN0.sendMsgBuf(0x575, 0, 1, data_key_out); Serial.println("CAN send: KEY OUT"); delay(100);} void send_ign(){ CAN0.sendMsgBuf(0x575, 0, 1, data_ign); Serial.println("CAN send: IGN"); delay(100);} void loop() { if (digitalRead(pin_KEY)==HIGH){ Serial.println("IGN"); send_ign();} else if(digitalRead(pin_KEY)==LOW) { Serial.println("KEY OUT"); send_key_out(); power.sleep(SLEEP_FOREVER);} }Нужно подменять пакет, но написал скетч с powerdown? Логично.
Может попробуете для тупых объяснить взаимосвязь?
Тс, колитесь, где тут подмена пакетов?
Или это хитрый заход такой - мол, начнут поправлять, заодно и код напишут? :)
а где я сказал что данный скетч отправляет или заменяет какие-то пакеты…это скетч работает от нажатия на кнопку ( а точнее от включения зажигания). А мне хотелось бы сделать так чтобы избавиться от не нужных проводов и взять все из Кан шины… То есть в данный момент у меня включённые зажигание именно такой вид I’d 271, 2 , 0 {0х10, 0х00} у авто после 2014 года id 575, 2 , 0 {0х10, 0х00}. Хочу отслеживать в шине этот пакет и при его появлении параллельно отправлять 575…
библиотекой пользоваться не умею и нет кто бы мог подсказать/научить. Не знаю какие команды и за что отвечают. Какими образом читать сообщения из шины Кан. По этому и пришёл сюда
Не подменять, а после появления 0х271 пакета в шине, отправлять в шину 0х575. Какими командами читать сообщения из шины и сравнивать байты?
Не подмена, а замена. ОК.
https://github.com/coryjfowler/MCP_CAN_lib/blob/master/examples/CAN_rece...