MCP_2515 чтение и замена пакетов CAN

SabitofF
Offline
Зарегистрирован: 22.12.2021

Всем доброго времени суток! Прошу помощи в написании скетча для ардуинки. Суть задачи: словить пакет из Кан шины с Id 0x271 и при его проявлении отправлять пакет 0x575.

В данный момент написал скетч который работает от питания хотелось бы реализовать программное включение и отключение устройств.

SabitofF
Offline
Зарегистрирован: 22.12.2021
#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);}

}

 

sadman41
Offline
Зарегистрирован: 19.10.2016

Нужно подменять пакет, но написал скетч с powerdown? Логично.

Может попробуете для тупых объяснить взаимосвязь?

b707
Онлайн
Зарегистрирован: 26.05.2017

Тс, колитесь, где тут подмена пакетов?
Или это хитрый заход такой - мол, начнут поправлять, заодно и код напишут? :)

SabitofF
Offline
Зарегистрирован: 22.12.2021

b707 пишет:
Тс, колитесь, где тут подмена пакетов?

а где я сказал что данный скетч отправляет или заменяет какие-то пакеты…это скетч работает от нажатия на кнопку ( а точнее от включения зажигания). А мне хотелось бы сделать так чтобы избавиться от не нужных проводов и взять все из Кан шины… То есть в данный момент у меня включённые зажигание именно такой вид I’d 271, 2 , 0 {0х10, 0х00} у авто после 2014 года id 575, 2 , 0 {0х10, 0х00}. Хочу отслеживать в шине этот пакет и при его появлении параллельно отправлять 575…

библиотекой пользоваться не умею и нет кто бы мог подсказать/научить. Не знаю какие команды и за что отвечают. Какими образом читать сообщения из шины Кан. По этому и пришёл сюда 

SabitofF
Offline
Зарегистрирован: 22.12.2021

Не подменять, а после появления 0х271 пакета в шине, отправлять в шину 0х575. Какими командами читать сообщения из шины и сравнивать байты?

sadman41
Offline
Зарегистрирован: 19.10.2016