Bonjour Cher collègue du forum
Je viens de démarre sur arduino. j'ai la MEGA ADK + CAN BUS SHEILD de spakfun.
Je souhaite lire sans filtrage le bus can d une voiture
J'ai utilisé la bibliothèque can et l exemble nommer le listener (listener.ino) trouvant dans http://modelrail.otenko.com/arduino/arduino-controller-area-network-can
Pour visualiser les trames can (tous trames sans filtrage),j ulise le moniteur serie.
Les tests donnent les resultats cette ligne de maniere infini
[0] [rx] Status: 7F len:F frame: FFFFFFF EXT?:1 FILTER:3 BUFFER :0 data: [ FF FF FF FF FF FF FF FF ]
Si j interprète les résultats, Peux être que ce n est pa ça!
Status -> donne l etat du buffer de reception 7F
EXT?:1 --> mode etendu de la trame alors que je veux etre en mode standard
FILTER:3 --> filtre 3 est actif alors que je veux pas filtre
void setup() {
Serial.begin(9600);
// initialize CAN bus class
// this class initializes SPI communications with MCP2515
CAN.begin();
CAN.baudConfig(BUS_SPEED);
Serial.println("hello");
//Wait 10 seconds so that I can still upload even
//if the previous iteration spams the serial port
delay(1000);
/*CAN.setMaskOrFilter(MASK_0, 0b00000000, 0b00001000, 0b00011100, 0b00000000);
CAN.setMaskOrFilter(FILTER_0, 0b00000000, 0b00000000, 0b00000000, 0b00000000);
CAN.setMaskOrFilter(FILTER_1, 0b00000000, 0b00000000, 0b00000000, 0b00000000);*/
CAN.toggleRxBuffer0Acceptance(false, true);
}
byte inc = 0;
void printBuf(byte rx_status, byte length, uint32_t frame_id, byte filter, byte buffer, byte *frame_data, byte ext) {
Serial.print("[Rx] Status:");
Serial.print(rx_status,HEX);
Serial.print(" Len:");
Serial.print(length,HEX);
Serial.print(" Frame:");
Serial.print(frame_id,HEX);
Serial.print(" EXT?:");
Serial.print(ext==1,HEX);
Serial.print(" Filter:");
Serial.print(filter,HEX);
Serial.print(" Buffer:");
Serial.print(buffer,HEX);
Serial.print(" Data:[");
for (int i=0;i<8;i++) {
if (i>0) Serial.print(" ");
Serial.print(frame_data[i],HEX);
}
Serial.println("]");
}
void loop() {
byte length,rx_status,filter,ext;
uint32_t frame_id;
byte frame_data[8];
//clear receive buffers, just in case.
frame_data[0] = 0x00;
frame_data[1] = 0x00;
frame_data[2] = 0x00;
frame_data[3] = 0x00;
frame_data[4] = 0x00;
frame_data[5] = 0x00;
frame_data[6] = 0x00;
frame_data[7] = 0x00;
frame_id = 0x0000;
length = 0;
rx_status = CAN.readStatus();
if (CAN.buffer0DataWaiting()) {
CAN.readDATA_ff_0(&length,frame_data,&frame_id, &ext, &filter);
Serial.print("[0] ");
printBuf(rx_status, length, frame_id, filter, 0, frame_data, ext);
}
if (CAN.buffer1DataWaiting()) {
CAN.readDATA_ff_1(&length,frame_data,&frame_id, &ext, &filter);
Serial.print("[1] ");
printBuf(rx_status, length, frame_id, filter, 1, frame_data, ext);
}
}
je veux faire un scan sans filtrer ?
Merci pour votre aide