|
- /*
- * Object Oriented CAN example for Teensy 3.6 with Dual CAN buses
- * By Collin Kidder. Based upon the work of Pawelsky and Teachop
- *
- * Both buses are set to 500k to show things with a faster bus.
- * The reception of frames in this example is done via callbacks
- * to an object rather than polling. Frames are delivered as they come in.
- */
-
- #include <FlexCAN.h>
-
- class ExampleClass : public CANListener
- {
- public:
- void printFrame(CAN_message_t &frame, int mailbox);
- bool frameHandler(CAN_message_t &frame, int mailbox, uint8_t controller); //overrides the parent version so we can actually do something
- };
-
- void ExampleClass::printFrame(CAN_message_t &frame, int mailbox)
- {
- Serial.print("ID: ");
- Serial.print(frame.id, HEX);
- Serial.print(" Data: ");
- for (int c = 0; c < frame.len; c++)
- {
- Serial.print(frame.buf[c], HEX);
- Serial.write(' ');
- }
- Serial.write('\r');
- Serial.write('\n');
- }
-
- bool ExampleClass::frameHandler(CAN_message_t &frame, int mailbox, uint8_t controller)
- {
- printFrame(frame, mailbox);
-
- return true;
- }
-
- ExampleClass exampleClass;
-
- // -------------------------------------------------------------
- void setup(void)
- {
- delay(1000);
- Serial.println(F("Hello Teensy Single CAN Receiving Example With Objects."));
-
- Can0.begin(500000);
-
- //if using enable pins on a transceiver they need to be set on
- pinMode(2, OUTPUT);
- digitalWrite(2, HIGH);
-
- Can0.attachObj(&exampleClass);
- exampleClass.attachGeneralHandler();
- }
-
-
- // -------------------------------------------------------------
- void loop(void)
- {
- delay(1000);
- Serial.write('.');
- }
|