#include <FlexCAN_T4.h>
FlexCAN_T4<CAN0, RX_SIZE_256, TX_SIZE_16> Can0;
void blink(int pin, long on, long off)
{
int blinkPhase = millis() % (on + off);
if (blinkPhase < off)
digitalWrite(pin, LOW);
else
digitalWrite(pin, HIGH);
}
void setup()
{
Serial.begin(115200);
delay(1000);
Serial.println("Teensy 3.2, FlexCAN module CAN0 pins: 3 4, PWM pin: 6");
Can0.begin();
Serial.println("baud rate: 83300");
Can0.setBaudRate(83300);
Can0.setMaxMB(16);
Can0.enableFIFO();
Can0.enableFIFOInterrupt();
Can0.onReceive(canSniff);
Can0.mailboxStatus();
analogWriteFrequency(6, 400);
pinMode(LED_BUILTIN, OUTPUT);
}
void canSniff(const CAN_message_t &msg)
{
Serial.print("MB "); Serial.print(msg.mb);
Serial.print(" OVERRUN: "); Serial.print(msg.flags.overrun);
Serial.print(" LEN: "); Serial.print(msg.len);
Serial.print(" EXT: "); Serial.print(msg.flags.extended);
Serial.print(" TS: "); Serial.print(msg.timestamp);
Serial.print(" ID: "); Serial.print(msg.id, HEX);
Serial.print(" Buffer: ");
for ( uint8_t i = 0; i < msg.len; i++ )
{
Serial.print(msg.buf[i], HEX); Serial.print(" ");
} Serial.println();
}
void loop()
{
Can0.events();
blink(LED_BUILTIN, 100, 1900);
// PWM duty cycle 70% ON
analogWrite(6, 180);
// PWM duty cycle 30% OFF
//analogWrite(6, 80);
}