// ------------------------------------------------------------- // CANtest for Teensy 3.6 dual CAN bus // by Collin Kidder, Based on CANTest by Pawelsky (based on CANtest by teachop) // // Both buses are left at default 250k speed and the second bus sends frames to the first // to do this properly you should have the two buses linked together. This sketch // also assumes that you need to set enable pins active. Comment out if not using // enable pins or set them to your correct pins. // // This sketch tests both buses as well as interrupt driven Rx and Tx. There are only // two Tx buffers by default so sending 5 at a time forces the interrupt driven system // to buffer the final three and send them via interrupts. All the while all Rx frames // are internally saved to a software buffer by the interrupt handler. // #include #ifndef __MK66FX1M0__ #error "Teensy 3.6 with dual CAN bus is required to run this example" #endif static CAN_message_t msg; static uint8_t hex[17] = "0123456789abcdef"; // ------------------------------------------------------------- static void hexDump(uint8_t dumpLen, uint8_t *bytePtr) { uint8_t working; while( dumpLen-- ) { working = *bytePtr++; Serial.write( hex[ working>>4 ] ); Serial.write( hex[ working&15 ] ); } Serial.write('\r'); Serial.write('\n'); } // ------------------------------------------------------------- void setup(void) { delay(1000); Serial.println(F("Hello Teensy 3.6 dual CAN Test.")); Can0.begin(); Can1.begin(); //if using enable pins on a transceiver they need to be set on pinMode(2, OUTPUT); pinMode(35, OUTPUT); digitalWrite(2, HIGH); digitalWrite(35, HIGH); msg.ext = 0; msg.id = 0x100; msg.len = 8; msg.buf[0] = 10; msg.buf[1] = 20; msg.buf[2] = 0; msg.buf[3] = 100; msg.buf[4] = 128; msg.buf[5] = 64; msg.buf[6] = 32; msg.buf[7] = 16; } // ------------------------------------------------------------- void loop(void) { CAN_message_t inMsg; while (Can0.available()) { Can0.read(inMsg); Serial.print("CAN bus 0: "); hexDump(8, inMsg.buf); } msg.buf[0]++; Can1.write(msg); msg.buf[0]++; Can1.write(msg); msg.buf[0]++; Can1.write(msg); msg.buf[0]++; Can1.write(msg); msg.buf[0]++; Can1.write(msg); delay(20); }