A CANbus-enabled LED and GPIO controller -- firmware
The default Dev ID is 0xA3
Command | Extended ID | Send Payload | Recv Payload | |||||||
---|---|---|---|---|---|---|---|---|---|---|
28:8 | 7:0 | Byte 0 | Byte 1 | Byte 2 | Byte 3 | Byte 0 | Byte 1 | |||
Read Pins | 0 | Dev ID | Dev ID | In States | Out States | |||||
Write Pins | 1 | Dev ID | States | |||||||
Write Pin | 2 | Dev ID | Pin | State | ||||||
Truth Table | 3 | Dev ID | Pin | Enable | Values | |||||
Pin Interrupt | 4 | Dev ID | Pin | Mode | Dev ID | Pin | State | |||
RGB Strip 1 | 5 | Dev ID | Mode | Red | Green | Blue | ||||
RGB Strip 2 | 6 | Dev ID | Mode | Red | Green | Blue |
Pin states use the following payload byte format (MSB first):
Byte n | |||||||
---|---|---|---|---|---|---|---|
7:4 Reserved | Pin 4 | Pin 3 | Pin 2 | Pin 1 |
As an alternative to writing output pins states, a logic truth table can be enabled to automatically set output pins based on input pin states. Writes are ignored when a truth table is enabled for a pin.
Each output pin has the following truth table:
Inputs | IN2 IN1 | ||||
---|---|---|---|---|---|
00 | 01 | 10 | 11 | ||
IN4 IN3 |
00 | X1 | X2 | X3 | X4 |
01 | X5 | X6 | X7 | X8 | |
10 | X9 | X10 | X11 | X12 | |
11 | X13 | X14 | X15 | X16 |
Which is represented as the following payload byte format (MSB first):
Byte 2 | Byte 3 | ||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
X16 | X15 | X14 | X13 | X12 | X11 | X10 | X9 | X8 | X7 | X6 | X5 | X4 | X3 | X2 | X1 |
CANbus messages can be sent in response to pin change events by enabling a pin interrupt. One interrupt can be configured for each pin. Messages will be sent to the device ID provided with the configuration command.
The following interrupt modes are available:
Mode | Value |
---|---|
Disabled | 0 |
Rising Edge | 1 |
Falling Edge | 2 |
Any Change | 3 |
Two addressable RGB strips can be controlled via CANbus messages. Only WS2812-compatible LEDs which use the GRB color format can be controlled.
The following pattern modes are available:
Mode | Value |
---|---|
Disabled | 0 |
Solid Color | 1 |
Rainbow | 2 |
This project uses PlatformIO.
For actual hardware:
pio run
For ST Nucleo-144 dev board:
pio run -e nucleo
Connect an ST-LINK to the programming header, apply 5V power, and run:
For actual hardware:
pio run --target upload
For ST Nucleo-144 dev board:
pio run -e nucleo --target upload