Передача в Can шину
- Войдите на сайт для отправки комментариев
Привет всем.
Встала задача сделать устройство, передающее в кан-шину некоторые данные.
Собрал связку Arduino Nano и MCP2515. Залил небольшой скетч (я не автор). Нужные мне данные передаются в правильном виде, но только один пакет. Мне нужно на один и тот же ID передать раздельно 4 разных пакета по командам с 4-х цифровых входов. Команды дискретные, 1 или 0. Есть сигнал на нужном входе - передаются нужные данные. Если ни на одном сигнала нет - передается пакет по-умолчанию.
У меня только поверхностные знания об Arduino. Пытался сам что-то изобразить в коде, но получилось только
назначить нужные входы и подтянуть их к питанию.
В скетче ID и данные нулевые, подставлял нужное и все получалось.
Помогите, пожалуйста, собрать код. Я мастер спаять что угодно, но с программированием туго.
#include <SPI.h> //Library for using SPI Communication #include <mcp2515.h> //Library for using CAN Communication const int P=9; const int R=8; const int N=7; const int D=6; struct can_frame canMsg; MCP2515 mcp2515(10); void setup(){ pinMode(9, INPUT_PULLUP); pinMode(8, INPUT_PULLUP); pinMode(7, INPUT_PULLUP); pinMode(6, INPUT_PULLUP); SPI.begin(); //Begins SPI communication mcp2515.reset(); mcp2515.setBitrate(CAN_500KBPS, MCP_8MHZ); //Sets CAN at speed 500KBPS and Clock 8MHz mcp2515.setNormalMode(); } void loop(){ canMsg.can_id = 0x000; //CAN id as 0x000 canMsg.can_dlc = 8; //CAN data length as 8 canMsg.data[0] = 0x00; canMsg.data[1] = 0x00; canMsg.data[2] = 0x00; canMsg.data[3] = 0x00; canMsg.data[4] = 0x00; canMsg.data[5] = 0x00; canMsg.data[6] = 0x00; canMsg.data[7] = 0x00; mcp2515.sendMessage(&canMsg); //Sends the CAN message delay(5); }
"3" в квадратных скобках это массив?
Сам массив нужно создать?
Я задаю глупые вопросы, для меня здесь ничего очевидного нет.
Понял наверное. Это знакоместо в ряду...
Попробовал просто строку вставить.
Ругается на if. Он вроде не должен быть один.
С маленькой буквы if. Телефон самовольничает.
Точно)
Буду копать
Sadman41 Спасибо за помощь!
Отправляя пакеты с частотой раз в 5 мс, можно уложить шину, в момент когда она нагружена. Сделайте хотя бы 30...50
Уже приходила такая мысль.
Спасибо)
Всё, что в loop желательно оформить отдельной функцией/процедурой.
И по if вызывать с нужным параметром. Т.к. будет и шина нагружена и ардуино.
Да, CAN, лучше от 200 мс "бомбить".
А можно поинтересоваться, что за ручка КПП? Она по CAN состояния не передаёт?
Всё, что в loop желательно оформить отдельной функцией/процедурой.
И по if вызывать с нужным параметром. Т.к. будет и шина нагружена и ардуино.
Да, CAN, лучше от 200 мс "бомбить".
А можно поинтересоваться, что за ручка КПП? Она по CAN состояния не передаёт?
Ручка обычная, дискретные сигналы. Панель с CAN.
Я не программист, выше уже отметил это. То, что вы написали, я не реализую.
Привет всем. Эпопея продолжается.
Проблема появилась. Вернее она с самого начала была.
Вся эта связка Arduino+MCP2515 можно сказать рабочая.
Нужная информация на табло появляется, но когда все работает, шина виснет.
Я даже потом убрал в скетче все, что нужно передать. Все-равно будто (по-радиолюбительски)
идет несущая и забивает весь эфир.
Код
Что не так сделано?