Voici les lignes de code qui utilise le Can dans mon Due :
#include <due_can.h>
... puis dans le setup ...
// Initialize CAN0. Set the proper baud rates here
if (Can0.begin(CAN_BPS_500K)) {
Serial.println("CAN ok !");
myGLCD.print((char*)"CAN OK ", 100,410,0);
} else {
Serial.println("CAN ERROR !");
}
//By default there are 7 mailboxes that are RX boxes
//This sets each mailbox to have a filter
//extended
//syntax is mailbox, ID, mask, extended
Can0.setRXFilter(0, 0x2FFFFF, 0x1FFFFFFF, true);
Can0.setRXFilter(1, 0x2F0000, 0x1FFFFFFF, true);
Can0.setRXFilter(2, 0x2F0000, 0x1FFFFFFF, true);
//standard
Can0.setRXFilter(3, 0x10, 0x7F0, false);
Can0.setRXFilter(4, 0x11, 0x7F0, false);
Can0.setRXFilter(5, 0x12, 0x7F0, false);
Can0.setRXFilter(6, 0x1E, 0x7F0, false);
for (int i=0; i<IdMax; i++) { // pour le comptage des messages CAN
CANCount[i]=0;
ValId[i]=0;
}
et dans la loop :
void loop() {
Itineraire* it;
int code=0;
CAN_FRAME incoming;
CAN_FRAME outgoing;
/*
* TRAITEMENT DES MESSAGES CAN
*/
while (Can0.available() > 0) {
Can0.read(incoming);
//countMessagesByIds(incoming);
//printFrame(incoming);
answerFrame(incoming);
// Can0.sendFrame(incoming) est envoyé par cette procédure qui est l'automate reseau
}