Здравствуйте. сегодня мы с вами разберем простой пример программы на С++ написанной через IDE для ARDUINO, в качестве драйвера CAN шины используется MCP2515
Выше для вашего внимания указан схема подключения и монтажа, если что будите менять в схеме то, это уже на свой страх и риск.
Ниже приведен очень простой код программы, который позволяет нам работать с CAN шиной и данными которые идут из CAN шины, точнее из OBD II разъема.
#include <mcp2515.h> // Подключаем библиотеку mcp2515
#define led 8 // Указываем какому выводу подключен светодиод
struct can_frame canMsg; //Указываем структуру CAN пакета
MCP2515 mcp2515(10); //Куда подключаем модуль MCP2615
void setup()
{ Serial.begin(115200); // Открываем последовательную связь
pinMode(led, OUTPUT); // Устанавливаем вывод, как выход
digitalWrite(led, HIGH); // Включаем подтягивающий резистор
mcp2515.reset(); // Перегружаем mсp2515
mcp2515.setBitrate(CAN_125KBPS); //Выставляем скорость работы 125.000 бит
mcp2515.setNormalMode();
}
void loop() {
if (mcp2515.readMessage(&canMsg) == MCP2515::ERROR_OK) //Есть есть сообщение из CAN шины
{
if(canMsg.can_id == 0x0F6) //сравниваем ID кадра, который ходим принять и если он совпадает достаем данные из массива
{
int x = canMsg.data[0]; Читаем данные из 0 байта массива структуры кадра
Serial.println(x); //Выводим в монитор порта
if (x == 0x10) // Если пришло 0x10 то мы включаем светодиод
{
digitalWrite(led, HIGH);
Serial.println("ON");
}
if (x == 0x20) // Если пришло 0x20 то мы выключаем светодиод
{
digitalWrite(led, LOW);
Serial.println("OFF");
}
}
delay(200);
}
}
не совсем удобно читать, но надеюсь вам все понятно и пример хорош.
Пример довольно простой, и мы можем работать данные как в DEC, так и в HEX. Если вам нужно работать в ASCII то вам нужноприбавться перед выводом в Serial порт 0x30.