AIM CAN: Difference between revisions
Line 28: | Line 28: | ||
== Packet 405h: Shift LEDs, Alarm LEDs == | == Packet 405h: Shift LEDs, Alarm LEDs == | ||
Byte[6]:4-0: Controls the shift LEDs. The LEDs are bitmaped, meaning the far most LEDs on each side of the display turn on if bit 1 is set, bit 2 controls the second farthest LEDs from the centre. A value of 0x1F turns on all the LEDs and make them blink. | |||
function onTick() | |||
local msg = {temp1 % 256, temp1 / 256, temp2 % 256, temp2 / 256, temp3 % 256, temp3 / 256, temp4 % 4, temp4 / 256} | |||
txCAN(0, 1029, 0, msg) | |||
end | |||
== Packet 406h: RPM range for the digital RPM readout == | == Packet 406h: RPM range for the digital RPM readout == |
Revision as of 03:42, 9 January 2015
This section documents how to control an AIM Mychron3 Dash display, using an RCP unit via LUA scripting. The following information is a sum up of reverse engineering findings documented here: [1]. Examples of LUA implementation of the the different packets documented on the Mychron 3 Hack page are provided below.
Packet 401h: RPM, Speed, Gear blink control, Gear
function onTick() local rpm = getTimerRpm(0) local speedmph = getGpsSpeed() -- Assume the gear is calculated and stored in a virtual channel. -- Refer to LUA scripting example to calculate the gear based on speed and RPM local gear = getChannel(gearId) local msg = {rpm % 256, rpm / 256, (speedmph % 16) % 256, (speedmph / 16) / 256, 0, 0, gear, 0} txCAN(0, 1025, 0, msg) end
Packet 402h: Temperature/Pressure fields (bottom left of display)
function onTick() -- Assume different temperature values are stored in virtual channels local temp1 = getChannel(temp1Id) local temp2 = getChannel(temp2Id) local temp3 = getChannel(temp3Id) local temp4 = getChannel(temp4Id) local msg = {temp1 % 256, temp1 / 256, temp2 % 256, temp2 / 256, temp3 % 256, temp3 / 256, temp4 % 4, temp4 / 256} txCAN(0, 1026, 0, msg) end
Packet 405h: Shift LEDs, Alarm LEDs
Byte[6]:4-0: Controls the shift LEDs. The LEDs are bitmaped, meaning the far most LEDs on each side of the display turn on if bit 1 is set, bit 2 controls the second farthest LEDs from the centre. A value of 0x1F turns on all the LEDs and make them blink.
function onTick() local msg = {temp1 % 256, temp1 / 256, temp2 % 256, temp2 / 256, temp3 % 256, temp3 / 256, temp4 % 4, temp4 / 256} txCAN(0, 1029, 0, msg) end
Packet 406h: RPM range for the digital RPM readout
function onTick() -- Set the RPM range -- Value RPM Range -- 0 25,000 - 0 -- 1 22,000 - 0 -- 2 20,000 - 0 -- 3 16,000 - 0 -- 4 12,000 - 0 -- 5 10,000 - 0 -- 6 8,000 - 0 -- 7 6,000 - 0 -- 8 4,000 - 0 local rpmRange = 6 -- Up to 8000 RPM local rpm = local msg = {0, rpmRange * 16, 0, 0, 0, 0, 0, 0} txCAN(0, 1029, 0, msg) end
Packet 408h: Timing
TODO