Bonjour à tous,
Je suis sur un projet de "stop dynamic" et clignotants défilants pour ma moto.
Dans cette optique j'utilise un arduino uno + schield CAN bus et une petite interface mosfet pour piloter une bande de leds.
Mon problèmes après maints essais et consultation web est que je ne parviens pas à isoler un code id qui correspond au statut de mes commandes clignotants sur la bécane.
Ce code est le 0x130.
Je joins le sketch récupéré sur github adapté à mon cas.
Si un "balaise" du bus CAN pouvait me remettre sur les rails je lui en serais très reconnaissant et le remercie par avance.
J-Pierre
/* sketch https://github.com/4G-Gregg/BMW-GS-CAN-Sniffer/blob/master/Sniff_Arduino_Terminal/Sniff_Arduino_Terminal.ino
21/10/2018 relevé sur ma 1200R : Filtres 130 et 294
0x130 Lighting: turn signals & high beam - Oct 0x07 : CF=none, D7=Gauche, E7=droite, EF= warning
0x294 Speed and distance traveled on front wheel, ABS status & brake levers -
Oct 0x02 : vitesse, oct 0x06 : 0x03 ou 0x3 ou 0x07 frein serré
*/
#include <SPI.h>
#include "mcp_can.h"
unsigned char Flag_Recv = 0;
unsigned char len = 0;
unsigned char buf[8];
char str[20];
MCP_CAN CAN(10);
//--------------------------------- SETUP -------------------------
void setup()
{
Serial.begin(115200);
START_INIT:
if(CAN_OK == CAN.begin(CAN_500KBPS)) // CAN_OK!
{
Serial.println("CAN BUS Shield init ok!");
}
else
{
Serial.println("CAN BUS Shield init fail");
Serial.println("Init CAN BUS Shield again");
delay(100);
goto START_INIT;
}
//Set filter masks
CAN.init_Mask(0, 0, 0xfff);
CAN.init_Mask(1, 0, 0x000);
// ----------- Set filters -------------
// CAN.init_Filt(0, 0, 0x294); // ABS Roue AV ; octet 2=Vit, octet 4=total, octet 6= poignée frein 0111=serré
CAN.init_Filt(0, 0, 0x130); // Lighting: turn signals & high beam ;
Serial.println("time,CAN-ID,b0,b1,b2,b3,b4,b5,b6,b7");
// Serial.println();
}
//-------------------------- BOUCLE ---------------------------------
void loop(){
unsigned char length = 0;
unsigned char data[8];
// Print in CSV format
if(CAN_MSGAVAIL == CAN.checkReceive())
{
CAN.readMsgBuf(&length, data); // (&length, data)
Serial.print(millis()/1000); // Affichage temps passé en sec
Serial.print(", ");
Serial.print(CAN.getCanId(),HEX);
for(int i = 0; i<length; i++){
Serial.print(", ");
if( data[i] < 0x10){ Serial.print("0");}
Serial.print(data[i], HEX);
}
Serial.println("");
}
} // FIN