Ошибка при компиляции скетча mcp_can
- Войдите на сайт для отправки комментариев
Пнд, 14/12/2020 - 09:46
Добрый день, собираюсь подключить ардуино по can-у к модулю gps/глонасс arnavi, используя MCP2515, мой скетч
#include <SPI.h> #include <mcp_can.h> const int spiCSPin = 10; int ledHIGH = 1; int ledLOW = 0; MCP_CAN CAN(spiCSPin); void setup() { Serial.begin(115200); while (CAN_OK != CAN.begin(CAN_500KBPS)) { Serial.println("CAN BUS init Failed"); delay(100); } Serial.println("CAN BUS Shield Init OK!"); } unsigned char stmp[8] = {ledHIGH, 1, 2, 3, ledLOW, 5, 6, 7}; void loop() { Serial.println("In loop"); CAN.sendMsgBuf(0x43, 0, 8, stmp); delay(1000); }
Выдает ошибку
can:8:9: error: cannot declare variable 'CAN' to be of abstract type 'MCP_CAN'
MCP_CAN CAN(spiCSPin);
^~~
In file included from C:\Users\Gleb\Documents\Arduino\can\can.ino:2:0:
C:\Users\Gleb\Documents\Arduino\libraries\Seeed_Arduino_CAN-master\src/mcp_can.h:18:7: note: because the following virtual functions are pure within 'MCP_CAN':
class MCP_CAN
^~~~~~~
C:\Users\Gleb\Documents\Arduino\libraries\Seeed_Arduino_CAN-master\src/mcp_can.h:21:18: note: virtual void MCP_CAN::enableTxInterrupt(bool)
virtual void enableTxInterrupt(bool enable = true) = 0; // enable transmit interrupt
Как ее можно исправить, в чем проблема?
а если назвать объект myCan ?
похоже что сочетание CAN уже используется, вот компилятор и ругается, как минимум переименовать.
Тоже самое
Диагностика указывает на файл mcp_can.h. Именно его и надо было бы привести.
Файл mcp_can.h
мне это непонятно -
CAN_OK !=
и
int
spiCSPin = 10; нужен byte
Смотри примеры в библиотеке.
Да там define изменился на "mcp2515_can.h", с ним работает
А что именно непонятно в сообщении?
MCP_CAN - абстрактный класс (имеет абстрактный метод enableTxInterrupt) поэтому определять переменные прямо от него, как Вы делаете ("MCP_CAN myCAN(spiCSPin);") нельзя - получается конь в вакууме. Необходимо описать производный класс в котором метод enableTxInterrupt доопределён и уже от него создавать объекты.
MCP_CAN - абстрактный класс (имеет абстрактный метод enableTxInterrupt) поэтому определять переменные прямо от него, как Вы делаете ("MCP_CAN myCAN(spiCSPin);") нельзя - получается конь в вакууме. Необходимо описать производный класс в котором метод enableTxInterrupt доопределён и уже от него создавать объекты.
а пример можно, когда время будет?
Чего пример? Абстрактного класса? Ну, вот тут много - https://ravesli.com/urok-168-chistye-virtualnye-funktsii-interfejsy-i-abstraktnye-klassy/