Problème de compilation CAN MCP_2515

Bonjour,

après de nombreuses heure à essayer je me lance et demande votre aide...
J'aimerai établir une communication entre plusieurs cartes arduino au travers du protocole CAN (et avec le module MCP 2515).
D'après les nombreux sujets sur internet c'est tout ce qu'il y a de plus classique.

J'ai donc suivi ces différents sujets et l'on retrouve toujours la même structure de programme, hors mon erreur est toujours au même endroit.
Je précise que j'ai bien installé la bibliothèque suivante : GitHub - Seeed-Studio/Seeed_Arduino_CAN: Seeed Arduino CAN-BUS library - MCP2518FD&MCP2515&MCP2551

#include <SPI.h>
#include <mcp_can.h>

const int spiCSPin = 10;
MCP_CAN CAN(spiCSPin);

void setup()
{
  
}

void loop()
{
  
}

J'ai volontairement retiré tout ce qui doit se trouver dans le setup et la loop.

Voilà l'erreur à la compilation : error: cannot declare variable 'CAN' to be of abstract type 'MCP_CAN'

MCP_CAN CAN(spiCSPin);
Rien ne fait j'ai toujours la même erreur, malgré avoir désinstallé puis remis la bibliothèque...

Merci pour votre aide,

Thomas

hello
as tu regardé dans les exemples de la librairie ?

#include <SPI.h>
#include "mcp_can.h"
#include "can-serial.h"

// #define CAN_2518FD
#define CAN_2515

#ifdef CAN_2518FD
  #include "mcp2518fd_can.h"
  const int SPI_CS_PIN = BCM8;
  const int CAN_INT_PIN = BCM25;
  mcp2518fd CAN(SPI_CS_PIN); // Set CS pin
#endif

#ifdef CAN_2515
  #include "mcp2515_can.h"
  const int SPI_CS_PIN = 9;
  const int CAN_INT_PIN = 2;
  mcp2515_can CAN(SPI_CS_PIN); // Set CS pin
#endif


Salut,
Merci de ton retour, je n'ai effectivement pas regardé dans les librairies, mais j'ai suivi différents exemples (que je trouve très détaillés) comme :
https://www.locoduino.org/spip.php?article148

Pour moi il y a bien un problème à la création de l'objet "CAN" :

MCP_CAN CAN(spiCSPin);

Merci,

Thomas

Salut.
Les librairies évoluent et les auteurs de tutos n'utilisent pas forcément la dernière version, et ils ne mettent pas systématiquement à jour leurs exemples en fonction des évolutions des librairies.
De ce que je vois, jusqu'à la version 1.3.0 la classe MCP_CAN était une classe gérant uniquement le MCP_2515. Depuis la version 2.0.0, la classe est devenue abstraite (donc tu ne peux pas l'instancier) et sert de classe de base pour mcp2518fd et mcp2515_can.
Utilise plutôt une classe dérivée, comme mcp2515_can.

Salut,
Merci pour ton éclairage, effectivement la version peut-être pour quelque chose. J'espère avoir le temps ce soir de tester avec la classe mcp2515_can.

J'ai donc changé l'appel de classe par mcp2515_can, et j'ai également remplacé la déclaration de l'objet en me fiant à ce que j'ai trouvé dans la classe mcp251_can :

class mcp2515_can : public MCP_CAN

J'ai déclaré l'objet CAN ainsi :

mcp2515_can  CAN(spiCSPin);

Et ça compile !
Je vais maintenant essayer de suivre un des exemple de la librairie afin de faire communiquer mes 2 arduinos en vu des premiers tests...

Thomas

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.