<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://the07k.wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Arte</id>
	<title>The 07K Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://the07k.wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Arte"/>
	<link rel="alternate" type="text/html" href="https://the07k.wiki/wiki/Special:Contributions/Arte"/>
	<updated>2026-05-13T08:34:28Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.38.2</generator>
	<entry>
		<id>https://the07k.wiki/index.php?title=File:Knock_control_map_list.pdf&amp;diff=7749</id>
		<title>File:Knock control map list.pdf</title>
		<link rel="alternate" type="text/html" href="https://the07k.wiki/index.php?title=File:Knock_control_map_list.pdf&amp;diff=7749"/>
		<updated>2026-04-27T13:24:27Z</updated>

		<summary type="html">&lt;p&gt;Arte: Arte uploaded a new version of File:Knock control map list.pdf&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Arte</name></author>
	</entry>
	<entry>
		<id>https://the07k.wiki/index.php?title=File:Knock_control_map_list.pdf&amp;diff=7748</id>
		<title>File:Knock control map list.pdf</title>
		<link rel="alternate" type="text/html" href="https://the07k.wiki/index.php?title=File:Knock_control_map_list.pdf&amp;diff=7748"/>
		<updated>2026-04-27T13:20:29Z</updated>

		<summary type="html">&lt;p&gt;Arte: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Arte</name></author>
	</entry>
	<entry>
		<id>https://the07k.wiki/index.php?title=File:Tranny_swap_auto_to_02Q.docx&amp;diff=7743</id>
		<title>File:Tranny swap auto to 02Q.docx</title>
		<link rel="alternate" type="text/html" href="https://the07k.wiki/index.php?title=File:Tranny_swap_auto_to_02Q.docx&amp;diff=7743"/>
		<updated>2026-04-21T07:13:37Z</updated>

		<summary type="html">&lt;p&gt;Arte: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
Transmission swap from auto to 02Q. This was provided by a member of the VW 2.5l Group&lt;br /&gt;
&lt;br /&gt;
PDF version available here: [[:File:Tranny swap auto to 02Q.pdf|File:Tranny swap auto to 02Q.pdf]]&lt;/div&gt;</summary>
		<author><name>Arte</name></author>
	</entry>
	<entry>
		<id>https://the07k.wiki/index.php?title=File:Tranny_swap_auto_to_02Q.pdf&amp;diff=7742</id>
		<title>File:Tranny swap auto to 02Q.pdf</title>
		<link rel="alternate" type="text/html" href="https://the07k.wiki/index.php?title=File:Tranny_swap_auto_to_02Q.pdf&amp;diff=7742"/>
		<updated>2026-04-21T07:13:02Z</updated>

		<summary type="html">&lt;p&gt;Arte: Transmission swap from auto to 02Q. This was provided by a member of the VW 2.5l Group&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
Transmission swap from auto to 02Q. This was provided by a member of the VW 2.5l Group&lt;/div&gt;</summary>
		<author><name>Arte</name></author>
	</entry>
	<entry>
		<id>https://the07k.wiki/index.php?title=File:Tranny_swap_auto_to_02Q.docx&amp;diff=7741</id>
		<title>File:Tranny swap auto to 02Q.docx</title>
		<link rel="alternate" type="text/html" href="https://the07k.wiki/index.php?title=File:Tranny_swap_auto_to_02Q.docx&amp;diff=7741"/>
		<updated>2026-04-21T07:11:43Z</updated>

		<summary type="html">&lt;p&gt;Arte: Transmission swap from auto to 02Q. This was provided by a member of the VW 2.5l Group&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
Transmission swap from auto to 02Q. This was provided by a member of the VW 2.5l Group&lt;/div&gt;</summary>
		<author><name>Arte</name></author>
	</entry>
	<entry>
		<id>https://the07k.wiki/index.php?title=Can-bus_emulation_for_cruise_control&amp;diff=7693</id>
		<title>Can-bus emulation for cruise control</title>
		<link rel="alternate" type="text/html" href="https://the07k.wiki/index.php?title=Can-bus_emulation_for_cruise_control&amp;diff=7693"/>
		<updated>2026-03-08T08:02:38Z</updated>

		<summary type="html">&lt;p&gt;Arte: /* Emulating the cruise control switch */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
This is intended as a reference for those who would like to emulate the can-bus messages for the cruise control.&lt;br /&gt;
&lt;br /&gt;
'''Application''': Any swapped vehicles that do not have can-bus support. It would cover both the Bosch ME7.1.1 and a ME17.5/ME17.5.6&lt;br /&gt;
&lt;br /&gt;
==Hardware required==&lt;br /&gt;
You can use any microcontroller that have CAN-bus capability, such as an Arduino or ESP32. You could also use the SpeedPulser Pro that already has a GPS and CAN-bus capability, you would only need to alter the source code and implement the new CAN-bus message:&lt;br /&gt;
&lt;br /&gt;
*https://forbes-automotive.com/products/speedpulser-pro&lt;br /&gt;
*https://github.com/adamforbes92/speedPulserPro&lt;br /&gt;
&lt;br /&gt;
==CAN-bus: What is this sorcery?==&lt;br /&gt;
CAN-bus is a network used by modules to transmit data/information with each other. With only two wires, you can transmit a multitude of messages between modules ([[wikipedia:Multiplexing|multiplexing]]).&lt;br /&gt;
&lt;br /&gt;
In the past, you would have a single wire for every input. In those instances, every button of your cruise control switch has its own signal wire.&lt;br /&gt;
&lt;br /&gt;
The '''objective''' of the CAN-bus emulation is to take all those signals, feed them into your microcontroller and output CAN-bus messages that the ECU will understand, as if it was on a factory MK5/MK6 2.5 chassis.&lt;br /&gt;
&lt;br /&gt;
CAN-bus messages required:&lt;br /&gt;
&lt;br /&gt;
#State of the cruise control switch (Ex.: Main switch, SET, RES, etc.), normally provided by the '''steering column module'''&lt;br /&gt;
#Vehicle speed, normally provided by the '''ABS module'''&lt;br /&gt;
&lt;br /&gt;
==Vehicle speed acquisition==&lt;br /&gt;
The vehicle speed can be retrieved through the following means:&lt;br /&gt;
&lt;br /&gt;
*GPS module&lt;br /&gt;
*VSS sensor&lt;br /&gt;
*Hall-effect sensor mounted into the instrument cluster to read the speed of the speedometer cable&lt;br /&gt;
*There are more ways to gather this information depending on your creativity&lt;br /&gt;
&lt;br /&gt;
==Emulating the cruise control switch==&lt;br /&gt;
The ECU receive the cruise control switch information through the CAN message '''0x38A'''. Here is a detailed description of this CAN message&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; style=&amp;quot;width:100%;&amp;quot;&lt;br /&gt;
|+ID '''0x38A''', '''4 bytes''', Sent every '''20 ms'''&lt;br /&gt;
!Signal!!Byte!!Start bit!!Bits!!Range / Values!!Notes&lt;br /&gt;
|-&lt;br /&gt;
|Checksum (See below)||1||0||8||0..255 (Phys = Hex)||—&lt;br /&gt;
|-&lt;br /&gt;
|Main switch||2||0||1||0 = OFF&amp;lt;br&amp;gt;1 = ON||Latching ON/OFF&lt;br /&gt;
|-&lt;br /&gt;
|Tip switch OFF||2||1||1||0 = not pressed&amp;lt;br&amp;gt;1 = pressed||—&lt;br /&gt;
|-&lt;br /&gt;
|Tip switch DECEL||2||2||1||0 = not pressed&amp;lt;br&amp;gt;1 = pressed||—&lt;br /&gt;
|-&lt;br /&gt;
|Tip switch ACCEL||2||3||1||0 = not pressed&amp;lt;br&amp;gt;1 = pressed||—&lt;br /&gt;
|-&lt;br /&gt;
|Cruise decelerate (hold)||2||4||1||0 = not decelerating&amp;lt;br&amp;gt;1 = decelerating||—&lt;br /&gt;
|-&lt;br /&gt;
|Cruise accelerate (hold)||2||5||1||0 = not accelerating&amp;lt;br&amp;gt;1 = accelerating||—&lt;br /&gt;
|-&lt;br /&gt;
|Cruise control stalk error||2||6||1||0 = OK&amp;lt;br&amp;gt;1 = stalk error||—&lt;br /&gt;
|-&lt;br /&gt;
|Not used||2||7||1||—||—&lt;br /&gt;
|-&lt;br /&gt;
|Tip switch SET||3||0||1||0 = not pressed&amp;lt;br&amp;gt;1 = pressed||—&lt;br /&gt;
|-&lt;br /&gt;
|Tip switch RESUME||3||1||1||0 = not pressed&amp;lt;br&amp;gt;1 = pressed||—&lt;br /&gt;
|-&lt;br /&gt;
|Sender coding||3||2||2||00 = Body network&amp;lt;br&amp;gt;01 = Steering column module&amp;lt;br&amp;gt;10 = Engine||Values per spec&lt;br /&gt;
|-&lt;br /&gt;
|Message counter||3||4||4||0..15 (Phys = Hex)||Rolling counter&lt;br /&gt;
|-&lt;br /&gt;
|Not used||4||0||8||—||Byte 4 unused for this purpose&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Checksum===&lt;br /&gt;
The checksum is a formula used to validate the integrity of the message, and detect possible data corruption during the transmission of the message. If the checksum does not match the data, the ECU might reject the message. (Implausible message)&lt;br /&gt;
&lt;br /&gt;
[[File:Checksum GRAneu.png|747x747px]]&lt;br /&gt;
&lt;br /&gt;
This checksum is calculated only with Exclusive OR ([[wikipedia:Exclusive_or|XOR]]) operations&lt;br /&gt;
&lt;br /&gt;
===Code example===&lt;br /&gt;
This is a very rough sketch to show a possible implementation. This example would be for an Arduino controller using a MCP2515 shield (hat).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
// demo: Cruise control switch, analog to can-bus message for VW PQ35&lt;br /&gt;
// Very rough sketch, but should work. Feel free to improve&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;SPI.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#define CAN_2515&lt;br /&gt;
&lt;br /&gt;
// Set SPI CS Pin according to your hardware&lt;br /&gt;
&lt;br /&gt;
#if defined(SEEED_WIO_TERMINAL) &amp;amp;&amp;amp; defined(CAN_2518FD)&lt;br /&gt;
const int SPI_CS_PIN  = BCM8;&lt;br /&gt;
const int CAN_INT_PIN = BCM25;&lt;br /&gt;
#else&lt;br /&gt;
&lt;br /&gt;
// For Arduino MCP2515 Hat:&lt;br /&gt;
// the cs pin of the version after v1.1 is default to D9&lt;br /&gt;
// v0.9b and v1.0 is default D10&lt;br /&gt;
const int SPI_CS_PIN = 9;&lt;br /&gt;
const int CAN_INT_PIN = 2;&lt;br /&gt;
#endif&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#ifdef CAN_2518FD&lt;br /&gt;
#include &amp;quot;mcp2518fd_can.h&amp;quot;&lt;br /&gt;
mcp2518fd CAN(SPI_CS_PIN); // Set CS pin&lt;br /&gt;
#endif&lt;br /&gt;
&lt;br /&gt;
#ifdef CAN_2515&lt;br /&gt;
#include &amp;quot;mcp2515_can.h&amp;quot;&lt;br /&gt;
mcp2515_can CAN(SPI_CS_PIN); // Set CS pin&lt;br /&gt;
#endif&lt;br /&gt;
&lt;br /&gt;
const int buttonMain = 4;&lt;br /&gt;
const int buttonRes = 2; &lt;br /&gt;
const int buttonSet = 0;&lt;br /&gt;
&lt;br /&gt;
byte oldSwitchState = 0x0;&lt;br /&gt;
byte sequence = 0x0;&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
    SERIAL_PORT_MONITOR.begin(115200);&lt;br /&gt;
    while(!Serial){};&lt;br /&gt;
&lt;br /&gt;
    while (CAN_OK != CAN.begin(CAN_500KBPS)) { // init powertrain can bus : baudrate = 500k &lt;br /&gt;
        SERIAL_PORT_MONITOR.println(&amp;quot;CAN init fail, retry...&amp;quot;);&lt;br /&gt;
        delay(100);&lt;br /&gt;
    }&lt;br /&gt;
    SERIAL_PORT_MONITOR.println(&amp;quot;CAN init ok!&amp;quot;);&lt;br /&gt;
    pinMode(buttonMain, INPUT_PULLUP);&lt;br /&gt;
    pinMode(buttonRes, INPUT_PULLUP);&lt;br /&gt;
    pinMode(buttonSet, INPUT_PULLUP); // default state 12v&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
&lt;br /&gt;
    byte switchState = 0x0;&lt;br /&gt;
&lt;br /&gt;
    // Read analog inputs&lt;br /&gt;
    int stateMain = digitalRead(buttonMain);&lt;br /&gt;
    int stateRes = digitalRead(buttonRes);&lt;br /&gt;
    int stateSet = digitalRead(buttonSet);&lt;br /&gt;
&lt;br /&gt;
    // You can add more inputs and adjust the logic according the the can-bus chart&lt;br /&gt;
    if (stateMain == LOW) {&lt;br /&gt;
        switchState |= (1 &amp;lt;&amp;lt; 0);  // Set bit 0&lt;br /&gt;
    }&lt;br /&gt;
    if (stateSet == LOW) {&lt;br /&gt;
        switchState |= (1 &amp;lt;&amp;lt; 1);  // Set bit 1&lt;br /&gt;
    }&lt;br /&gt;
    if (stateRes == LOW) {&lt;br /&gt;
        switchState |= (1 &amp;lt;&amp;lt; 2);  // Set bit 2&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    // Check if the switch state has changed&lt;br /&gt;
    if (switchState != oldSwitchState) {&lt;br /&gt;
        Serial.println(switchState);  // Print new state for monitoring purposes&lt;br /&gt;
        oldSwitchState = switchState; // Update oldSwitchState&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // Define bytes for can message (0x38A)&lt;br /&gt;
    byte byteTwo = switchState &amp;amp; 1;&lt;br /&gt;
&lt;br /&gt;
    byte byteThree = switchState &amp;gt;&amp;gt; 1;&lt;br /&gt;
    byteThree = byteThree | 0xC; // Could also be 0x4 (See Sender coding)&lt;br /&gt;
    byteThree = (sequence &amp;lt;&amp;lt; 4) | byteThree;&lt;br /&gt;
&lt;br /&gt;
    byte checksum = byteTwo ^ byteThree;&lt;br /&gt;
&lt;br /&gt;
    unsigned char payload[4] = {checksum, byteTwo, byteThree, 0x00};&lt;br /&gt;
    CAN.sendMsgBuf(0x38A, 0, 4, payload);&lt;br /&gt;
    &lt;br /&gt;
    sequence = (sequence + 1) &amp;amp; 0x0F; // increment for the next frame&lt;br /&gt;
&lt;br /&gt;
    delay(20); // Send every 20ms&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Emulating the ABS module (Vehicle speed) ==&lt;br /&gt;
The ABS module needs to be emulated as the ECU track the vehicle speed for the cruise control.&lt;br /&gt;
&lt;br /&gt;
In practice, it would be possible to do Assembly patches and make the ECU track the engine speed. Although, this extensive work would need to be repeated across multiple firmwares. It makes more sense to emulate the ABS module, especially considered that this requires a skill set out of reach for most readers.&lt;br /&gt;
&lt;br /&gt;
Regarding the ABS, more CAN message will need to be emulated:&lt;br /&gt;
{{Note|note-reminder|This section is under development. Feel free to add content.}}&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; style=&amp;quot;width:100%;&amp;quot;&lt;br /&gt;
|+ '''ID 0x1A0, 8 bytes, Sent every 10 ms'''&lt;br /&gt;
! Signal!!Byte!! Start bit !!Bits!!Range / Values!!Notes&lt;br /&gt;
|-&lt;br /&gt;
|ASR request&lt;br /&gt;
|1||0||1||0 = no request; 1 = ASR request||Request also present in Byte 5 or 6&lt;br /&gt;
|-&lt;br /&gt;
|MSR request|| 1||1||1||0 = no request; 1 = MSR request||Request also present in Byte 7, Byte 6 contains updated info&lt;br /&gt;
|-&lt;br /&gt;
|ABS braking active||1||2||1||0 = inactive; 1 = ABS braking active||&lt;br /&gt;
|-&lt;br /&gt;
|EDS intervention active||1||3||1||0 = inactive; 1 = EDS active||Electronic Differential Lock&lt;br /&gt;
|-&lt;br /&gt;
|FDR intervention active||1||4||1||0 = inactive; 1 = FDR active||&lt;br /&gt;
|-&lt;br /&gt;
|ASR shift influence||1||5||2||00 = no request; 01 = ASR shift map; 02 = downshift request; 03 = shift inhibit||Transmission interaction&lt;br /&gt;
|-&lt;br /&gt;
|EBV intervention active||1||7||1||0 = inactive; 1 = EBV active||Electronic Brake Force Distribution&lt;br /&gt;
|-&lt;br /&gt;
|ABS warning lamp||2||0||1||0 = off; 1 = lamp on||&lt;br /&gt;
|-&lt;br /&gt;
|ASR/FDR warning lamp||2||1||1||0 = off; 1 = lamp on||&lt;br /&gt;
|-&lt;br /&gt;
|Brake warning lamp||2||2||1||0 = off; 1 = lamp on||&lt;br /&gt;
|-&lt;br /&gt;
|Brake light switch||2||3||1||0 = brake not applied; 1 = brake applied||Without brake booster this bit transmits the brake light switch&lt;br /&gt;
|-&lt;br /&gt;
|Brake pressure threshold exceeded||2||3||1||0 = threshold not exceeded; 1 = threshold exceeded||From PQ46 driver brake pressure threshold exceeded&lt;br /&gt;
|-&lt;br /&gt;
|Brake test switch||2||4||1||0 = brake not applied; 1 = brake applied||RB-ABS systems&lt;br /&gt;
|-&lt;br /&gt;
|Brake pressure threshold status||2||4||1||0 = status valid; 1 = status unavailable||From PQ46&lt;br /&gt;
|-&lt;br /&gt;
|Rough-road suppression||2||5||1||0 = disabled; 1 = active||&lt;br /&gt;
|-&lt;br /&gt;
|Rough-road suppression status||2||6||1||0 = valid; 1 = invalid||&lt;br /&gt;
|-&lt;br /&gt;
|ABS diagnostic active||2||7||1||0 = no diagnostic; 1 = diagnostic active||&lt;br /&gt;
|-&lt;br /&gt;
|Brake booster active||3||0||1|| ||&lt;br /&gt;
|-&lt;br /&gt;
|Vehicle speed low byte||3||1||7||0 – 1.27 km/h||HEX VALUE = speed (km/h) × 100&lt;br /&gt;
|-&lt;br /&gt;
|Vehicle speed high byte||4||0||8||0 – 325.12 km/h||HEX VALUE = speed (km/h) / 1.28&lt;br /&gt;
|-&lt;br /&gt;
|ASR torque intervention slow||5||0||8||0 – 99.06 %||VALUE = torque intervention / 0.39&lt;br /&gt;
|-&lt;br /&gt;
|ASR torque intervention fast||6||0||8||0 – 99.06 %||Bit-inverted MSR torque during MSR request&lt;br /&gt;
|-&lt;br /&gt;
|MSR torque intervention||7||0||8||0 – 99.06 %||&lt;br /&gt;
|-&lt;br /&gt;
|Message counter||8||0||4||0 – 15||Rolling counter&lt;br /&gt;
|-&lt;br /&gt;
|ASR controller present||8||4||1||0 = ABS; 1 = ASR||&lt;br /&gt;
|-&lt;br /&gt;
|ESP passive button pressed||8||5||1||0 = ESP active; 1 = ESP passive||Driver pressed ESP button&lt;br /&gt;
|-&lt;br /&gt;
|ESP system status||8||6||1||0 = OK; 1 = fault||ESP disabled due to fault&lt;br /&gt;
|-&lt;br /&gt;
|Speed substitute value||8||7||1||0 = valid speed; 1 = substitute value||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Speed signal constants for the combined value of '''Byte 3 and Byte 4'''&lt;br /&gt;
*'''Initial value''' = '''FF88h''' or '''FF89h''' = `1111 1111 1000 100x` (binary)&lt;br /&gt;
*'''Supply voltage value''' = '''FFAAh''' or '''FFABh''' = `1111 1111 1010 101x` (binary)&lt;br /&gt;
*'''Error value''' = '''FFCCh''' or '''FFCDh''' = `1111 1111 1100 110x` (binary)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;These constants correspond to the '''complete 16-bit value composed of Bytes 3 and Byte 4'''&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; style=&amp;quot;width:100%;&amp;quot;&lt;br /&gt;
|+'''ID 0x4A0, 8 bytes, Sent every 10 ms'''&lt;br /&gt;
!Signal!!Byte!!Start Bit!!Bit Length!!Range / Values!!Notes&lt;br /&gt;
|-&lt;br /&gt;
|Front left direction||1||0||1||0 = forward; 1 = reverse||Direction detection&lt;br /&gt;
|-&lt;br /&gt;
|Front left wheel speed||1 &amp;amp; 2||1||15||0..326 km/h||HEX VALUE = vehicle speed (km/h) × 100&lt;br /&gt;
|-&lt;br /&gt;
|Front right direction||3||0||1||0 = forward; 1 = reverse||&lt;br /&gt;
|-&lt;br /&gt;
|Front right wheel speed||3 &amp;amp; 4||1||15||0..326 km/h||&lt;br /&gt;
|-&lt;br /&gt;
|Rear left direction||5||0||1||0 = forward; 1 = reverse||&lt;br /&gt;
|-&lt;br /&gt;
|Rear left wheel speed||5 &amp;amp; 6||1||15||0..326 km/h||&lt;br /&gt;
|-&lt;br /&gt;
|Rear right direction||7||0||1||0 = forward; 1 = reverse||&lt;br /&gt;
|-&lt;br /&gt;
|Rear right wheel speed||7 &amp;amp; 8||1||15||0..326 km/h||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Speed signal constants for the combined value of '''Byte 1 and Byte 2 (same for 3&amp;amp;4, 5&amp;amp;6, 7&amp;amp;8)'''&lt;br /&gt;
*'''Initial value''' = '''FF88h''' or '''FF89h''' = `1111 1111 1000 100x` (binary)&lt;br /&gt;
*'''Supply voltage value''' = '''FFAAh''' or '''FFABh''' = `1111 1111 1010 101x` (binary)&lt;br /&gt;
*'''Error value''' = '''FFCCh''' or '''FFCDh''' = `1111 1111 1100 110x` (binary)&lt;br /&gt;
If you report more than '''327.42km/h (included)''', the ECU will interpret it as an error.&lt;br /&gt;
&lt;br /&gt;
==Monitoring the values received by the ECU==&lt;br /&gt;
You can use any suitable scanner, such as VCDS, and monitor the channel '''066''' in the measurement values.&lt;br /&gt;
&lt;br /&gt;
This channel lists:&lt;br /&gt;
&lt;br /&gt;
*Vehicle speed&lt;br /&gt;
*Clutch/Brake switch values&lt;br /&gt;
*Cruise control switch values&lt;br /&gt;
*Cruise control status&lt;/div&gt;</summary>
		<author><name>Arte</name></author>
	</entry>
	<entry>
		<id>https://the07k.wiki/index.php?title=Can-bus_emulation_for_cruise_control&amp;diff=7692</id>
		<title>Can-bus emulation for cruise control</title>
		<link rel="alternate" type="text/html" href="https://the07k.wiki/index.php?title=Can-bus_emulation_for_cruise_control&amp;diff=7692"/>
		<updated>2026-03-08T08:01:29Z</updated>

		<summary type="html">&lt;p&gt;Arte: /* Emulating the ABS module (Vehicle speed) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
This is intended as a reference for those who would like to emulate the can-bus messages for the cruise control.&lt;br /&gt;
&lt;br /&gt;
'''Application''': Any swapped vehicles that do not have can-bus support. It would cover both the Bosch ME7.1.1 and a ME17.5/ME17.5.6&lt;br /&gt;
&lt;br /&gt;
==Hardware required==&lt;br /&gt;
You can use any microcontroller that have CAN-bus capability, such as an Arduino or ESP32. You could also use the SpeedPulser Pro that already has a GPS and CAN-bus capability, you would only need to alter the source code and implement the new CAN-bus message:&lt;br /&gt;
&lt;br /&gt;
*https://forbes-automotive.com/products/speedpulser-pro&lt;br /&gt;
*https://github.com/adamforbes92/speedPulserPro&lt;br /&gt;
&lt;br /&gt;
==CAN-bus: What is this sorcery?==&lt;br /&gt;
CAN-bus is a network used by modules to transmit data/information with each other. With only two wires, you can transmit a multitude of messages between modules ([[wikipedia:Multiplexing|multiplexing]]).&lt;br /&gt;
&lt;br /&gt;
In the past, you would have a single wire for every input. In those instances, every button of your cruise control switch has its own signal wire.&lt;br /&gt;
&lt;br /&gt;
The '''objective''' of the CAN-bus emulation is to take all those signals, feed them into your microcontroller and output CAN-bus messages that the ECU will understand, as if it was on a factory MK5/MK6 2.5 chassis.&lt;br /&gt;
&lt;br /&gt;
CAN-bus messages required:&lt;br /&gt;
&lt;br /&gt;
#State of the cruise control switch (Ex.: Main switch, SET, RES, etc.), normally provided by the '''steering column module'''&lt;br /&gt;
#Vehicle speed, normally provided by the '''ABS module'''&lt;br /&gt;
&lt;br /&gt;
==Vehicle speed acquisition==&lt;br /&gt;
The vehicle speed can be retrieved through the following means:&lt;br /&gt;
&lt;br /&gt;
*GPS module&lt;br /&gt;
*VSS sensor&lt;br /&gt;
*Hall-effect sensor mounted into the instrument cluster to read the speed of the speedometer cable&lt;br /&gt;
*There are more ways to gather this information depending on your creativity&lt;br /&gt;
&lt;br /&gt;
==Emulating the cruise control switch==&lt;br /&gt;
The ECU receive the cruise control switch information through the CAN message '''0x38A'''. Here is a detailed description of this CAN message&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; style=&amp;quot;width:100%;&amp;quot;&lt;br /&gt;
|+ID '''0x38A''', '''4 bytes''', Sent every '''20 ms'''&lt;br /&gt;
!Signal!!Byte!!Start bit!!Bits!!Range / Values!!Notes&lt;br /&gt;
|-&lt;br /&gt;
|Checksum (See below)||1||0||8||0..255 (Phys = Hex)||—&lt;br /&gt;
|-&lt;br /&gt;
|Main switch||2||0||1||0 = OFF&amp;lt;br&amp;gt;1 = ON||Latching ON/OFF&lt;br /&gt;
|-&lt;br /&gt;
|Tip switch OFF||2||1||1||0 = not pressed&amp;lt;br&amp;gt;1 = pressed||—&lt;br /&gt;
|-&lt;br /&gt;
|Tip switch DECEL||2||2||1||0 = not pressed&amp;lt;br&amp;gt;1 = pressed||—&lt;br /&gt;
|-&lt;br /&gt;
|Tip switch ACCEL||2||3||1||0 = not pressed&amp;lt;br&amp;gt;1 = pressed||—&lt;br /&gt;
|-&lt;br /&gt;
|Cruise decelerate (hold)||2||4||1||0 = not decelerating&amp;lt;br&amp;gt;1 = decelerating||—&lt;br /&gt;
|-&lt;br /&gt;
|Cruise accelerate (hold)||2||5||1||0 = not accelerating&amp;lt;br&amp;gt;1 = accelerating||—&lt;br /&gt;
|-&lt;br /&gt;
|Cruise control stalk error||2||6||1||0 = OK&amp;lt;br&amp;gt;1 = stalk error||—&lt;br /&gt;
|-&lt;br /&gt;
|Not used||2||7||1||—||—&lt;br /&gt;
|-&lt;br /&gt;
|Tip switch SET||3||0||1||0 = not pressed&amp;lt;br&amp;gt;1 = pressed||—&lt;br /&gt;
|-&lt;br /&gt;
|Tip switch RESUME||3||1||1||0 = not pressed&amp;lt;br&amp;gt;1 = pressed||—&lt;br /&gt;
|-&lt;br /&gt;
|Sender coding||3||2||2||00 = Body network&amp;lt;br&amp;gt;01 = Steering column module&amp;lt;br&amp;gt;10 = Engine||Values per spec&lt;br /&gt;
|-&lt;br /&gt;
|Message counter||3||4||4||0..15 (Phys = Hex)||Rolling counter&lt;br /&gt;
|-&lt;br /&gt;
|Not used||4||0||8||—||Byte 4 unused&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Checksum===&lt;br /&gt;
The checksum is a formula used to validate the integrity of the message, and detect possible data corruption during the transmission of the message. If the checksum does not match the data, the ECU might reject the message. (Implausible message)&lt;br /&gt;
&lt;br /&gt;
[[File:Checksum GRAneu.png|747x747px]]&lt;br /&gt;
&lt;br /&gt;
This checksum is calculated only with Exclusive OR ([[wikipedia:Exclusive_or|XOR]]) operations&lt;br /&gt;
&lt;br /&gt;
===Code example===&lt;br /&gt;
This is a very rough sketch to show a possible implementation. This example would be for an Arduino controller using a MCP2515 shield (hat).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
// demo: Cruise control switch, analog to can-bus message for VW PQ35&lt;br /&gt;
// Very rough sketch, but should work. Feel free to improve&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;SPI.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#define CAN_2515&lt;br /&gt;
&lt;br /&gt;
// Set SPI CS Pin according to your hardware&lt;br /&gt;
&lt;br /&gt;
#if defined(SEEED_WIO_TERMINAL) &amp;amp;&amp;amp; defined(CAN_2518FD)&lt;br /&gt;
const int SPI_CS_PIN  = BCM8;&lt;br /&gt;
const int CAN_INT_PIN = BCM25;&lt;br /&gt;
#else&lt;br /&gt;
&lt;br /&gt;
// For Arduino MCP2515 Hat:&lt;br /&gt;
// the cs pin of the version after v1.1 is default to D9&lt;br /&gt;
// v0.9b and v1.0 is default D10&lt;br /&gt;
const int SPI_CS_PIN = 9;&lt;br /&gt;
const int CAN_INT_PIN = 2;&lt;br /&gt;
#endif&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#ifdef CAN_2518FD&lt;br /&gt;
#include &amp;quot;mcp2518fd_can.h&amp;quot;&lt;br /&gt;
mcp2518fd CAN(SPI_CS_PIN); // Set CS pin&lt;br /&gt;
#endif&lt;br /&gt;
&lt;br /&gt;
#ifdef CAN_2515&lt;br /&gt;
#include &amp;quot;mcp2515_can.h&amp;quot;&lt;br /&gt;
mcp2515_can CAN(SPI_CS_PIN); // Set CS pin&lt;br /&gt;
#endif&lt;br /&gt;
&lt;br /&gt;
const int buttonMain = 4;&lt;br /&gt;
const int buttonRes = 2; &lt;br /&gt;
const int buttonSet = 0;&lt;br /&gt;
&lt;br /&gt;
byte oldSwitchState = 0x0;&lt;br /&gt;
byte sequence = 0x0;&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
    SERIAL_PORT_MONITOR.begin(115200);&lt;br /&gt;
    while(!Serial){};&lt;br /&gt;
&lt;br /&gt;
    while (CAN_OK != CAN.begin(CAN_500KBPS)) { // init powertrain can bus : baudrate = 500k &lt;br /&gt;
        SERIAL_PORT_MONITOR.println(&amp;quot;CAN init fail, retry...&amp;quot;);&lt;br /&gt;
        delay(100);&lt;br /&gt;
    }&lt;br /&gt;
    SERIAL_PORT_MONITOR.println(&amp;quot;CAN init ok!&amp;quot;);&lt;br /&gt;
    pinMode(buttonMain, INPUT_PULLUP);&lt;br /&gt;
    pinMode(buttonRes, INPUT_PULLUP);&lt;br /&gt;
    pinMode(buttonSet, INPUT_PULLUP); // default state 12v&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
&lt;br /&gt;
    byte switchState = 0x0;&lt;br /&gt;
&lt;br /&gt;
    // Read analog inputs&lt;br /&gt;
    int stateMain = digitalRead(buttonMain);&lt;br /&gt;
    int stateRes = digitalRead(buttonRes);&lt;br /&gt;
    int stateSet = digitalRead(buttonSet);&lt;br /&gt;
&lt;br /&gt;
    // You can add more inputs and adjust the logic according the the can-bus chart&lt;br /&gt;
    if (stateMain == LOW) {&lt;br /&gt;
        switchState |= (1 &amp;lt;&amp;lt; 0);  // Set bit 0&lt;br /&gt;
    }&lt;br /&gt;
    if (stateSet == LOW) {&lt;br /&gt;
        switchState |= (1 &amp;lt;&amp;lt; 1);  // Set bit 1&lt;br /&gt;
    }&lt;br /&gt;
    if (stateRes == LOW) {&lt;br /&gt;
        switchState |= (1 &amp;lt;&amp;lt; 2);  // Set bit 2&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    // Check if the switch state has changed&lt;br /&gt;
    if (switchState != oldSwitchState) {&lt;br /&gt;
        Serial.println(switchState);  // Print new state for monitoring purposes&lt;br /&gt;
        oldSwitchState = switchState; // Update oldSwitchState&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // Define bytes for can message (0x38A)&lt;br /&gt;
    byte byteTwo = switchState &amp;amp; 1;&lt;br /&gt;
&lt;br /&gt;
    byte byteThree = switchState &amp;gt;&amp;gt; 1;&lt;br /&gt;
    byteThree = byteThree | 0xC; // Could also be 0x4 (See Sender coding)&lt;br /&gt;
    byteThree = (sequence &amp;lt;&amp;lt; 4) | byteThree;&lt;br /&gt;
&lt;br /&gt;
    byte checksum = byteTwo ^ byteThree;&lt;br /&gt;
&lt;br /&gt;
    unsigned char payload[4] = {checksum, byteTwo, byteThree, 0x00};&lt;br /&gt;
    CAN.sendMsgBuf(0x38A, 0, 4, payload);&lt;br /&gt;
    &lt;br /&gt;
    sequence = (sequence + 1) &amp;amp; 0x0F; // increment for the next frame&lt;br /&gt;
&lt;br /&gt;
    delay(20); // Send every 20ms&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Emulating the ABS module (Vehicle speed) ==&lt;br /&gt;
The ABS module needs to be emulated as the ECU track the vehicle speed for the cruise control.&lt;br /&gt;
&lt;br /&gt;
In practice, it would be possible to do Assembly patches and make the ECU track the engine speed. Although, this extensive work would need to be repeated across multiple firmwares. It makes more sense to emulate the ABS module, especially considered that this requires a skill set out of reach for most readers.&lt;br /&gt;
&lt;br /&gt;
Regarding the ABS, more CAN message will need to be emulated:&lt;br /&gt;
{{Note|note-reminder|This section is under development. Feel free to add content.}}&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; style=&amp;quot;width:100%;&amp;quot;&lt;br /&gt;
|+ '''ID 0x1A0, 8 bytes, Sent every 10 ms'''&lt;br /&gt;
! Signal!!Byte!! Start bit !!Bits!!Range / Values!!Notes&lt;br /&gt;
|-&lt;br /&gt;
|ASR request&lt;br /&gt;
|1||0||1||0 = no request; 1 = ASR request||Request also present in Byte 5 or 6&lt;br /&gt;
|-&lt;br /&gt;
|MSR request|| 1||1||1||0 = no request; 1 = MSR request||Request also present in Byte 7, Byte 6 contains updated info&lt;br /&gt;
|-&lt;br /&gt;
|ABS braking active||1||2||1||0 = inactive; 1 = ABS braking active||&lt;br /&gt;
|-&lt;br /&gt;
|EDS intervention active||1||3||1||0 = inactive; 1 = EDS active||Electronic Differential Lock&lt;br /&gt;
|-&lt;br /&gt;
|FDR intervention active||1||4||1||0 = inactive; 1 = FDR active||&lt;br /&gt;
|-&lt;br /&gt;
|ASR shift influence||1||5||2||00 = no request; 01 = ASR shift map; 02 = downshift request; 03 = shift inhibit||Transmission interaction&lt;br /&gt;
|-&lt;br /&gt;
|EBV intervention active||1||7||1||0 = inactive; 1 = EBV active||Electronic Brake Force Distribution&lt;br /&gt;
|-&lt;br /&gt;
|ABS warning lamp||2||0||1||0 = off; 1 = lamp on||&lt;br /&gt;
|-&lt;br /&gt;
|ASR/FDR warning lamp||2||1||1||0 = off; 1 = lamp on||&lt;br /&gt;
|-&lt;br /&gt;
|Brake warning lamp||2||2||1||0 = off; 1 = lamp on||&lt;br /&gt;
|-&lt;br /&gt;
|Brake light switch||2||3||1||0 = brake not applied; 1 = brake applied||Without brake booster this bit transmits the brake light switch&lt;br /&gt;
|-&lt;br /&gt;
|Brake pressure threshold exceeded||2||3||1||0 = threshold not exceeded; 1 = threshold exceeded||From PQ46 driver brake pressure threshold exceeded&lt;br /&gt;
|-&lt;br /&gt;
|Brake test switch||2||4||1||0 = brake not applied; 1 = brake applied||RB-ABS systems&lt;br /&gt;
|-&lt;br /&gt;
|Brake pressure threshold status||2||4||1||0 = status valid; 1 = status unavailable||From PQ46&lt;br /&gt;
|-&lt;br /&gt;
|Rough-road suppression||2||5||1||0 = disabled; 1 = active||&lt;br /&gt;
|-&lt;br /&gt;
|Rough-road suppression status||2||6||1||0 = valid; 1 = invalid||&lt;br /&gt;
|-&lt;br /&gt;
|ABS diagnostic active||2||7||1||0 = no diagnostic; 1 = diagnostic active||&lt;br /&gt;
|-&lt;br /&gt;
|Brake booster active||3||0||1|| ||&lt;br /&gt;
|-&lt;br /&gt;
|Vehicle speed low byte||3||1||7||0 – 1.27 km/h||HEX VALUE = speed (km/h) × 100&lt;br /&gt;
|-&lt;br /&gt;
|Vehicle speed high byte||4||0||8||0 – 325.12 km/h||HEX VALUE = speed (km/h) / 1.28&lt;br /&gt;
|-&lt;br /&gt;
|ASR torque intervention slow||5||0||8||0 – 99.06 %||VALUE = torque intervention / 0.39&lt;br /&gt;
|-&lt;br /&gt;
|ASR torque intervention fast||6||0||8||0 – 99.06 %||Bit-inverted MSR torque during MSR request&lt;br /&gt;
|-&lt;br /&gt;
|MSR torque intervention||7||0||8||0 – 99.06 %||&lt;br /&gt;
|-&lt;br /&gt;
|Message counter||8||0||4||0 – 15||&lt;br /&gt;
|-&lt;br /&gt;
|ASR controller present||8||4||1||0 = ABS; 1 = ASR||&lt;br /&gt;
|-&lt;br /&gt;
|ESP passive button pressed||8||5||1||0 = ESP active; 1 = ESP passive||Driver pressed ESP button&lt;br /&gt;
|-&lt;br /&gt;
|ESP system status||8||6||1||0 = OK; 1 = fault||ESP disabled due to fault&lt;br /&gt;
|-&lt;br /&gt;
|Speed substitute value||8||7||1||0 = valid speed; 1 = substitute value||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Speed signal constants for the combined value of '''Byte 3 and Byte 4'''&lt;br /&gt;
*'''Initial value''' = '''FF88h''' or '''FF89h''' = `1111 1111 1000 100x` (binary)&lt;br /&gt;
*'''Supply voltage value''' = '''FFAAh''' or '''FFABh''' = `1111 1111 1010 101x` (binary)&lt;br /&gt;
*'''Error value''' = '''FFCCh''' or '''FFCDh''' = `1111 1111 1100 110x` (binary)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;These constants correspond to the '''complete 16-bit value composed of Bytes 3 and Byte 4'''&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; style=&amp;quot;width:100%;&amp;quot;&lt;br /&gt;
|+'''ID 0x4A0, 8 bytes, Sent every 10 ms'''&lt;br /&gt;
!Signal!!Byte!!Start Bit!!Bit Length!!Range / Values!!Notes&lt;br /&gt;
|-&lt;br /&gt;
|Front left direction||1||0||1||0 = forward; 1 = reverse||Direction detection&lt;br /&gt;
|-&lt;br /&gt;
|Front left wheel speed||1 &amp;amp; 2||1||15||0..326 km/h||HEX VALUE = vehicle speed (km/h) × 100&lt;br /&gt;
|-&lt;br /&gt;
|Front right direction||3||0||1||0 = forward; 1 = reverse||&lt;br /&gt;
|-&lt;br /&gt;
|Front right wheel speed||3 &amp;amp; 4||1||15||0..326 km/h||&lt;br /&gt;
|-&lt;br /&gt;
|Rear left direction||5||0||1||0 = forward; 1 = reverse||&lt;br /&gt;
|-&lt;br /&gt;
|Rear left wheel speed||5 &amp;amp; 6||1||15||0..326 km/h||&lt;br /&gt;
|-&lt;br /&gt;
|Rear right direction||7||0||1||0 = forward; 1 = reverse||&lt;br /&gt;
|-&lt;br /&gt;
|Rear right wheel speed||7 &amp;amp; 8||1||15||0..326 km/h||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Speed signal constants for the combined value of '''Byte 1 and Byte 2 (same for 3&amp;amp;4, 5&amp;amp;6, 7&amp;amp;8)'''&lt;br /&gt;
*'''Initial value''' = '''FF88h''' or '''FF89h''' = `1111 1111 1000 100x` (binary)&lt;br /&gt;
*'''Supply voltage value''' = '''FFAAh''' or '''FFABh''' = `1111 1111 1010 101x` (binary)&lt;br /&gt;
*'''Error value''' = '''FFCCh''' or '''FFCDh''' = `1111 1111 1100 110x` (binary)&lt;br /&gt;
If you report more than '''327.42km/h (included)''', the ECU will interpret it as an error.&lt;br /&gt;
&lt;br /&gt;
==Monitoring the values received by the ECU==&lt;br /&gt;
You can use any suitable scanner, such as VCDS, and monitor the channel '''066''' in the measurement values.&lt;br /&gt;
&lt;br /&gt;
This channel lists:&lt;br /&gt;
&lt;br /&gt;
*Vehicle speed&lt;br /&gt;
*Clutch/Brake switch values&lt;br /&gt;
*Cruise control switch values&lt;br /&gt;
*Cruise control status&lt;/div&gt;</summary>
		<author><name>Arte</name></author>
	</entry>
	<entry>
		<id>https://the07k.wiki/index.php?title=Can-bus_emulation_for_cruise_control&amp;diff=7691</id>
		<title>Can-bus emulation for cruise control</title>
		<link rel="alternate" type="text/html" href="https://the07k.wiki/index.php?title=Can-bus_emulation_for_cruise_control&amp;diff=7691"/>
		<updated>2026-03-08T07:58:48Z</updated>

		<summary type="html">&lt;p&gt;Arte: /* Emulating the ABS module (Vehicle speed) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
This is intended as a reference for those who would like to emulate the can-bus messages for the cruise control.&lt;br /&gt;
&lt;br /&gt;
'''Application''': Any swapped vehicles that do not have can-bus support. It would cover both the Bosch ME7.1.1 and a ME17.5/ME17.5.6&lt;br /&gt;
&lt;br /&gt;
==Hardware required==&lt;br /&gt;
You can use any microcontroller that have CAN-bus capability, such as an Arduino or ESP32. You could also use the SpeedPulser Pro that already has a GPS and CAN-bus capability, you would only need to alter the source code and implement the new CAN-bus message:&lt;br /&gt;
&lt;br /&gt;
*https://forbes-automotive.com/products/speedpulser-pro&lt;br /&gt;
*https://github.com/adamforbes92/speedPulserPro&lt;br /&gt;
&lt;br /&gt;
==CAN-bus: What is this sorcery?==&lt;br /&gt;
CAN-bus is a network used by modules to transmit data/information with each other. With only two wires, you can transmit a multitude of messages between modules ([[wikipedia:Multiplexing|multiplexing]]).&lt;br /&gt;
&lt;br /&gt;
In the past, you would have a single wire for every input. In those instances, every button of your cruise control switch has its own signal wire.&lt;br /&gt;
&lt;br /&gt;
The '''objective''' of the CAN-bus emulation is to take all those signals, feed them into your microcontroller and output CAN-bus messages that the ECU will understand, as if it was on a factory MK5/MK6 2.5 chassis.&lt;br /&gt;
&lt;br /&gt;
CAN-bus messages required:&lt;br /&gt;
&lt;br /&gt;
#State of the cruise control switch (Ex.: Main switch, SET, RES, etc.), normally provided by the '''steering column module'''&lt;br /&gt;
#Vehicle speed, normally provided by the '''ABS module'''&lt;br /&gt;
&lt;br /&gt;
==Vehicle speed acquisition==&lt;br /&gt;
The vehicle speed can be retrieved through the following means:&lt;br /&gt;
&lt;br /&gt;
*GPS module&lt;br /&gt;
*VSS sensor&lt;br /&gt;
*Hall-effect sensor mounted into the instrument cluster to read the speed of the speedometer cable&lt;br /&gt;
*There are more ways to gather this information depending on your creativity&lt;br /&gt;
&lt;br /&gt;
==Emulating the cruise control switch==&lt;br /&gt;
The ECU receive the cruise control switch information through the CAN message '''0x38A'''. Here is a detailed description of this CAN message&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; style=&amp;quot;width:100%;&amp;quot;&lt;br /&gt;
|+ID '''0x38A''', '''4 bytes''', Sent every '''20 ms'''&lt;br /&gt;
!Signal!!Byte!!Start bit!!Bits!!Range / Values!!Notes&lt;br /&gt;
|-&lt;br /&gt;
|Checksum (See below)||1||0||8||0..255 (Phys = Hex)||—&lt;br /&gt;
|-&lt;br /&gt;
|Main switch||2||0||1||0 = OFF&amp;lt;br&amp;gt;1 = ON||Latching ON/OFF&lt;br /&gt;
|-&lt;br /&gt;
|Tip switch OFF||2||1||1||0 = not pressed&amp;lt;br&amp;gt;1 = pressed||—&lt;br /&gt;
|-&lt;br /&gt;
|Tip switch DECEL||2||2||1||0 = not pressed&amp;lt;br&amp;gt;1 = pressed||—&lt;br /&gt;
|-&lt;br /&gt;
|Tip switch ACCEL||2||3||1||0 = not pressed&amp;lt;br&amp;gt;1 = pressed||—&lt;br /&gt;
|-&lt;br /&gt;
|Cruise decelerate (hold)||2||4||1||0 = not decelerating&amp;lt;br&amp;gt;1 = decelerating||—&lt;br /&gt;
|-&lt;br /&gt;
|Cruise accelerate (hold)||2||5||1||0 = not accelerating&amp;lt;br&amp;gt;1 = accelerating||—&lt;br /&gt;
|-&lt;br /&gt;
|Cruise control stalk error||2||6||1||0 = OK&amp;lt;br&amp;gt;1 = stalk error||—&lt;br /&gt;
|-&lt;br /&gt;
|Not used||2||7||1||—||—&lt;br /&gt;
|-&lt;br /&gt;
|Tip switch SET||3||0||1||0 = not pressed&amp;lt;br&amp;gt;1 = pressed||—&lt;br /&gt;
|-&lt;br /&gt;
|Tip switch RESUME||3||1||1||0 = not pressed&amp;lt;br&amp;gt;1 = pressed||—&lt;br /&gt;
|-&lt;br /&gt;
|Sender coding||3||2||2||00 = Body network&amp;lt;br&amp;gt;01 = Steering column module&amp;lt;br&amp;gt;10 = Engine||Values per spec&lt;br /&gt;
|-&lt;br /&gt;
|Message counter||3||4||4||0..15 (Phys = Hex)||Rolling counter&lt;br /&gt;
|-&lt;br /&gt;
|Not used||4||0||8||—||Byte 4 unused&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Checksum===&lt;br /&gt;
The checksum is a formula used to validate the integrity of the message, and detect possible data corruption during the transmission of the message. If the checksum does not match the data, the ECU might reject the message. (Implausible message)&lt;br /&gt;
&lt;br /&gt;
[[File:Checksum GRAneu.png|747x747px]]&lt;br /&gt;
&lt;br /&gt;
This checksum is calculated only with Exclusive OR ([[wikipedia:Exclusive_or|XOR]]) operations&lt;br /&gt;
&lt;br /&gt;
===Code example===&lt;br /&gt;
This is a very rough sketch to show a possible implementation. This example would be for an Arduino controller using a MCP2515 shield (hat).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
// demo: Cruise control switch, analog to can-bus message for VW PQ35&lt;br /&gt;
// Very rough sketch, but should work. Feel free to improve&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;SPI.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#define CAN_2515&lt;br /&gt;
&lt;br /&gt;
// Set SPI CS Pin according to your hardware&lt;br /&gt;
&lt;br /&gt;
#if defined(SEEED_WIO_TERMINAL) &amp;amp;&amp;amp; defined(CAN_2518FD)&lt;br /&gt;
const int SPI_CS_PIN  = BCM8;&lt;br /&gt;
const int CAN_INT_PIN = BCM25;&lt;br /&gt;
#else&lt;br /&gt;
&lt;br /&gt;
// For Arduino MCP2515 Hat:&lt;br /&gt;
// the cs pin of the version after v1.1 is default to D9&lt;br /&gt;
// v0.9b and v1.0 is default D10&lt;br /&gt;
const int SPI_CS_PIN = 9;&lt;br /&gt;
const int CAN_INT_PIN = 2;&lt;br /&gt;
#endif&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#ifdef CAN_2518FD&lt;br /&gt;
#include &amp;quot;mcp2518fd_can.h&amp;quot;&lt;br /&gt;
mcp2518fd CAN(SPI_CS_PIN); // Set CS pin&lt;br /&gt;
#endif&lt;br /&gt;
&lt;br /&gt;
#ifdef CAN_2515&lt;br /&gt;
#include &amp;quot;mcp2515_can.h&amp;quot;&lt;br /&gt;
mcp2515_can CAN(SPI_CS_PIN); // Set CS pin&lt;br /&gt;
#endif&lt;br /&gt;
&lt;br /&gt;
const int buttonMain = 4;&lt;br /&gt;
const int buttonRes = 2; &lt;br /&gt;
const int buttonSet = 0;&lt;br /&gt;
&lt;br /&gt;
byte oldSwitchState = 0x0;&lt;br /&gt;
byte sequence = 0x0;&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
    SERIAL_PORT_MONITOR.begin(115200);&lt;br /&gt;
    while(!Serial){};&lt;br /&gt;
&lt;br /&gt;
    while (CAN_OK != CAN.begin(CAN_500KBPS)) { // init powertrain can bus : baudrate = 500k &lt;br /&gt;
        SERIAL_PORT_MONITOR.println(&amp;quot;CAN init fail, retry...&amp;quot;);&lt;br /&gt;
        delay(100);&lt;br /&gt;
    }&lt;br /&gt;
    SERIAL_PORT_MONITOR.println(&amp;quot;CAN init ok!&amp;quot;);&lt;br /&gt;
    pinMode(buttonMain, INPUT_PULLUP);&lt;br /&gt;
    pinMode(buttonRes, INPUT_PULLUP);&lt;br /&gt;
    pinMode(buttonSet, INPUT_PULLUP); // default state 12v&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
&lt;br /&gt;
    byte switchState = 0x0;&lt;br /&gt;
&lt;br /&gt;
    // Read analog inputs&lt;br /&gt;
    int stateMain = digitalRead(buttonMain);&lt;br /&gt;
    int stateRes = digitalRead(buttonRes);&lt;br /&gt;
    int stateSet = digitalRead(buttonSet);&lt;br /&gt;
&lt;br /&gt;
    // You can add more inputs and adjust the logic according the the can-bus chart&lt;br /&gt;
    if (stateMain == LOW) {&lt;br /&gt;
        switchState |= (1 &amp;lt;&amp;lt; 0);  // Set bit 0&lt;br /&gt;
    }&lt;br /&gt;
    if (stateSet == LOW) {&lt;br /&gt;
        switchState |= (1 &amp;lt;&amp;lt; 1);  // Set bit 1&lt;br /&gt;
    }&lt;br /&gt;
    if (stateRes == LOW) {&lt;br /&gt;
        switchState |= (1 &amp;lt;&amp;lt; 2);  // Set bit 2&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    // Check if the switch state has changed&lt;br /&gt;
    if (switchState != oldSwitchState) {&lt;br /&gt;
        Serial.println(switchState);  // Print new state for monitoring purposes&lt;br /&gt;
        oldSwitchState = switchState; // Update oldSwitchState&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // Define bytes for can message (0x38A)&lt;br /&gt;
    byte byteTwo = switchState &amp;amp; 1;&lt;br /&gt;
&lt;br /&gt;
    byte byteThree = switchState &amp;gt;&amp;gt; 1;&lt;br /&gt;
    byteThree = byteThree | 0xC; // Could also be 0x4 (See Sender coding)&lt;br /&gt;
    byteThree = (sequence &amp;lt;&amp;lt; 4) | byteThree;&lt;br /&gt;
&lt;br /&gt;
    byte checksum = byteTwo ^ byteThree;&lt;br /&gt;
&lt;br /&gt;
    unsigned char payload[4] = {checksum, byteTwo, byteThree, 0x00};&lt;br /&gt;
    CAN.sendMsgBuf(0x38A, 0, 4, payload);&lt;br /&gt;
    &lt;br /&gt;
    sequence = (sequence + 1) &amp;amp; 0x0F; // increment for the next frame&lt;br /&gt;
&lt;br /&gt;
    delay(20); // Send every 20ms&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Emulating the ABS module (Vehicle speed) ==&lt;br /&gt;
The ABS module needs to be emulated as the ECU track the vehicle speed for the cruise control.&lt;br /&gt;
&lt;br /&gt;
In practice, it would be possible to do Assembly patches and make the ECU track the engine speed. Although, this extensive work would need to be repeated across multiple firmwares. It makes more sense to emulate the ABS module, especially considered that this requires a skill set out of reach for most readers.&lt;br /&gt;
&lt;br /&gt;
Regarding the ABS, more CAN message will need to be emulated:&lt;br /&gt;
{{Note|note-reminder|This section is under development. Feel free to add content.}}&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; style=&amp;quot;width:100%;&amp;quot;&lt;br /&gt;
|+ '''ID 0x1A0, 8 bytes, Sent every 10 ms'''&lt;br /&gt;
! Signal!!Byte!! Start bit !!Bits!!Range / Values!!Notes&lt;br /&gt;
|-&lt;br /&gt;
|ASR request&lt;br /&gt;
|1||0||1||0 = no request; 1 = ASR request||Request also present in Byte 5 or 6&lt;br /&gt;
|-&lt;br /&gt;
|MSR request|| 1||1||1||0 = no request; 1 = MSR request||Request also present in Byte 7, Byte 6 contains updated info&lt;br /&gt;
|-&lt;br /&gt;
|ABS braking active||1||2||1||0 = inactive; 1 = ABS braking active||&lt;br /&gt;
|-&lt;br /&gt;
|EDS intervention active||1||3||1||0 = inactive; 1 = EDS active||Electronic Differential Lock&lt;br /&gt;
|-&lt;br /&gt;
|FDR intervention active||1||4||1||0 = inactive; 1 = FDR active||&lt;br /&gt;
|-&lt;br /&gt;
|ASR shift influence||1||5||2||00 = no request; 01 = ASR shift map; 02 = downshift request; 03 = shift inhibit||Transmission interaction&lt;br /&gt;
|-&lt;br /&gt;
|EBV intervention active||1||7||1||0 = inactive; 1 = EBV active||Electronic Brake Force Distribution&lt;br /&gt;
|-&lt;br /&gt;
|ABS warning lamp||2||0||1||0 = off; 1 = lamp on||&lt;br /&gt;
|-&lt;br /&gt;
|ASR/FDR warning lamp||2||1||1||0 = off; 1 = lamp on||&lt;br /&gt;
|-&lt;br /&gt;
|Brake warning lamp||2||2||1||0 = off; 1 = lamp on||&lt;br /&gt;
|-&lt;br /&gt;
|Brake light switch||2||3||1||0 = brake not applied; 1 = brake applied||Without brake booster this bit transmits the brake light switch&lt;br /&gt;
|-&lt;br /&gt;
|Brake pressure threshold exceeded||2||3||1||0 = threshold not exceeded; 1 = threshold exceeded||From PQ46 driver brake pressure threshold exceeded&lt;br /&gt;
|-&lt;br /&gt;
|Brake test switch||2||4||1||0 = brake not applied; 1 = brake applied||RB-ABS systems&lt;br /&gt;
|-&lt;br /&gt;
|Brake pressure threshold status||2||4||1||0 = status valid; 1 = status unavailable||From PQ46&lt;br /&gt;
|-&lt;br /&gt;
|Rough-road suppression||2||5||1||0 = disabled; 1 = active||&lt;br /&gt;
|-&lt;br /&gt;
|Rough-road suppression status||2||6||1||0 = valid; 1 = invalid||&lt;br /&gt;
|-&lt;br /&gt;
|ABS diagnostic active||2||7||1||0 = no diagnostic; 1 = diagnostic active||&lt;br /&gt;
|-&lt;br /&gt;
|Brake booster active||3||0||1|| ||&lt;br /&gt;
|-&lt;br /&gt;
|Vehicle speed low byte||3||1||7||0 – 1.27 km/h||HEX VALUE = speed (km/h) × 100&lt;br /&gt;
|-&lt;br /&gt;
|Vehicle speed high byte||4||0||8||0 – 325.12 km/h||HEX VALUE = speed (km/h) / 1.28&lt;br /&gt;
|-&lt;br /&gt;
|ASR torque intervention slow||5||0||8||0 – 99.06 %||VALUE = torque intervention / 0.39&lt;br /&gt;
|-&lt;br /&gt;
|ASR torque intervention fast||6||0||8||0 – 99.06 %||Bit-inverted MSR torque during MSR request&lt;br /&gt;
|-&lt;br /&gt;
|MSR torque intervention||7||0||8||0 – 99.06 %||&lt;br /&gt;
|-&lt;br /&gt;
|Message counter||8||0||4||0 – 15||&lt;br /&gt;
|-&lt;br /&gt;
|ASR controller present||8||4||1||0 = ABS; 1 = ASR||&lt;br /&gt;
|-&lt;br /&gt;
|ESP passive button pressed||8||5||1||0 = ESP active; 1 = ESP passive||Driver pressed ESP button&lt;br /&gt;
|-&lt;br /&gt;
|ESP system status||8||6||1||0 = OK; 1 = fault||ESP disabled due to fault&lt;br /&gt;
|-&lt;br /&gt;
|Speed substitute value||8||7||1||0 = valid speed; 1 = substitute value||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Speed signal constants for the combined value of '''Byte 3 and Byte 4'''&lt;br /&gt;
*'''Initial value''' = '''FF88h''' or '''FF89h''' = `1111 1111 1000 100x` (binary)&lt;br /&gt;
*'''Supply voltage value''' = '''FFAAh''' or '''FFABh''' = `1111 1111 1010 101x` (binary)&lt;br /&gt;
*'''Error value''' = '''FFCCh''' or '''FFCDh''' = `1111 1111 1100 110x` (binary)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;These constants correspond to the '''complete 16-bit value composed of Bytes 3 and Byte 4'''&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; style=&amp;quot;width:100%;&amp;quot;&lt;br /&gt;
|+'''ID 0x4A0, 8 bytes, Sent every 10 ms'''&lt;br /&gt;
!Signal!!Byte!!Start Bit!!Bit Length!!Range / Values!!Notes&lt;br /&gt;
|-&lt;br /&gt;
|Front left direction||1||0||1||0 = forward; 1 = reverse||Direction detection&lt;br /&gt;
|-&lt;br /&gt;
|Front left wheel speed||1 &amp;amp; 2||1||15||0..326 km/h||HEX VALUE = vehicle speed (km/h) × 100&lt;br /&gt;
|-&lt;br /&gt;
|Front right direction||3||0||1||0 = forward; 1 = reverse||&lt;br /&gt;
|-&lt;br /&gt;
|Front right wheel speed||3 &amp;amp; 4||1||15||0..326 km/h||&lt;br /&gt;
|-&lt;br /&gt;
|Rear left direction||5||0||1||0 = forward; 1 = reverse||&lt;br /&gt;
|-&lt;br /&gt;
|Rear left wheel speed||5 &amp;amp; 6||1||15||0..326 km/h||&lt;br /&gt;
|-&lt;br /&gt;
|Rear right direction||7||0||1||0 = forward; 1 = reverse||&lt;br /&gt;
|-&lt;br /&gt;
|Rear right wheel speed||7 &amp;amp; 8||0||15||0..326 km/h||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Speed signal constants for the combined value of '''Byte 1 and Byte 2 (same for 3&amp;amp;4, 5&amp;amp;6, 7&amp;amp;8)'''&lt;br /&gt;
*'''Initial value''' = '''FF88h''' or '''FF89h''' = `1111 1111 1000 100x` (binary)&lt;br /&gt;
*'''Supply voltage value''' = '''FFAAh''' or '''FFABh''' = `1111 1111 1010 101x` (binary)&lt;br /&gt;
*'''Error value''' = '''FFCCh''' or '''FFCDh''' = `1111 1111 1100 110x` (binary)&lt;br /&gt;
If you report more than '''327.42km/h (included)''', the ECU will interpret it as an error.&lt;br /&gt;
&lt;br /&gt;
==Monitoring the values received by the ECU==&lt;br /&gt;
You can use any suitable scanner, such as VCDS, and monitor the channel '''066''' in the measurement values.&lt;br /&gt;
&lt;br /&gt;
This channel lists:&lt;br /&gt;
&lt;br /&gt;
*Vehicle speed&lt;br /&gt;
*Clutch/Brake switch values&lt;br /&gt;
*Cruise control switch values&lt;br /&gt;
*Cruise control status&lt;/div&gt;</summary>
		<author><name>Arte</name></author>
	</entry>
	<entry>
		<id>https://the07k.wiki/index.php?title=Maps_helper_(Editor)&amp;diff=7690</id>
		<title>Maps helper (Editor)</title>
		<link rel="alternate" type="text/html" href="https://the07k.wiki/index.php?title=Maps_helper_(Editor)&amp;diff=7690"/>
		<updated>2026-03-05T09:48:13Z</updated>

		<summary type="html">&lt;p&gt;Arte: /* Fuel Trim Configuration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= ACCELERATOR PEDAL: =&lt;br /&gt;
&lt;br /&gt;
== Desired Torque Profile (0/1/2/3/4/Reverse) ==&lt;br /&gt;
'''X axis:''' Engine speed (RPM)&lt;br /&gt;
&lt;br /&gt;
'''Y axis:''' Accelerator pedal position (%)&lt;br /&gt;
&lt;br /&gt;
'''Map:''' Target engine torque&lt;br /&gt;
&lt;br /&gt;
This map defines the relationship between accelerator pedal position and requested engine torque (throttle response).&lt;br /&gt;
&lt;br /&gt;
* Lower values → smoother and more progressive response&lt;br /&gt;
* Higher values → more aggressive and dynamic response&lt;br /&gt;
&lt;br /&gt;
Adjust carefully to maintain drivability and traction.&lt;br /&gt;
&lt;br /&gt;
= BOOST CONTROL =&lt;br /&gt;
&lt;br /&gt;
== Boost Solenoid Duty Cycle ==&lt;br /&gt;
'''X axis:''' Engine speed (RPM)&lt;br /&gt;
&lt;br /&gt;
'''Y axis:''' Actual gear&lt;br /&gt;
&lt;br /&gt;
'''Map:''' Boost control solenoid duty cycle (%)&lt;br /&gt;
&lt;br /&gt;
This map controls the duty cycle of the boost control solenoid.&lt;br /&gt;
&lt;br /&gt;
Continuous high-duty operation may reduce solenoid valve lifespan.&lt;br /&gt;
&lt;br /&gt;
To prevent unnecessary solenoid activity:&lt;br /&gt;
&lt;br /&gt;
* Set appropriate minimum engine speed&lt;br /&gt;
* Set appropriate minimum MAP pressure&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= FUEL: =&lt;br /&gt;
All fuel-related adjustments must be performed responsibly. Incorrect settings may cause severe engine damage.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Cold Start Factor ==&lt;br /&gt;
'''X axis:''' Engine coolant temperature (°C)&lt;br /&gt;
&lt;br /&gt;
'''Map:''' Cold start fuel correction factor&lt;br /&gt;
&lt;br /&gt;
A cold engine requires additional fuel for stable operation.&lt;br /&gt;
&lt;br /&gt;
Adjust this map if:&lt;br /&gt;
&lt;br /&gt;
* Idle is unstable during warm-up&lt;br /&gt;
* AFR/lambda is incorrect during cold start&lt;br /&gt;
* Engine stalls or runs excessively rich during warm-up&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Fuel Mass to Injection Time Conversion ==&lt;br /&gt;
'''Map type:''' Single value&lt;br /&gt;
&lt;br /&gt;
Defines the conversion factor between calculated fuel mass and injector opening time.&lt;br /&gt;
&lt;br /&gt;
Adjustment is required when replacing injectors.&lt;br /&gt;
&lt;br /&gt;
* Larger injectors → lower map value&lt;br /&gt;
* Smaller injectors → higher map value&lt;br /&gt;
&lt;br /&gt;
Always verify changes using logs.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Injector Linearization Correction ==&lt;br /&gt;
'''X axis:''' Engine speed (RPM)&lt;br /&gt;
&lt;br /&gt;
'''Y axis:''' Injection time (ms)&lt;br /&gt;
&lt;br /&gt;
'''Map:''' Fuel correction factor&lt;br /&gt;
&lt;br /&gt;
This map corrects injector non-linearity.&lt;br /&gt;
&lt;br /&gt;
* Higher values → more injected fuel&lt;br /&gt;
* Lower values → less injected fuel&lt;br /&gt;
&lt;br /&gt;
Adjust using lambda correction logs.&lt;br /&gt;
&lt;br /&gt;
Ensure actual lambda matches target lambda under all load conditions.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Fuel Trim Configuration ==&lt;br /&gt;
&lt;br /&gt;
* To disable the long-term fuel trim, set value to '''135'''&lt;br /&gt;
* To re-enable the long-term fuel trim, set value to '''132'''&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Injector Dead Time ==&lt;br /&gt;
'''X axis:''' Battery voltage (V)&lt;br /&gt;
&lt;br /&gt;
'''Map:''' Injector dead time (ms)&lt;br /&gt;
&lt;br /&gt;
Dead time values are injector-specific.&lt;br /&gt;
&lt;br /&gt;
Adjustment is not required unless injectors are replaced.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Lambda Target ==&lt;br /&gt;
'''X axis:''' Engine speed (RPM)&lt;br /&gt;
&lt;br /&gt;
'''Y axis:''' Engine load (%)&lt;br /&gt;
&lt;br /&gt;
'''Map:''' Target lambda value&lt;br /&gt;
&lt;br /&gt;
Defines the target air-fuel ratio.&lt;br /&gt;
&lt;br /&gt;
Adjust this map to:&lt;br /&gt;
&lt;br /&gt;
* Optimize performance&lt;br /&gt;
* Improve fuel economy&lt;br /&gt;
* Ensure safe operation under boost&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Minimum Measurable Lambda ==&lt;br /&gt;
'''Map type:''' Single value&lt;br /&gt;
&lt;br /&gt;
Defines the diagnostic lower limit for the lambda sensor.&lt;br /&gt;
&lt;br /&gt;
If your target lambda is lower than this limit, adjust this value to avoid diagnostic fault codes.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= IDLE =&lt;br /&gt;
&lt;br /&gt;
== Idle Target Speed ==&lt;br /&gt;
'''X axis:''' Engine coolant temperature (°C)&lt;br /&gt;
&lt;br /&gt;
'''Y axis:''' Actual gear&lt;br /&gt;
&lt;br /&gt;
'''Map:''' Target idle speed (RPM)&lt;br /&gt;
&lt;br /&gt;
Defines engine idle speed under different temperature and gear conditions.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== RPM Curve After Start ==&lt;br /&gt;
'''X axis:''' Time since engine start (s)&lt;br /&gt;
&lt;br /&gt;
'''Y axis:''' Engine coolant temperature (°C)&lt;br /&gt;
&lt;br /&gt;
'''Map:''' Target idle speed (RPM)&lt;br /&gt;
&lt;br /&gt;
Defines elevated idle speed strategy immediately after engine startup.&lt;br /&gt;
&lt;br /&gt;
Used for:&lt;br /&gt;
&lt;br /&gt;
* Improved cold-start stability&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= IGNITION =&lt;br /&gt;
Incorrect ignition settings may cause engine knock and severe engine damage.&lt;br /&gt;
&lt;br /&gt;
Always validate changes using knock logs and dyno testing.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Ignition Advance ==&lt;br /&gt;
'''X axis:''' Engine speed (RPM)&lt;br /&gt;
&lt;br /&gt;
'''Y axis:''' Engine load (%)&lt;br /&gt;
&lt;br /&gt;
'''Map:''' Ignition timing advance (°)&lt;br /&gt;
&lt;br /&gt;
Defines base ignition timing.&lt;br /&gt;
&lt;br /&gt;
Adjust to optimize:&lt;br /&gt;
&lt;br /&gt;
* Power output&lt;br /&gt;
* Efficiency&lt;br /&gt;
* Knock resistance&lt;br /&gt;
&lt;br /&gt;
Avoid large changes unless you fully understand ignition tuning principles.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Minimum Ignition Angle ==&lt;br /&gt;
''(Recommended rename from &amp;quot;Latest possible ignition angle&amp;quot;)''&lt;br /&gt;
&lt;br /&gt;
'''X axis:''' Engine speed (RPM)&lt;br /&gt;
&lt;br /&gt;
'''Y axis:''' Engine load (%)&lt;br /&gt;
&lt;br /&gt;
'''Map:''' Minimum allowed ignition angle (°)&lt;br /&gt;
&lt;br /&gt;
Defines the lower safety limit for ignition timing.&lt;br /&gt;
&lt;br /&gt;
Adjust only if calculated ignition values fall below this threshold.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Minimum Ignition Angle During Catalyst Heating ==&lt;br /&gt;
'''X axis:''' Engine speed (RPM)&lt;br /&gt;
&lt;br /&gt;
'''Y axis:''' Engine load (%)&lt;br /&gt;
&lt;br /&gt;
'''Map:''' Minimum ignition angle during catalyst heating (°)&lt;br /&gt;
&lt;br /&gt;
Defines ignition timing lower limit during catalyst warm-up phase.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Dwell Maps ==&lt;br /&gt;
Modification is generally not recommended unless:&lt;br /&gt;
&lt;br /&gt;
* Ignition coils are replaced&lt;br /&gt;
* System voltage behavior changes&lt;br /&gt;
&lt;br /&gt;
Improper dwell settings may damage ignition coils.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Overrun Fuel Cut-Off (Deceleration) =&lt;br /&gt;
&lt;br /&gt;
== Fuel Cut-Off Delay During Gear Change ==&lt;br /&gt;
'''X axis:''' Engine speed (RPM)&lt;br /&gt;
&lt;br /&gt;
'''Y axis:''' Engine load (%)&lt;br /&gt;
&lt;br /&gt;
'''Map:''' Delay time (s)&lt;br /&gt;
&lt;br /&gt;
Defines how long fuel is delivered after accelerator release during gear change (clutch engaged).&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Overrun Fuel Cut-Off Delay ==&lt;br /&gt;
'''X axis:''' Engine speed (RPM)&lt;br /&gt;
&lt;br /&gt;
'''Y axis:''' Engine load (%)&lt;br /&gt;
&lt;br /&gt;
'''Map:''' Delay time (s)&lt;br /&gt;
&lt;br /&gt;
Defines how long fuel is delivered after accelerator release during engine braking.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Fuel Cut-Off Delay at High RPM and High Catalyst Temperature ==&lt;br /&gt;
'''X axis:''' Engine speed (RPM)&lt;br /&gt;
&lt;br /&gt;
'''Y axis:''' Catalyst temperature (°C)&lt;br /&gt;
&lt;br /&gt;
'''Map:''' Delay time (s)&lt;br /&gt;
&lt;br /&gt;
Defines delay before fuel cut-off under high thermal load conditions.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Project Configuration =&lt;br /&gt;
&lt;br /&gt;
== Catalyst Diagnosis ==&lt;br /&gt;
'''Map type:''' Single value&lt;br /&gt;
&lt;br /&gt;
Set to:&lt;br /&gt;
&lt;br /&gt;
* 1 → Catalyst diagnosis enabled&lt;br /&gt;
* 0 → Catalyst diagnosis disabled (cat-less setup)&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Catalyst Diagnosis (OBD2 Mode) ==&lt;br /&gt;
'''Map type:''' Single value&lt;br /&gt;
&lt;br /&gt;
Set to:&lt;br /&gt;
&lt;br /&gt;
* 1 → Enabled&lt;br /&gt;
* 0 → Disabled (cat-less setup)&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Lambda Sensor Configuration ==&lt;br /&gt;
'''Map type:''' Single value&lt;br /&gt;
&lt;br /&gt;
Set to:&lt;br /&gt;
&lt;br /&gt;
* 1 → Post-catalyst lambda sensor disabled&lt;br /&gt;
* 0 → Sensor enabled&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== EVAP / Tank Ventilation System ==&lt;br /&gt;
'''Map type:''' Single value&lt;br /&gt;
&lt;br /&gt;
Set to:&lt;br /&gt;
&lt;br /&gt;
* 1 → System enabled&lt;br /&gt;
* 0 → EVAP system removed&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= VVT Control =&lt;br /&gt;
&lt;br /&gt;
== Intake Camshaft Advance ==&lt;br /&gt;
'''X axis:''' Engine speed (RPM)&lt;br /&gt;
&lt;br /&gt;
'''Y axis:''' Engine load (%)&lt;br /&gt;
&lt;br /&gt;
'''Map:''' Intake camshaft advance angle (°)&lt;br /&gt;
&lt;br /&gt;
Adjust this map to optimize torque and power delivery.&lt;br /&gt;
&lt;br /&gt;
Dyno validation is strongly recommended for optimal results.&lt;/div&gt;</summary>
		<author><name>Arte</name></author>
	</entry>
	<entry>
		<id>https://the07k.wiki/index.php?title=Maps_helper_(Editor)&amp;diff=7689</id>
		<title>Maps helper (Editor)</title>
		<link rel="alternate" type="text/html" href="https://the07k.wiki/index.php?title=Maps_helper_(Editor)&amp;diff=7689"/>
		<updated>2026-03-05T09:41:55Z</updated>

		<summary type="html">&lt;p&gt;Arte: /* Fuel Trim Configuration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= ACCELERATOR PEDAL: =&lt;br /&gt;
&lt;br /&gt;
== Desired Torque Profile (0/1/2/3/4/Reverse) ==&lt;br /&gt;
'''X axis:''' Engine speed (RPM)&lt;br /&gt;
&lt;br /&gt;
'''Y axis:''' Accelerator pedal position (%)&lt;br /&gt;
&lt;br /&gt;
'''Map:''' Target engine torque&lt;br /&gt;
&lt;br /&gt;
This map defines the relationship between accelerator pedal position and requested engine torque (throttle response).&lt;br /&gt;
&lt;br /&gt;
* Lower values → smoother and more progressive response&lt;br /&gt;
* Higher values → more aggressive and dynamic response&lt;br /&gt;
&lt;br /&gt;
Adjust carefully to maintain drivability and traction.&lt;br /&gt;
&lt;br /&gt;
= BOOST CONTROL =&lt;br /&gt;
&lt;br /&gt;
== Boost Solenoid Duty Cycle ==&lt;br /&gt;
'''X axis:''' Engine speed (RPM)&lt;br /&gt;
&lt;br /&gt;
'''Y axis:''' Actual gear&lt;br /&gt;
&lt;br /&gt;
'''Map:''' Boost control solenoid duty cycle (%)&lt;br /&gt;
&lt;br /&gt;
This map controls the duty cycle of the boost control solenoid.&lt;br /&gt;
&lt;br /&gt;
Continuous high-duty operation may reduce solenoid valve lifespan.&lt;br /&gt;
&lt;br /&gt;
To prevent unnecessary solenoid activity:&lt;br /&gt;
&lt;br /&gt;
* Set appropriate minimum engine speed&lt;br /&gt;
* Set appropriate minimum MAP pressure&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= FUEL: =&lt;br /&gt;
All fuel-related adjustments must be performed responsibly. Incorrect settings may cause severe engine damage.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Cold Start Factor ==&lt;br /&gt;
'''X axis:''' Engine coolant temperature (°C)&lt;br /&gt;
&lt;br /&gt;
'''Map:''' Cold start fuel correction factor&lt;br /&gt;
&lt;br /&gt;
A cold engine requires additional fuel for stable operation.&lt;br /&gt;
&lt;br /&gt;
Adjust this map if:&lt;br /&gt;
&lt;br /&gt;
* Idle is unstable during warm-up&lt;br /&gt;
* AFR/lambda is incorrect during cold start&lt;br /&gt;
* Engine stalls or runs excessively rich during warm-up&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Fuel Mass to Injection Time Conversion ==&lt;br /&gt;
'''Map type:''' Single value&lt;br /&gt;
&lt;br /&gt;
Defines the conversion factor between calculated fuel mass and injector opening time.&lt;br /&gt;
&lt;br /&gt;
Adjustment is required when replacing injectors.&lt;br /&gt;
&lt;br /&gt;
* Larger injectors → lower map value&lt;br /&gt;
* Smaller injectors → higher map value&lt;br /&gt;
&lt;br /&gt;
Always verify changes using logs.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Injector Linearization Correction ==&lt;br /&gt;
'''X axis:''' Engine speed (RPM)&lt;br /&gt;
&lt;br /&gt;
'''Y axis:''' Injection time (ms)&lt;br /&gt;
&lt;br /&gt;
'''Map:''' Fuel correction factor&lt;br /&gt;
&lt;br /&gt;
This map corrects injector non-linearity.&lt;br /&gt;
&lt;br /&gt;
* Higher values → more injected fuel&lt;br /&gt;
* Lower values → less injected fuel&lt;br /&gt;
&lt;br /&gt;
Adjust using lambda correction logs.&lt;br /&gt;
&lt;br /&gt;
Ensure actual lambda matches target lambda under all load conditions.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Fuel Trim Configuration ==&lt;br /&gt;
&lt;br /&gt;
* To disable the long-term fuel trim, set value to '''132'''&lt;br /&gt;
* To re-enable the long-term fuel trim, set value to '''135'''&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Injector Dead Time ==&lt;br /&gt;
'''X axis:''' Battery voltage (V)&lt;br /&gt;
&lt;br /&gt;
'''Map:''' Injector dead time (ms)&lt;br /&gt;
&lt;br /&gt;
Dead time values are injector-specific.&lt;br /&gt;
&lt;br /&gt;
Adjustment is not required unless injectors are replaced.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Lambda Target ==&lt;br /&gt;
'''X axis:''' Engine speed (RPM)&lt;br /&gt;
&lt;br /&gt;
'''Y axis:''' Engine load (%)&lt;br /&gt;
&lt;br /&gt;
'''Map:''' Target lambda value&lt;br /&gt;
&lt;br /&gt;
Defines the target air-fuel ratio.&lt;br /&gt;
&lt;br /&gt;
Adjust this map to:&lt;br /&gt;
&lt;br /&gt;
* Optimize performance&lt;br /&gt;
* Improve fuel economy&lt;br /&gt;
* Ensure safe operation under boost&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Minimum Measurable Lambda ==&lt;br /&gt;
'''Map type:''' Single value&lt;br /&gt;
&lt;br /&gt;
Defines the diagnostic lower limit for the lambda sensor.&lt;br /&gt;
&lt;br /&gt;
If your target lambda is lower than this limit, adjust this value to avoid diagnostic fault codes.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= IDLE =&lt;br /&gt;
&lt;br /&gt;
== Idle Target Speed ==&lt;br /&gt;
'''X axis:''' Engine coolant temperature (°C)&lt;br /&gt;
&lt;br /&gt;
'''Y axis:''' Actual gear&lt;br /&gt;
&lt;br /&gt;
'''Map:''' Target idle speed (RPM)&lt;br /&gt;
&lt;br /&gt;
Defines engine idle speed under different temperature and gear conditions.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== RPM Curve After Start ==&lt;br /&gt;
'''X axis:''' Time since engine start (s)&lt;br /&gt;
&lt;br /&gt;
'''Y axis:''' Engine coolant temperature (°C)&lt;br /&gt;
&lt;br /&gt;
'''Map:''' Target idle speed (RPM)&lt;br /&gt;
&lt;br /&gt;
Defines elevated idle speed strategy immediately after engine startup.&lt;br /&gt;
&lt;br /&gt;
Used for:&lt;br /&gt;
&lt;br /&gt;
* Improved cold-start stability&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= IGNITION =&lt;br /&gt;
Incorrect ignition settings may cause engine knock and severe engine damage.&lt;br /&gt;
&lt;br /&gt;
Always validate changes using knock logs and dyno testing.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Ignition Advance ==&lt;br /&gt;
'''X axis:''' Engine speed (RPM)&lt;br /&gt;
&lt;br /&gt;
'''Y axis:''' Engine load (%)&lt;br /&gt;
&lt;br /&gt;
'''Map:''' Ignition timing advance (°)&lt;br /&gt;
&lt;br /&gt;
Defines base ignition timing.&lt;br /&gt;
&lt;br /&gt;
Adjust to optimize:&lt;br /&gt;
&lt;br /&gt;
* Power output&lt;br /&gt;
* Efficiency&lt;br /&gt;
* Knock resistance&lt;br /&gt;
&lt;br /&gt;
Avoid large changes unless you fully understand ignition tuning principles.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Minimum Ignition Angle ==&lt;br /&gt;
''(Recommended rename from &amp;quot;Latest possible ignition angle&amp;quot;)''&lt;br /&gt;
&lt;br /&gt;
'''X axis:''' Engine speed (RPM)&lt;br /&gt;
&lt;br /&gt;
'''Y axis:''' Engine load (%)&lt;br /&gt;
&lt;br /&gt;
'''Map:''' Minimum allowed ignition angle (°)&lt;br /&gt;
&lt;br /&gt;
Defines the lower safety limit for ignition timing.&lt;br /&gt;
&lt;br /&gt;
Adjust only if calculated ignition values fall below this threshold.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Minimum Ignition Angle During Catalyst Heating ==&lt;br /&gt;
'''X axis:''' Engine speed (RPM)&lt;br /&gt;
&lt;br /&gt;
'''Y axis:''' Engine load (%)&lt;br /&gt;
&lt;br /&gt;
'''Map:''' Minimum ignition angle during catalyst heating (°)&lt;br /&gt;
&lt;br /&gt;
Defines ignition timing lower limit during catalyst warm-up phase.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Dwell Maps ==&lt;br /&gt;
Modification is generally not recommended unless:&lt;br /&gt;
&lt;br /&gt;
* Ignition coils are replaced&lt;br /&gt;
* System voltage behavior changes&lt;br /&gt;
&lt;br /&gt;
Improper dwell settings may damage ignition coils.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Overrun Fuel Cut-Off (Deceleration) =&lt;br /&gt;
&lt;br /&gt;
== Fuel Cut-Off Delay During Gear Change ==&lt;br /&gt;
'''X axis:''' Engine speed (RPM)&lt;br /&gt;
&lt;br /&gt;
'''Y axis:''' Engine load (%)&lt;br /&gt;
&lt;br /&gt;
'''Map:''' Delay time (s)&lt;br /&gt;
&lt;br /&gt;
Defines how long fuel is delivered after accelerator release during gear change (clutch engaged).&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Overrun Fuel Cut-Off Delay ==&lt;br /&gt;
'''X axis:''' Engine speed (RPM)&lt;br /&gt;
&lt;br /&gt;
'''Y axis:''' Engine load (%)&lt;br /&gt;
&lt;br /&gt;
'''Map:''' Delay time (s)&lt;br /&gt;
&lt;br /&gt;
Defines how long fuel is delivered after accelerator release during engine braking.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Fuel Cut-Off Delay at High RPM and High Catalyst Temperature ==&lt;br /&gt;
'''X axis:''' Engine speed (RPM)&lt;br /&gt;
&lt;br /&gt;
'''Y axis:''' Catalyst temperature (°C)&lt;br /&gt;
&lt;br /&gt;
'''Map:''' Delay time (s)&lt;br /&gt;
&lt;br /&gt;
Defines delay before fuel cut-off under high thermal load conditions.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Project Configuration =&lt;br /&gt;
&lt;br /&gt;
== Catalyst Diagnosis ==&lt;br /&gt;
'''Map type:''' Single value&lt;br /&gt;
&lt;br /&gt;
Set to:&lt;br /&gt;
&lt;br /&gt;
* 1 → Catalyst diagnosis enabled&lt;br /&gt;
* 0 → Catalyst diagnosis disabled (cat-less setup)&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Catalyst Diagnosis (OBD2 Mode) ==&lt;br /&gt;
'''Map type:''' Single value&lt;br /&gt;
&lt;br /&gt;
Set to:&lt;br /&gt;
&lt;br /&gt;
* 1 → Enabled&lt;br /&gt;
* 0 → Disabled (cat-less setup)&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Lambda Sensor Configuration ==&lt;br /&gt;
'''Map type:''' Single value&lt;br /&gt;
&lt;br /&gt;
Set to:&lt;br /&gt;
&lt;br /&gt;
* 1 → Post-catalyst lambda sensor disabled&lt;br /&gt;
* 0 → Sensor enabled&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== EVAP / Tank Ventilation System ==&lt;br /&gt;
'''Map type:''' Single value&lt;br /&gt;
&lt;br /&gt;
Set to:&lt;br /&gt;
&lt;br /&gt;
* 1 → System enabled&lt;br /&gt;
* 0 → EVAP system removed&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= VVT Control =&lt;br /&gt;
&lt;br /&gt;
== Intake Camshaft Advance ==&lt;br /&gt;
'''X axis:''' Engine speed (RPM)&lt;br /&gt;
&lt;br /&gt;
'''Y axis:''' Engine load (%)&lt;br /&gt;
&lt;br /&gt;
'''Map:''' Intake camshaft advance angle (°)&lt;br /&gt;
&lt;br /&gt;
Adjust this map to optimize torque and power delivery.&lt;br /&gt;
&lt;br /&gt;
Dyno validation is strongly recommended for optimal results.&lt;/div&gt;</summary>
		<author><name>Arte</name></author>
	</entry>
	<entry>
		<id>https://the07k.wiki/index.php?title=Maps_helper_(Editor)&amp;diff=7688</id>
		<title>Maps helper (Editor)</title>
		<link rel="alternate" type="text/html" href="https://the07k.wiki/index.php?title=Maps_helper_(Editor)&amp;diff=7688"/>
		<updated>2026-03-05T09:34:24Z</updated>

		<summary type="html">&lt;p&gt;Arte: Created page with &amp;quot;= ACCELERATOR PEDAL: =  == Desired Torque Profile (0/1/2/3/4/Reverse) == '''X axis:''' Engine speed (RPM)  '''Y axis:''' Accelerator pedal position (%)  '''Map:''' Target engine torque  This map defines the relationship between accelerator pedal position and requested engine torque (throttle response).  * Lower values → smoother and more progressive response * Higher values → more aggressive and dynamic response  Adjust carefully to maintain drivability and traction....&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= ACCELERATOR PEDAL: =&lt;br /&gt;
&lt;br /&gt;
== Desired Torque Profile (0/1/2/3/4/Reverse) ==&lt;br /&gt;
'''X axis:''' Engine speed (RPM)&lt;br /&gt;
&lt;br /&gt;
'''Y axis:''' Accelerator pedal position (%)&lt;br /&gt;
&lt;br /&gt;
'''Map:''' Target engine torque&lt;br /&gt;
&lt;br /&gt;
This map defines the relationship between accelerator pedal position and requested engine torque (throttle response).&lt;br /&gt;
&lt;br /&gt;
* Lower values → smoother and more progressive response&lt;br /&gt;
* Higher values → more aggressive and dynamic response&lt;br /&gt;
&lt;br /&gt;
Adjust carefully to maintain drivability and traction.&lt;br /&gt;
&lt;br /&gt;
= BOOST CONTROL =&lt;br /&gt;
&lt;br /&gt;
== Boost Solenoid Duty Cycle ==&lt;br /&gt;
'''X axis:''' Engine speed (RPM)&lt;br /&gt;
&lt;br /&gt;
'''Y axis:''' Actual gear&lt;br /&gt;
&lt;br /&gt;
'''Map:''' Boost control solenoid duty cycle (%)&lt;br /&gt;
&lt;br /&gt;
This map controls the duty cycle of the boost control solenoid.&lt;br /&gt;
&lt;br /&gt;
Continuous high-duty operation may reduce solenoid valve lifespan.&lt;br /&gt;
&lt;br /&gt;
To prevent unnecessary solenoid activity:&lt;br /&gt;
&lt;br /&gt;
* Set appropriate minimum engine speed&lt;br /&gt;
* Set appropriate minimum MAP pressure&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= FUEL: =&lt;br /&gt;
All fuel-related adjustments must be performed responsibly. Incorrect settings may cause severe engine damage.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Cold Start Factor ==&lt;br /&gt;
'''X axis:''' Engine coolant temperature (°C)&lt;br /&gt;
&lt;br /&gt;
'''Map:''' Cold start fuel correction factor&lt;br /&gt;
&lt;br /&gt;
A cold engine requires additional fuel for stable operation.&lt;br /&gt;
&lt;br /&gt;
Adjust this map if:&lt;br /&gt;
&lt;br /&gt;
* Idle is unstable during warm-up&lt;br /&gt;
* AFR/lambda is incorrect during cold start&lt;br /&gt;
* Engine stalls or runs excessively rich during warm-up&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Fuel Mass to Injection Time Conversion ==&lt;br /&gt;
'''Map type:''' Single value&lt;br /&gt;
&lt;br /&gt;
Defines the conversion factor between calculated fuel mass and injector opening time.&lt;br /&gt;
&lt;br /&gt;
Adjustment is required when replacing injectors.&lt;br /&gt;
&lt;br /&gt;
* Larger injectors → lower map value&lt;br /&gt;
* Smaller injectors → higher map value&lt;br /&gt;
&lt;br /&gt;
Always verify changes using logs.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Injector Linearization Correction ==&lt;br /&gt;
'''X axis:''' Engine speed (RPM)&lt;br /&gt;
&lt;br /&gt;
'''Y axis:''' Injection time (ms)&lt;br /&gt;
&lt;br /&gt;
'''Map:''' Fuel correction factor&lt;br /&gt;
&lt;br /&gt;
This map corrects injector non-linearity.&lt;br /&gt;
&lt;br /&gt;
* Higher values → more injected fuel&lt;br /&gt;
* Lower values → less injected fuel&lt;br /&gt;
&lt;br /&gt;
Adjust using lambda correction logs.&lt;br /&gt;
&lt;br /&gt;
Ensure actual lambda matches target lambda under all load conditions.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Fuel Trim Configuration ==&lt;br /&gt;
I don't know what this map doing :D&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Injector Dead Time ==&lt;br /&gt;
'''X axis:''' Battery voltage (V)&lt;br /&gt;
&lt;br /&gt;
'''Map:''' Injector dead time (ms)&lt;br /&gt;
&lt;br /&gt;
Dead time values are injector-specific.&lt;br /&gt;
&lt;br /&gt;
Adjustment is not required unless injectors are replaced.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Lambda Target ==&lt;br /&gt;
'''X axis:''' Engine speed (RPM)&lt;br /&gt;
&lt;br /&gt;
'''Y axis:''' Engine load (%)&lt;br /&gt;
&lt;br /&gt;
'''Map:''' Target lambda value&lt;br /&gt;
&lt;br /&gt;
Defines the target air-fuel ratio.&lt;br /&gt;
&lt;br /&gt;
Adjust this map to:&lt;br /&gt;
&lt;br /&gt;
* Optimize performance&lt;br /&gt;
* Improve fuel economy&lt;br /&gt;
* Ensure safe operation under boost&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Minimum Measurable Lambda ==&lt;br /&gt;
'''Map type:''' Single value&lt;br /&gt;
&lt;br /&gt;
Defines the diagnostic lower limit for the lambda sensor.&lt;br /&gt;
&lt;br /&gt;
If your target lambda is lower than this limit, adjust this value to avoid diagnostic fault codes.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= IDLE =&lt;br /&gt;
&lt;br /&gt;
== Idle Target Speed ==&lt;br /&gt;
'''X axis:''' Engine coolant temperature (°C)&lt;br /&gt;
&lt;br /&gt;
'''Y axis:''' Actual gear&lt;br /&gt;
&lt;br /&gt;
'''Map:''' Target idle speed (RPM)&lt;br /&gt;
&lt;br /&gt;
Defines engine idle speed under different temperature and gear conditions.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== RPM Curve After Start ==&lt;br /&gt;
'''X axis:''' Time since engine start (s)&lt;br /&gt;
&lt;br /&gt;
'''Y axis:''' Engine coolant temperature (°C)&lt;br /&gt;
&lt;br /&gt;
'''Map:''' Target idle speed (RPM)&lt;br /&gt;
&lt;br /&gt;
Defines elevated idle speed strategy immediately after engine startup.&lt;br /&gt;
&lt;br /&gt;
Used for:&lt;br /&gt;
&lt;br /&gt;
* Improved cold-start stability&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= IGNITION =&lt;br /&gt;
Incorrect ignition settings may cause engine knock and severe engine damage.&lt;br /&gt;
&lt;br /&gt;
Always validate changes using knock logs and dyno testing.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Ignition Advance ==&lt;br /&gt;
'''X axis:''' Engine speed (RPM)&lt;br /&gt;
&lt;br /&gt;
'''Y axis:''' Engine load (%)&lt;br /&gt;
&lt;br /&gt;
'''Map:''' Ignition timing advance (°)&lt;br /&gt;
&lt;br /&gt;
Defines base ignition timing.&lt;br /&gt;
&lt;br /&gt;
Adjust to optimize:&lt;br /&gt;
&lt;br /&gt;
* Power output&lt;br /&gt;
* Efficiency&lt;br /&gt;
* Knock resistance&lt;br /&gt;
&lt;br /&gt;
Avoid large changes unless you fully understand ignition tuning principles.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Minimum Ignition Angle ==&lt;br /&gt;
''(Recommended rename from &amp;quot;Latest possible ignition angle&amp;quot;)''&lt;br /&gt;
&lt;br /&gt;
'''X axis:''' Engine speed (RPM)&lt;br /&gt;
&lt;br /&gt;
'''Y axis:''' Engine load (%)&lt;br /&gt;
&lt;br /&gt;
'''Map:''' Minimum allowed ignition angle (°)&lt;br /&gt;
&lt;br /&gt;
Defines the lower safety limit for ignition timing.&lt;br /&gt;
&lt;br /&gt;
Adjust only if calculated ignition values fall below this threshold.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Minimum Ignition Angle During Catalyst Heating ==&lt;br /&gt;
'''X axis:''' Engine speed (RPM)&lt;br /&gt;
&lt;br /&gt;
'''Y axis:''' Engine load (%)&lt;br /&gt;
&lt;br /&gt;
'''Map:''' Minimum ignition angle during catalyst heating (°)&lt;br /&gt;
&lt;br /&gt;
Defines ignition timing lower limit during catalyst warm-up phase.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Dwell Maps ==&lt;br /&gt;
Modification is generally not recommended unless:&lt;br /&gt;
&lt;br /&gt;
* Ignition coils are replaced&lt;br /&gt;
* System voltage behavior changes&lt;br /&gt;
&lt;br /&gt;
Improper dwell settings may damage ignition coils.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Overrun Fuel Cut-Off (Deceleration) =&lt;br /&gt;
&lt;br /&gt;
== Fuel Cut-Off Delay During Gear Change ==&lt;br /&gt;
'''X axis:''' Engine speed (RPM)&lt;br /&gt;
&lt;br /&gt;
'''Y axis:''' Engine load (%)&lt;br /&gt;
&lt;br /&gt;
'''Map:''' Delay time (s)&lt;br /&gt;
&lt;br /&gt;
Defines how long fuel is delivered after accelerator release during gear change (clutch engaged).&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Overrun Fuel Cut-Off Delay ==&lt;br /&gt;
'''X axis:''' Engine speed (RPM)&lt;br /&gt;
&lt;br /&gt;
'''Y axis:''' Engine load (%)&lt;br /&gt;
&lt;br /&gt;
'''Map:''' Delay time (s)&lt;br /&gt;
&lt;br /&gt;
Defines how long fuel is delivered after accelerator release during engine braking.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Fuel Cut-Off Delay at High RPM and High Catalyst Temperature ==&lt;br /&gt;
'''X axis:''' Engine speed (RPM)&lt;br /&gt;
&lt;br /&gt;
'''Y axis:''' Catalyst temperature (°C)&lt;br /&gt;
&lt;br /&gt;
'''Map:''' Delay time (s)&lt;br /&gt;
&lt;br /&gt;
Defines delay before fuel cut-off under high thermal load conditions.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Project Configuration =&lt;br /&gt;
&lt;br /&gt;
== Catalyst Diagnosis ==&lt;br /&gt;
'''Map type:''' Single value&lt;br /&gt;
&lt;br /&gt;
Set to:&lt;br /&gt;
&lt;br /&gt;
* 1 → Catalyst diagnosis enabled&lt;br /&gt;
* 0 → Catalyst diagnosis disabled (cat-less setup)&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Catalyst Diagnosis (OBD2 Mode) ==&lt;br /&gt;
'''Map type:''' Single value&lt;br /&gt;
&lt;br /&gt;
Set to:&lt;br /&gt;
&lt;br /&gt;
* 1 → Enabled&lt;br /&gt;
* 0 → Disabled (cat-less setup)&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Lambda Sensor Configuration ==&lt;br /&gt;
'''Map type:''' Single value&lt;br /&gt;
&lt;br /&gt;
Set to:&lt;br /&gt;
&lt;br /&gt;
* 1 → Post-catalyst lambda sensor disabled&lt;br /&gt;
* 0 → Sensor enabled&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== EVAP / Tank Ventilation System ==&lt;br /&gt;
'''Map type:''' Single value&lt;br /&gt;
&lt;br /&gt;
Set to:&lt;br /&gt;
&lt;br /&gt;
* 1 → System enabled&lt;br /&gt;
* 0 → EVAP system removed&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= VVT Control =&lt;br /&gt;
&lt;br /&gt;
== Intake Camshaft Advance ==&lt;br /&gt;
'''X axis:''' Engine speed (RPM)&lt;br /&gt;
&lt;br /&gt;
'''Y axis:''' Engine load (%)&lt;br /&gt;
&lt;br /&gt;
'''Map:''' Intake camshaft advance angle (°)&lt;br /&gt;
&lt;br /&gt;
Adjust this map to optimize torque and power delivery.&lt;br /&gt;
&lt;br /&gt;
Dyno validation is strongly recommended for optimal results.&lt;/div&gt;</summary>
		<author><name>Arte</name></author>
	</entry>
	<entry>
		<id>https://the07k.wiki/index.php?title=Can-bus_emulation_for_cruise_control&amp;diff=7687</id>
		<title>Can-bus emulation for cruise control</title>
		<link rel="alternate" type="text/html" href="https://the07k.wiki/index.php?title=Can-bus_emulation_for_cruise_control&amp;diff=7687"/>
		<updated>2026-02-25T06:04:36Z</updated>

		<summary type="html">&lt;p&gt;Arte: /* Code example */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
This is intended as a reference for those who would like to emulate the can-bus messages for the cruise control.&lt;br /&gt;
&lt;br /&gt;
'''Application''': Any swapped vehicles that do not have can-bus support. It would cover both the Bosch ME7.1.1 and a ME17.5/ME17.5.6&lt;br /&gt;
&lt;br /&gt;
==Hardware required==&lt;br /&gt;
You can use any microcontroller that have CAN-bus capability, such as an Arduino or ESP32. You could also use the SpeedPulser Pro that already has a GPS and CAN-bus capability, you would only need to alter the source code and implement the new CAN-bus message:&lt;br /&gt;
&lt;br /&gt;
*https://forbes-automotive.com/products/speedpulser-pro&lt;br /&gt;
*https://github.com/adamforbes92/speedPulserPro&lt;br /&gt;
&lt;br /&gt;
==CAN-bus: What is this sorcery?==&lt;br /&gt;
CAN-bus is a network used by modules to transmit data/information with each other. With only two wires, you can transmit a multitude of messages between modules ([[wikipedia:Multiplexing|multiplexing]]).&lt;br /&gt;
&lt;br /&gt;
In the past, you would have a single wire for every input. In those instances, every button of your cruise control switch has its own signal wire.&lt;br /&gt;
&lt;br /&gt;
The '''objective''' of the CAN-bus emulation is to take all those signals, feed them into your microcontroller and output CAN-bus messages that the ECU will understand, as if it was on a factory MK5/MK6 2.5 chassis.&lt;br /&gt;
&lt;br /&gt;
CAN-bus messages required:&lt;br /&gt;
&lt;br /&gt;
#State of the cruise control switch (Ex.: Main switch, SET, RES, etc.), normally provided by the '''steering column module'''&lt;br /&gt;
#Vehicle speed, normally provided by the '''ABS module'''&lt;br /&gt;
&lt;br /&gt;
==Vehicle speed acquisition==&lt;br /&gt;
The vehicle speed can be retrieved through the following means:&lt;br /&gt;
&lt;br /&gt;
*GPS module&lt;br /&gt;
*VSS sensor&lt;br /&gt;
*Hall-effect sensor mounted into the instrument cluster to read the speed of the speedometer cable&lt;br /&gt;
*There are more ways to gather this information depending on your creativity&lt;br /&gt;
&lt;br /&gt;
==Emulating the cruise control switch==&lt;br /&gt;
The ECU receive the cruise control switch information through the CAN message '''0x38A'''. Here is a detailed description of this CAN message&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; style=&amp;quot;width:100%;&amp;quot;&lt;br /&gt;
|+ID '''0x38A''', '''4 bytes''', Sent every '''20 ms'''&lt;br /&gt;
!Signal!!Byte!!Start bit!!Bits!!Range / Values!!Notes&lt;br /&gt;
|-&lt;br /&gt;
|Checksum (See below)||1||0||8||0..255 (Phys = Hex)||—&lt;br /&gt;
|-&lt;br /&gt;
|Main switch||2||0||1||0 = OFF&amp;lt;br&amp;gt;1 = ON||Latching ON/OFF&lt;br /&gt;
|-&lt;br /&gt;
|Tip switch OFF||2||1||1||0 = not pressed&amp;lt;br&amp;gt;1 = pressed||—&lt;br /&gt;
|-&lt;br /&gt;
|Tip switch DECEL||2||2||1||0 = not pressed&amp;lt;br&amp;gt;1 = pressed||—&lt;br /&gt;
|-&lt;br /&gt;
|Tip switch ACCEL||2||3||1||0 = not pressed&amp;lt;br&amp;gt;1 = pressed||—&lt;br /&gt;
|-&lt;br /&gt;
|Cruise decelerate (hold)||2||4||1||0 = not decelerating&amp;lt;br&amp;gt;1 = decelerating||—&lt;br /&gt;
|-&lt;br /&gt;
|Cruise accelerate (hold)||2||5||1||0 = not accelerating&amp;lt;br&amp;gt;1 = accelerating||—&lt;br /&gt;
|-&lt;br /&gt;
|Cruise control stalk error||2||6||1||0 = OK&amp;lt;br&amp;gt;1 = stalk error||—&lt;br /&gt;
|-&lt;br /&gt;
|Not used||2||7||1||—||—&lt;br /&gt;
|-&lt;br /&gt;
|Tip switch SET||3||0||1||0 = not pressed&amp;lt;br&amp;gt;1 = pressed||—&lt;br /&gt;
|-&lt;br /&gt;
|Tip switch RESUME||3||1||1||0 = not pressed&amp;lt;br&amp;gt;1 = pressed||—&lt;br /&gt;
|-&lt;br /&gt;
|Sender coding||3||2||2||00 = Body network&amp;lt;br&amp;gt;01 = Steering column module&amp;lt;br&amp;gt;10 = Engine||Values per spec&lt;br /&gt;
|-&lt;br /&gt;
|Message counter||3||4||4||0..15 (Phys = Hex)||Rolling counter&lt;br /&gt;
|-&lt;br /&gt;
|Not used||4||0||8||—||Byte 4 unused&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Checksum===&lt;br /&gt;
The checksum is a formula used to validate the integrity of the message, and detect possible data corruption during the transmission of the message. If the checksum does not match the data, the ECU might reject the message. (Implausible message)&lt;br /&gt;
&lt;br /&gt;
[[File:Checksum GRAneu.png|747x747px]]&lt;br /&gt;
&lt;br /&gt;
This checksum is calculated only with Exclusive OR ([[wikipedia:Exclusive_or|XOR]]) operations&lt;br /&gt;
&lt;br /&gt;
===Code example===&lt;br /&gt;
This is a very rough sketch to show a possible implementation. This example would be for an Arduino controller using a MCP2515 shield (hat).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
// demo: Cruise control switch, analog to can-bus message for VW PQ35&lt;br /&gt;
// Very rough sketch, but should work. Feel free to improve&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;SPI.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#define CAN_2515&lt;br /&gt;
&lt;br /&gt;
// Set SPI CS Pin according to your hardware&lt;br /&gt;
&lt;br /&gt;
#if defined(SEEED_WIO_TERMINAL) &amp;amp;&amp;amp; defined(CAN_2518FD)&lt;br /&gt;
const int SPI_CS_PIN  = BCM8;&lt;br /&gt;
const int CAN_INT_PIN = BCM25;&lt;br /&gt;
#else&lt;br /&gt;
&lt;br /&gt;
// For Arduino MCP2515 Hat:&lt;br /&gt;
// the cs pin of the version after v1.1 is default to D9&lt;br /&gt;
// v0.9b and v1.0 is default D10&lt;br /&gt;
const int SPI_CS_PIN = 9;&lt;br /&gt;
const int CAN_INT_PIN = 2;&lt;br /&gt;
#endif&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#ifdef CAN_2518FD&lt;br /&gt;
#include &amp;quot;mcp2518fd_can.h&amp;quot;&lt;br /&gt;
mcp2518fd CAN(SPI_CS_PIN); // Set CS pin&lt;br /&gt;
#endif&lt;br /&gt;
&lt;br /&gt;
#ifdef CAN_2515&lt;br /&gt;
#include &amp;quot;mcp2515_can.h&amp;quot;&lt;br /&gt;
mcp2515_can CAN(SPI_CS_PIN); // Set CS pin&lt;br /&gt;
#endif&lt;br /&gt;
&lt;br /&gt;
const int buttonMain = 4;&lt;br /&gt;
const int buttonRes = 2; &lt;br /&gt;
const int buttonSet = 0;&lt;br /&gt;
&lt;br /&gt;
byte oldSwitchState = 0x0;&lt;br /&gt;
byte sequence = 0x0;&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
    SERIAL_PORT_MONITOR.begin(115200);&lt;br /&gt;
    while(!Serial){};&lt;br /&gt;
&lt;br /&gt;
    while (CAN_OK != CAN.begin(CAN_500KBPS)) { // init powertrain can bus : baudrate = 500k &lt;br /&gt;
        SERIAL_PORT_MONITOR.println(&amp;quot;CAN init fail, retry...&amp;quot;);&lt;br /&gt;
        delay(100);&lt;br /&gt;
    }&lt;br /&gt;
    SERIAL_PORT_MONITOR.println(&amp;quot;CAN init ok!&amp;quot;);&lt;br /&gt;
    pinMode(buttonMain, INPUT_PULLUP);&lt;br /&gt;
    pinMode(buttonRes, INPUT_PULLUP);&lt;br /&gt;
    pinMode(buttonSet, INPUT_PULLUP); // default state 12v&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
&lt;br /&gt;
    byte switchState = 0x0;&lt;br /&gt;
&lt;br /&gt;
    // Read analog inputs&lt;br /&gt;
    int stateMain = digitalRead(buttonMain);&lt;br /&gt;
    int stateRes = digitalRead(buttonRes);&lt;br /&gt;
    int stateSet = digitalRead(buttonSet);&lt;br /&gt;
&lt;br /&gt;
    // You can add more inputs and adjust the logic according the the can-bus chart&lt;br /&gt;
    if (stateMain == LOW) {&lt;br /&gt;
        switchState |= (1 &amp;lt;&amp;lt; 0);  // Set bit 0&lt;br /&gt;
    }&lt;br /&gt;
    if (stateSet == LOW) {&lt;br /&gt;
        switchState |= (1 &amp;lt;&amp;lt; 1);  // Set bit 1&lt;br /&gt;
    }&lt;br /&gt;
    if (stateRes == LOW) {&lt;br /&gt;
        switchState |= (1 &amp;lt;&amp;lt; 2);  // Set bit 2&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    // Check if the switch state has changed&lt;br /&gt;
    if (switchState != oldSwitchState) {&lt;br /&gt;
        Serial.println(switchState);  // Print new state for monitoring purposes&lt;br /&gt;
        oldSwitchState = switchState; // Update oldSwitchState&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // Define bytes for can message (0x38A)&lt;br /&gt;
    byte byteTwo = switchState &amp;amp; 1;&lt;br /&gt;
&lt;br /&gt;
    byte byteThree = switchState &amp;gt;&amp;gt; 1;&lt;br /&gt;
    byteThree = byteThree | 0xC; // Could also be 0x4 (See Sender coding)&lt;br /&gt;
    byteThree = (sequence &amp;lt;&amp;lt; 4) | byteThree;&lt;br /&gt;
&lt;br /&gt;
    byte checksum = byteTwo ^ byteThree;&lt;br /&gt;
&lt;br /&gt;
    unsigned char payload[4] = {checksum, byteTwo, byteThree, 0x00};&lt;br /&gt;
    CAN.sendMsgBuf(0x38A, 0, 4, payload);&lt;br /&gt;
    &lt;br /&gt;
    sequence = (sequence + 1) &amp;amp; 0x0F; // increment for the next frame&lt;br /&gt;
&lt;br /&gt;
    delay(20); // Send every 20ms&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Emulating the ABS module (Vehicle speed) ==&lt;br /&gt;
The ABS module needs to be emulated as the ECU track the vehicle speed for the cruise control.&lt;br /&gt;
&lt;br /&gt;
In practice, it would be possible to do Assembly patches and make the ECU track the engine speed. Although, this extensive work would need to be repeated across multiple firmwares. It makes more sense to emulate the ABS module, especially considered that this requires a skill set out of reach for most readers.&lt;br /&gt;
&lt;br /&gt;
Regarding the ABS, more CAN message will need to be emulated:&lt;br /&gt;
{{Note|note-reminder|This section is under development. Feel free to add content.}}&lt;br /&gt;
&lt;br /&gt;
== Monitoring the values received by the ECU ==&lt;br /&gt;
You can use any suitable scanner, such as VCDS, and monitor the channel '''066''' in the measurement values.&lt;br /&gt;
&lt;br /&gt;
This channel lists:&lt;br /&gt;
&lt;br /&gt;
* Vehicle speed&lt;br /&gt;
* Clutch/Brake switch values&lt;br /&gt;
* Cruise control switch values&lt;br /&gt;
* Cruise control status&lt;/div&gt;</summary>
		<author><name>Arte</name></author>
	</entry>
	<entry>
		<id>https://the07k.wiki/index.php?title=MediaWiki:Sidebar&amp;diff=7685</id>
		<title>MediaWiki:Sidebar</title>
		<link rel="alternate" type="text/html" href="https://the07k.wiki/index.php?title=MediaWiki:Sidebar&amp;diff=7685"/>
		<updated>2026-02-20T17:12:29Z</updated>

		<summary type="html">&lt;p&gt;Arte: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
* Navigation:&lt;br /&gt;
** mainpage|Main Page&lt;br /&gt;
** recentchanges-url|Recent Changes&lt;br /&gt;
* General:&lt;br /&gt;
** Common_Problems | Common Problems&lt;br /&gt;
** Engine_Specs | Engine Specs&lt;br /&gt;
* Engine:&lt;br /&gt;
** Aftermarket_Parts | Aftermarket Parts&lt;br /&gt;
** Engine_Builds | Builds&lt;br /&gt;
** Forced_Induction_(Turbocharger) | Forced Induction&lt;br /&gt;
** Engine_Swaps | Engine Swaps&lt;br /&gt;
** Engine_Repair_Guides | Repair Procedures&lt;br /&gt;
* Tuning:&lt;br /&gt;
** Standalone_Management | Standalone Management&lt;br /&gt;
* Hardware (ECU):&lt;br /&gt;
** ME7.1.1_Pinout | ME7.1.1 Pinout&lt;br /&gt;
** ME17.5_Pinout | ME17.5 Pinout&lt;br /&gt;
* Miscellaneous:&lt;br /&gt;
** Can-bus_emulation_for_cruise_control | Can-bus emulation for cruise control&lt;br /&gt;
* Additional Information:&lt;br /&gt;
** Wiring_Diagrams | Wiring Diagrams&lt;br /&gt;
* SEARCH&lt;br /&gt;
* TOOLBOX&lt;br /&gt;
* LANGUAGES&lt;/div&gt;</summary>
		<author><name>Arte</name></author>
	</entry>
	<entry>
		<id>https://the07k.wiki/index.php?title=Can-bus_emulation_for_cruise_control&amp;diff=7684</id>
		<title>Can-bus emulation for cruise control</title>
		<link rel="alternate" type="text/html" href="https://the07k.wiki/index.php?title=Can-bus_emulation_for_cruise_control&amp;diff=7684"/>
		<updated>2026-02-20T17:10:00Z</updated>

		<summary type="html">&lt;p&gt;Arte: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
This is intended as a reference for those who would like to emulate the can-bus messages for the cruise control.&lt;br /&gt;
&lt;br /&gt;
'''Application''': Any swapped vehicles that do not have can-bus support. It would cover both the Bosch ME7.1.1 and a ME17.5/ME17.5.6&lt;br /&gt;
&lt;br /&gt;
==Hardware required==&lt;br /&gt;
You can use any microcontroller that have CAN-bus capability, such as an Arduino or ESP32. You could also use the SpeedPulser Pro that already has a GPS and CAN-bus capability, you would only need to alter the source code and implement the new CAN-bus message:&lt;br /&gt;
&lt;br /&gt;
*https://forbes-automotive.com/products/speedpulser-pro&lt;br /&gt;
*https://github.com/adamforbes92/speedPulserPro&lt;br /&gt;
&lt;br /&gt;
==CAN-bus: What is this sorcery?==&lt;br /&gt;
CAN-bus is a network used by modules to transmit data/information with each other. With only two wires, you can transmit a multitude of messages between modules ([[wikipedia:Multiplexing|multiplexing]]).&lt;br /&gt;
&lt;br /&gt;
In the past, you would have a single wire for every input. In those instances, every button of your cruise control switch has its own signal wire.&lt;br /&gt;
&lt;br /&gt;
The '''objective''' of the CAN-bus emulation is to take all those signals, feed them into your microcontroller and output CAN-bus messages that the ECU will understand, as if it was on a factory MK5/MK6 2.5 chassis.&lt;br /&gt;
&lt;br /&gt;
CAN-bus messages required:&lt;br /&gt;
&lt;br /&gt;
#State of the cruise control switch (Ex.: Main switch, SET, RES, etc.), normally provided by the '''steering column module'''&lt;br /&gt;
#Vehicle speed, normally provided by the '''ABS module'''&lt;br /&gt;
&lt;br /&gt;
==Vehicle speed acquisition==&lt;br /&gt;
The vehicle speed can be retrieved through the following means:&lt;br /&gt;
&lt;br /&gt;
*GPS module&lt;br /&gt;
*VSS sensor&lt;br /&gt;
*Hall-effect sensor mounted into the instrument cluster to read the speed of the speedometer cable&lt;br /&gt;
*There are more ways to gather this information depending on your creativity&lt;br /&gt;
&lt;br /&gt;
==Emulating the cruise control switch==&lt;br /&gt;
The ECU receive the cruise control switch information through the CAN message '''0x38A'''. Here is a detailed description of this CAN message&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; style=&amp;quot;width:100%;&amp;quot;&lt;br /&gt;
|+ID '''0x38A''', '''4 bytes''', Sent every '''20 ms'''&lt;br /&gt;
!Signal!!Byte!!Start bit!!Bits!!Range / Values!!Notes&lt;br /&gt;
|-&lt;br /&gt;
|Checksum (See below)||1||0||8||0..255 (Phys = Hex)||—&lt;br /&gt;
|-&lt;br /&gt;
|Main switch||2||0||1||0 = OFF&amp;lt;br&amp;gt;1 = ON||Latching ON/OFF&lt;br /&gt;
|-&lt;br /&gt;
|Tip switch OFF||2||1||1||0 = not pressed&amp;lt;br&amp;gt;1 = pressed||—&lt;br /&gt;
|-&lt;br /&gt;
|Tip switch DECEL||2||2||1||0 = not pressed&amp;lt;br&amp;gt;1 = pressed||—&lt;br /&gt;
|-&lt;br /&gt;
|Tip switch ACCEL||2||3||1||0 = not pressed&amp;lt;br&amp;gt;1 = pressed||—&lt;br /&gt;
|-&lt;br /&gt;
|Cruise decelerate (hold)||2||4||1||0 = not decelerating&amp;lt;br&amp;gt;1 = decelerating||—&lt;br /&gt;
|-&lt;br /&gt;
|Cruise accelerate (hold)||2||5||1||0 = not accelerating&amp;lt;br&amp;gt;1 = accelerating||—&lt;br /&gt;
|-&lt;br /&gt;
|Cruise control stalk error||2||6||1||0 = OK&amp;lt;br&amp;gt;1 = stalk error||—&lt;br /&gt;
|-&lt;br /&gt;
|Not used||2||7||1||—||—&lt;br /&gt;
|-&lt;br /&gt;
|Tip switch SET||3||0||1||0 = not pressed&amp;lt;br&amp;gt;1 = pressed||—&lt;br /&gt;
|-&lt;br /&gt;
|Tip switch RESUME||3||1||1||0 = not pressed&amp;lt;br&amp;gt;1 = pressed||—&lt;br /&gt;
|-&lt;br /&gt;
|Sender coding||3||2||2||00 = Body network&amp;lt;br&amp;gt;01 = Steering column module&amp;lt;br&amp;gt;10 = Engine||Values per spec&lt;br /&gt;
|-&lt;br /&gt;
|Message counter||3||4||4||0..15 (Phys = Hex)||Rolling counter&lt;br /&gt;
|-&lt;br /&gt;
|Not used||4||0||8||—||Byte 4 unused&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Checksum===&lt;br /&gt;
The checksum is a formula used to validate the integrity of the message, and detect possible data corruption during the transmission of the message. If the checksum does not match the data, the ECU might reject the message. (Implausible message)&lt;br /&gt;
&lt;br /&gt;
[[File:Checksum GRAneu.png|747x747px]]&lt;br /&gt;
&lt;br /&gt;
This checksum is calculated only with Exclusive OR ([[wikipedia:Exclusive_or|XOR]]) operations&lt;br /&gt;
&lt;br /&gt;
===Code example===&lt;br /&gt;
This is a very rough sketch to show a possible implementation. This example would be for an Arduino controller using a MCP2515 shield (hat).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot; line=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
// demo: Cruise control switch, analog to can-bus message for VW PQ35&lt;br /&gt;
// Very rough sketch, but should work. Feel free to improve&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;SPI.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#define CAN_2515&lt;br /&gt;
&lt;br /&gt;
// Set SPI CS Pin according to your hardware&lt;br /&gt;
&lt;br /&gt;
#if defined(SEEED_WIO_TERMINAL) &amp;amp;&amp;amp; defined(CAN_2518FD)&lt;br /&gt;
const int SPI_CS_PIN  = BCM8;&lt;br /&gt;
const int CAN_INT_PIN = BCM25;&lt;br /&gt;
#else&lt;br /&gt;
&lt;br /&gt;
// For Arduino MCP2515 Hat:&lt;br /&gt;
// the cs pin of the version after v1.1 is default to D9&lt;br /&gt;
// v0.9b and v1.0 is default D10&lt;br /&gt;
const int SPI_CS_PIN = 9;&lt;br /&gt;
const int CAN_INT_PIN = 2;&lt;br /&gt;
#endif&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#ifdef CAN_2518FD&lt;br /&gt;
#include &amp;quot;mcp2518fd_can.h&amp;quot;&lt;br /&gt;
mcp2518fd CAN(SPI_CS_PIN); // Set CS pin&lt;br /&gt;
#endif&lt;br /&gt;
&lt;br /&gt;
#ifdef CAN_2515&lt;br /&gt;
#include &amp;quot;mcp2515_can.h&amp;quot;&lt;br /&gt;
mcp2515_can CAN(SPI_CS_PIN); // Set CS pin&lt;br /&gt;
#endif&lt;br /&gt;
&lt;br /&gt;
const int buttonMain = 4;&lt;br /&gt;
const int buttonRes = 2; &lt;br /&gt;
const int buttonSet = 0;&lt;br /&gt;
&lt;br /&gt;
byte oldSwitchState = 0x0;&lt;br /&gt;
byte sequence = 0x0;&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
    SERIAL_PORT_MONITOR.begin(115200);&lt;br /&gt;
    while(!Serial){};&lt;br /&gt;
&lt;br /&gt;
    while (CAN_OK != CAN.begin(CAN_500KBPS)) { // init powertrain can bus : baudrate = 500k &lt;br /&gt;
        SERIAL_PORT_MONITOR.println(&amp;quot;CAN init fail, retry...&amp;quot;);&lt;br /&gt;
        delay(100);&lt;br /&gt;
    }&lt;br /&gt;
    SERIAL_PORT_MONITOR.println(&amp;quot;CAN init ok!&amp;quot;);&lt;br /&gt;
    pinMode(buttonMain, INPUT_PULLUP);&lt;br /&gt;
    pinMode(buttonRes, INPUT_PULLUP);&lt;br /&gt;
    pinMode(buttonSet, INPUT_PULLUP); // default state 12v&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
&lt;br /&gt;
    byte switchState = 0x0;&lt;br /&gt;
&lt;br /&gt;
    // Read analog inputs&lt;br /&gt;
    int stateMain = digitalRead(buttonMain);&lt;br /&gt;
    int stateRes = digitalRead(buttonRes);&lt;br /&gt;
    int stateSet = digitalRead(buttonSet);&lt;br /&gt;
&lt;br /&gt;
    // You can more inputs and adjust the logic according the the can-bus chart&lt;br /&gt;
    if (stateMain == LOW) {&lt;br /&gt;
        switchState |= (1 &amp;lt;&amp;lt; 0);  // Set bit 0&lt;br /&gt;
    }&lt;br /&gt;
    if (stateSet == LOW) {&lt;br /&gt;
        switchState |= (1 &amp;lt;&amp;lt; 1);  // Set bit 1&lt;br /&gt;
    }&lt;br /&gt;
    if (stateRes == LOW) {&lt;br /&gt;
        switchState |= (1 &amp;lt;&amp;lt; 2);  // Set bit 2&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    // Check if the switch state has changed&lt;br /&gt;
    if (switchState != oldSwitchState) {&lt;br /&gt;
        Serial.println(switchState);  // Print new state for monitoring purposes&lt;br /&gt;
        oldSwitchState = switchState; // Update oldSwitchState&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // Define bytes for can message (0x38A)&lt;br /&gt;
    byte byteTwo = switchState &amp;amp; 1;&lt;br /&gt;
&lt;br /&gt;
    byte byteThree = switchState &amp;gt;&amp;gt; 1;&lt;br /&gt;
    byteThree = byteThree | 0xC; // Could also be 0x4 (See Sender coding)&lt;br /&gt;
    byteThree = (sequence &amp;lt;&amp;lt; 4) | byteThree;&lt;br /&gt;
&lt;br /&gt;
    byte checksum = byteTwo ^ byteThree;&lt;br /&gt;
&lt;br /&gt;
    unsigned char payload[4] = {checksum, byteTwo, byteThree, 0x00};&lt;br /&gt;
    CAN.sendMsgBuf(0x38A, 0, 4, payload);&lt;br /&gt;
    &lt;br /&gt;
    sequence = (sequence + 1) &amp;amp; 0x0F; // increment for the next frame&lt;br /&gt;
&lt;br /&gt;
    delay(20); // Send every 20ms&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Emulating the ABS module (Vehicle speed) ==&lt;br /&gt;
The ABS module needs to be emulated as the ECU track the vehicle speed for the cruise control.&lt;br /&gt;
&lt;br /&gt;
In practice, it would be possible to do Assembly patches and make the ECU track the engine speed. Although, this extensive work would need to be repeated across multiple firmwares. It makes more sense to emulate the ABS module, especially considered that this requires a skill set out of reach for most readers.&lt;br /&gt;
&lt;br /&gt;
Regarding the ABS, more CAN message will need to be emulated:&lt;br /&gt;
{{Note|note-reminder|This section is under development. Feel free to add content.}}&lt;br /&gt;
&lt;br /&gt;
== Monitoring the values received by the ECU ==&lt;br /&gt;
You can use any suitable scanner, such as VCDS, and monitor the channel '''066''' in the measurement values.&lt;br /&gt;
&lt;br /&gt;
This channel lists:&lt;br /&gt;
&lt;br /&gt;
* Vehicle speed&lt;br /&gt;
* Clutch/Brake switch values&lt;br /&gt;
* Cruise control switch values&lt;br /&gt;
* Cruise control status&lt;/div&gt;</summary>
		<author><name>Arte</name></author>
	</entry>
	<entry>
		<id>https://the07k.wiki/index.php?title=Can-bus_emulation_for_cruise_control&amp;diff=7683</id>
		<title>Can-bus emulation for cruise control</title>
		<link rel="alternate" type="text/html" href="https://the07k.wiki/index.php?title=Can-bus_emulation_for_cruise_control&amp;diff=7683"/>
		<updated>2026-02-20T16:44:16Z</updated>

		<summary type="html">&lt;p&gt;Arte: Initial page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
This is intended as a reference for those who would like to emulate the can-bus messages for the cruise control.&lt;br /&gt;
&lt;br /&gt;
'''Application''': Any swapped vehicles that do not have can-bus support. It would cover both the Bosch ME7.1.1 and a ME17.5/ME17.5.6&lt;br /&gt;
&lt;br /&gt;
==Hardware required==&lt;br /&gt;
You can use any microcontroller that have CAN-bus capability, such as an Arduino or ESP32. You could also use the SpeedPulser Pro that already has a GPS and CAN-bus capability, you would only need to alter the source code and implement the new CAN-bus message:&lt;br /&gt;
&lt;br /&gt;
*https://forbes-automotive.com/products/speedpulser-pro&lt;br /&gt;
*https://github.com/adamforbes92/speedPulserPro&lt;br /&gt;
&lt;br /&gt;
==CAN-bus: What is this sorcery?==&lt;br /&gt;
CAN-bus is a network used by modules to transmit data/information with each other. With only two wires, you can transmit a multitude of messages between modules ([[wikipedia:Multiplexing|multiplexing]]).&lt;br /&gt;
&lt;br /&gt;
In the past, you would have a single wire for every input. In those instances, every button of your cruise control switch has its own signal wire.&lt;br /&gt;
&lt;br /&gt;
The '''objective''' of the CAN-bus emulation is to take all those signals, feed them into your microcontroller and output CAN-bus messages that the ECU will understand, as if it was on a factory MK5/MK6 2.5 chassis.&lt;br /&gt;
&lt;br /&gt;
CAN-bus messages required:&lt;br /&gt;
&lt;br /&gt;
#State of the cruise control switch (Ex.: Main switch, SET, RES, etc.), normally provided by the '''steering column module'''&lt;br /&gt;
#Vehicle speed, normally provided by the '''ABS module'''&lt;br /&gt;
&lt;br /&gt;
==Vehicle speed acquisition==&lt;br /&gt;
The vehicle speed can be retrieved through the following means:&lt;br /&gt;
&lt;br /&gt;
*GPS module&lt;br /&gt;
*VSS sensor&lt;br /&gt;
*Hall-effect sensor mounted into the instrument cluster to read the speed of the speedometer cable&lt;br /&gt;
*There are more ways to gather this information depending on your creativity&lt;br /&gt;
&lt;br /&gt;
==Emulating the cruise control switch==&lt;br /&gt;
The ECU receive the cruise control switch information through the CAN message '''0x38A'''. Here is a detailed description of this CAN message&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; style=&amp;quot;width:100%;&amp;quot;&lt;br /&gt;
|+ID '''0x38A''', '''4 bytes''', Sent every '''20 ms'''&lt;br /&gt;
!Signal!!Byte!!Start bit!!Bits!!Range / Values!!Notes&lt;br /&gt;
|-&lt;br /&gt;
|Checksum (See below)||1||0||8||0..255 (Phys = Hex)||—&lt;br /&gt;
|-&lt;br /&gt;
|Main switch||2||0||1||0 = OFF&amp;lt;br&amp;gt;1 = ON||Latching ON/OFF&lt;br /&gt;
|-&lt;br /&gt;
|Tip switch OFF||2||1||1||0 = not pressed&amp;lt;br&amp;gt;1 = pressed||—&lt;br /&gt;
|-&lt;br /&gt;
|Tip switch DECEL||2||2||1||0 = not pressed&amp;lt;br&amp;gt;1 = pressed||—&lt;br /&gt;
|-&lt;br /&gt;
|Tip switch ACCEL||2||3||1||0 = not pressed&amp;lt;br&amp;gt;1 = pressed||—&lt;br /&gt;
|-&lt;br /&gt;
|Cruise decelerate (hold)||2||4||1||0 = not decelerating&amp;lt;br&amp;gt;1 = decelerating||—&lt;br /&gt;
|-&lt;br /&gt;
|Cruise accelerate (hold)||2||5||1||0 = not accelerating&amp;lt;br&amp;gt;1 = accelerating||—&lt;br /&gt;
|-&lt;br /&gt;
|Cruise control stalk error||2||6||1||0 = OK&amp;lt;br&amp;gt;1 = stalk error||—&lt;br /&gt;
|-&lt;br /&gt;
|Not used||2||7||1||—||—&lt;br /&gt;
|-&lt;br /&gt;
|Tip switch SET||3||0||1||0 = not pressed&amp;lt;br&amp;gt;1 = pressed||—&lt;br /&gt;
|-&lt;br /&gt;
|Tip switch RESUME||3||1||1||0 = not pressed&amp;lt;br&amp;gt;1 = pressed||—&lt;br /&gt;
|-&lt;br /&gt;
|Sender coding||3||2||2||00 = Body network&amp;lt;br&amp;gt;01 = Steering column module&amp;lt;br&amp;gt;10 = Engine||Values per spec&lt;br /&gt;
|-&lt;br /&gt;
|Message counter||3||4||4||0..15 (Phys = Hex)||Rolling counter&lt;br /&gt;
|-&lt;br /&gt;
|Not used||4||0||8||—||Byte 4 unused&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Checksum===&lt;br /&gt;
The checksum is a formula used to validate the integrity of the message, and detect possible data corruption during the transmission of the message. If the checksum does not match the data, the ECU might reject the message. (Implausible message)&lt;br /&gt;
&lt;br /&gt;
[[File:Checksum GRAneu.png|747x747px]]&lt;br /&gt;
&lt;br /&gt;
This checksum is calculated only with Exclusive OR ([[wikipedia:Exclusive_or|XOR]]) operations&lt;br /&gt;
&lt;br /&gt;
===Code example===&lt;br /&gt;
This is a very rough sketch to show a possible implementation. This example would be for an Arduino controller using a MCP2515 shield (hat).&lt;br /&gt;
 // demo: Cruise control switch, analog to can-bus message for VW PQ35&lt;br /&gt;
 // Very rough sketch, but should work. Feel free to improve&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;lt;SPI.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 #define CAN_2515&lt;br /&gt;
 &lt;br /&gt;
 // Set SPI CS Pin according to your hardware&lt;br /&gt;
 &lt;br /&gt;
 #if defined(SEEED_WIO_TERMINAL) &amp;amp;&amp;amp; defined(CAN_2518FD)&lt;br /&gt;
 const int SPI_CS_PIN  = BCM8;&lt;br /&gt;
 const int CAN_INT_PIN = BCM25;&lt;br /&gt;
 #else&lt;br /&gt;
 &lt;br /&gt;
 // For Arduino MCP2515 Hat:&lt;br /&gt;
 // the cs pin of the version after v1.1 is default to D9&lt;br /&gt;
 // v0.9b and v1.0 is default D10&lt;br /&gt;
 const int SPI_CS_PIN = 9;&lt;br /&gt;
 const int CAN_INT_PIN = 2;&lt;br /&gt;
 #endif&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 #ifdef CAN_2518FD&lt;br /&gt;
 #include &amp;quot;mcp2518fd_can.h&amp;quot;&lt;br /&gt;
 mcp2518fd CAN(SPI_CS_PIN); // Set CS pin&lt;br /&gt;
 #endif&lt;br /&gt;
 &lt;br /&gt;
 #ifdef CAN_2515&lt;br /&gt;
 #include &amp;quot;mcp2515_can.h&amp;quot;&lt;br /&gt;
 mcp2515_can CAN(SPI_CS_PIN); // Set CS pin&lt;br /&gt;
 #endif&lt;br /&gt;
 &lt;br /&gt;
 const int buttonMain = 4;&lt;br /&gt;
 const int buttonRes = 2; &lt;br /&gt;
 const int buttonSet = 0;&lt;br /&gt;
 &lt;br /&gt;
 byte oldSwitchState = 0x0;&lt;br /&gt;
 byte sequence = 0x0;&lt;br /&gt;
 &lt;br /&gt;
 void setup() {&lt;br /&gt;
     SERIAL_PORT_MONITOR.begin(115200);&lt;br /&gt;
     while(!Serial){};&lt;br /&gt;
 &lt;br /&gt;
     while (CAN_OK != CAN.begin(CAN_500KBPS)) { // init powertrain can bus : baudrate = 500k &lt;br /&gt;
         SERIAL_PORT_MONITOR.println(&amp;quot;CAN init fail, retry...&amp;quot;);&lt;br /&gt;
         delay(100);&lt;br /&gt;
     }&lt;br /&gt;
     SERIAL_PORT_MONITOR.println(&amp;quot;CAN init ok!&amp;quot;);&lt;br /&gt;
     pinMode(buttonMain, INPUT_PULLUP);&lt;br /&gt;
     pinMode(buttonRes, INPUT_PULLUP);&lt;br /&gt;
     pinMode(buttonSet, INPUT_PULLUP); // default state 12v&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 void loop() {&lt;br /&gt;
 &lt;br /&gt;
     byte switchState = 0x0;&lt;br /&gt;
 &lt;br /&gt;
     // Read analog inputs&lt;br /&gt;
     int stateMain = digitalRead(buttonMain);&lt;br /&gt;
     int stateRes = digitalRead(buttonRes);&lt;br /&gt;
     int stateSet = digitalRead(buttonSet);&lt;br /&gt;
 &lt;br /&gt;
     // You can more inputs and adjust the logic according the the can-bus chart&lt;br /&gt;
     if (stateMain == LOW) {&lt;br /&gt;
         switchState |= (1 &amp;lt;&amp;lt; 0);  // Set bit 0&lt;br /&gt;
     }&lt;br /&gt;
     if (stateSet == LOW) {&lt;br /&gt;
         switchState |= (1 &amp;lt;&amp;lt; 1);  // Set bit 1&lt;br /&gt;
     }&lt;br /&gt;
     if (stateRes == LOW) {&lt;br /&gt;
         switchState |= (1 &amp;lt;&amp;lt; 2);  // Set bit 2&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
     // Check if the switch state has changed&lt;br /&gt;
     if (switchState != oldSwitchState) {&lt;br /&gt;
         Serial.println(switchState);  // Print new state for monitoring purposes&lt;br /&gt;
         oldSwitchState = switchState; // Update oldSwitchState&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
     // Define bytes for can message (0x38A)&lt;br /&gt;
     byte byteTwo = switchState &amp;amp; 1;&lt;br /&gt;
 &lt;br /&gt;
     byte byteThree = switchState &amp;gt;&amp;gt; 1;&lt;br /&gt;
     byteThree = byteThree | 0xC; // Could also be 0x4 (See Sender coding)&lt;br /&gt;
     byteThree = (sequence &amp;lt;&amp;lt; 4) | byteThree;&lt;br /&gt;
 &lt;br /&gt;
     byte checksum = byteTwo ^ byteThree;&lt;br /&gt;
 &lt;br /&gt;
     unsigned char payload[4] = {checksum, byteTwo, byteThree, 0x00};&lt;br /&gt;
     CAN.sendMsgBuf(0x38A, 0, 4, payload);&lt;br /&gt;
     &lt;br /&gt;
     sequence = (sequence + 1) &amp;amp; 0x0F; // increment for the next frame&lt;br /&gt;
 &lt;br /&gt;
     delay(20); // Send every 20ms&lt;br /&gt;
 }&lt;/div&gt;</summary>
		<author><name>Arte</name></author>
	</entry>
	<entry>
		<id>https://the07k.wiki/index.php?title=File:Checksum_GRAneu.png&amp;diff=7682</id>
		<title>File:Checksum GRAneu.png</title>
		<link rel="alternate" type="text/html" href="https://the07k.wiki/index.php?title=File:Checksum_GRAneu.png&amp;diff=7682"/>
		<updated>2026-02-20T16:27:13Z</updated>

		<summary type="html">&lt;p&gt;Arte: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Checksum GRAneu&lt;/div&gt;</summary>
		<author><name>Arte</name></author>
	</entry>
	<entry>
		<id>https://the07k.wiki/index.php?title=How_to_use_the_wiki&amp;diff=7681</id>
		<title>How to use the wiki</title>
		<link rel="alternate" type="text/html" href="https://the07k.wiki/index.php?title=How_to_use_the_wiki&amp;diff=7681"/>
		<updated>2025-11-15T19:10:36Z</updated>

		<summary type="html">&lt;p&gt;Arte: /* What is a wiki */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== What is a wiki ==&lt;br /&gt;
A wiki is a website where registered members can create and edit pages that contain information regarding a particular topic.&lt;br /&gt;
&lt;br /&gt;
The wiki keeps track of recent changes and new pages. It offers the possibility to revert modifications if they are considered wrong.&lt;br /&gt;
&lt;br /&gt;
The navigation menu on the left regroups the main pages and the content of interest. Please note that if you wish to add a page to the navigation menu, you can contact the support at support@the07k.wiki or any admin/moderator of [https://www.facebook.com/groups/590065341160110 The 07K Project group].&lt;br /&gt;
&lt;br /&gt;
The main advantage of a wiki is its ability to make links between other pages. References are a powerful tool that helps readers to find the information they need. We invite you to use this powerful feature.&lt;br /&gt;
== Creating a page ==&lt;br /&gt;
You might be looking to create a new page if the topic has not been covered on the wiki. There are multiples ways to create a new page, here are the easiest ones:&lt;br /&gt;
==== Using the search bar ====&lt;br /&gt;
You can search the page with the search bar. If the page does not exist, the wiki will propose you the option to create it.&lt;br /&gt;
&lt;br /&gt;
[[File:Search bar.png|frameless|887x887px]]&lt;br /&gt;
&lt;br /&gt;
[[File:Search create page.png|frameless|816x816px]]&lt;br /&gt;
&lt;br /&gt;
By clicking on the red link, this will create your new page and you can start editing it.&lt;br /&gt;
==== Using the URL system ====&lt;br /&gt;
To create a new page, you can also use the url system. (An URL is the address of a web resource, in our case, it would be a page address)&lt;br /&gt;
&lt;br /&gt;
For example, if you wish to create a new page called &amp;quot;My new page&amp;quot;, you can simply access this URL :&lt;br /&gt;
&lt;br /&gt;
[[File:Url create page.png|frameless|909x909px]]&lt;br /&gt;
&lt;br /&gt;
(&amp;lt;nowiki&amp;gt;https://the07k.wiki/index.php?title=&amp;lt;/nowiki&amp;gt;'''My new page''')&lt;br /&gt;
&lt;br /&gt;
If '''My new page''' does not exist, it will be created and you can then start editing it.&lt;br /&gt;
==== Clicking on any red link ====&lt;br /&gt;
A red link means the link leads to a page that does not yet exist. If you click on the link, it will create the page and you can start editing it. A red link can occur when a member creates a page and references to page/topic that has not been documented. Other fellow members can then click on the red link to create and complete those topics.&lt;br /&gt;
&lt;br /&gt;
Here is an example of a red link:&lt;br /&gt;
&lt;br /&gt;
[[File:Red link.png|frameless|599x599px]]&lt;br /&gt;
&lt;br /&gt;
In this instance, the page refers to another page called &amp;quot;Emulator&amp;quot;, a page that has not been documented yet, but any member can decide to create it by clicking on the link.&lt;br /&gt;
== Editing a page ==&lt;br /&gt;
'''You need to be registered and logged in to edit a page'''&lt;br /&gt;
&lt;br /&gt;
Simply access the page you wish to edit, click on '''Actions''' -&amp;gt; '''Edit'''&lt;br /&gt;
&lt;br /&gt;
[[File:Edit page.png|frameless|394x394px]]&lt;br /&gt;
==== Saving you modifications ====&lt;br /&gt;
[[File:Save changes.png|frameless|501x501px]]&lt;br /&gt;
== View old revision of a page ==&lt;br /&gt;
The wiki keeps track of every revisions for each page. Simply access the page of interest, click on '''Actions''' -&amp;gt; '''View History'''&lt;br /&gt;
&lt;br /&gt;
[[File:History.png|frameless|407x407px]]&lt;br /&gt;
&lt;br /&gt;
[[File:Old revision.png|frameless|567x567px]]&lt;br /&gt;
== Uploading a file ==&lt;br /&gt;
To upload a file click on '''Tools''' -&amp;gt; '''Upload file'''&lt;br /&gt;
&lt;br /&gt;
[[File:Upload file.png|frameless|368x368px]]&lt;br /&gt;
&lt;br /&gt;
For a list of all the uploaded file you can consult : [[Special:ListFiles]]&lt;br /&gt;
==== Linking a file on a page ====&lt;br /&gt;
Once you uploaded you file, take note of the file name (it starts with File:):&lt;br /&gt;
&lt;br /&gt;
[[File:File name.png|frameless|815x815px]]&lt;br /&gt;
&lt;br /&gt;
While in the page editor, click on this icon to add a link :&lt;br /&gt;
&lt;br /&gt;
[[File:Link icon.png|frameless|86x86px]]&lt;br /&gt;
&lt;br /&gt;
This will open a window, simply input your file name and it will add the link to your file:&lt;br /&gt;
&lt;br /&gt;
[[File:Add a link window.png|frameless|417x417px]]&lt;br /&gt;
== Need more help ? ==&lt;br /&gt;
Our wiki runs on MediaWiki, the same wiki system as Wikipedia. You can consult their help page if you seek more information on how to use the wiki : [[mediawikiwiki:Help:Contents|MediaWiki help page]]&lt;/div&gt;</summary>
		<author><name>Arte</name></author>
	</entry>
	<entry>
		<id>https://the07k.wiki/index.php?title=File:2005-BEV.pdf&amp;diff=7678</id>
		<title>File:2005-BEV.pdf</title>
		<link rel="alternate" type="text/html" href="https://the07k.wiki/index.php?title=File:2005-BEV.pdf&amp;diff=7678"/>
		<updated>2025-10-13T20:32:03Z</updated>

		<summary type="html">&lt;p&gt;Arte: BEV 2005 Wiring diagram&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
BEV 2005 Wiring diagram&lt;/div&gt;</summary>
		<author><name>Arte</name></author>
	</entry>
	<entry>
		<id>https://the07k.wiki/index.php?title=MediaWiki:Disclaimers&amp;diff=7677</id>
		<title>MediaWiki:Disclaimers</title>
		<link rel="alternate" type="text/html" href="https://the07k.wiki/index.php?title=MediaWiki:Disclaimers&amp;diff=7677"/>
		<updated>2025-10-03T21:30:55Z</updated>

		<summary type="html">&lt;p&gt;Arte: Created page with &amp;quot;-&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-&lt;/div&gt;</summary>
		<author><name>Arte</name></author>
	</entry>
	<entry>
		<id>https://the07k.wiki/index.php?title=The_07K_Wiki:General_disclaimer&amp;diff=7676</id>
		<title>The 07K Wiki:General disclaimer</title>
		<link rel="alternate" type="text/html" href="https://the07k.wiki/index.php?title=The_07K_Wiki:General_disclaimer&amp;diff=7676"/>
		<updated>2025-10-03T21:29:59Z</updated>

		<summary type="html">&lt;p&gt;Arte: Created page with &amp;quot;-&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-&lt;/div&gt;</summary>
		<author><name>Arte</name></author>
	</entry>
	<entry>
		<id>https://the07k.wiki/index.php?title=MediaWiki:Privacy&amp;diff=7675</id>
		<title>MediaWiki:Privacy</title>
		<link rel="alternate" type="text/html" href="https://the07k.wiki/index.php?title=MediaWiki:Privacy&amp;diff=7675"/>
		<updated>2025-10-03T21:29:49Z</updated>

		<summary type="html">&lt;p&gt;Arte: Created page with &amp;quot;-&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-&lt;/div&gt;</summary>
		<author><name>Arte</name></author>
	</entry>
	<entry>
		<id>https://the07k.wiki/index.php?title=Main_Page&amp;diff=7674</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://the07k.wiki/index.php?title=Main_Page&amp;diff=7674"/>
		<updated>2025-10-03T21:25:38Z</updated>

		<summary type="html">&lt;p&gt;Arte: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;strong&amp;gt;Welcome to the 07K Wiki&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This Wiki is dedicated to the [[07K]] engine developed by Volkswagen. An engine known among enthusiast for its underrated potentials, reliability and its glorious 5-cylinders melody.&lt;br /&gt;
You can expect to find anything from oil specs to engine tuning. The Wiki is in his debut, and we encourage anyone who wishes to contribute, whether it's small details or highly technical information.&lt;br /&gt;
&lt;br /&gt;
''You need to create an account to write / edit the Wiki.''&lt;br /&gt;
&lt;br /&gt;
'''First time using a wiki ? Consult our guide : [[How to use the wiki]]'''&lt;br /&gt;
&lt;br /&gt;
If you experience any issues, feel free to contact [mailto:support@the07k.wiki support@the07k.wiki]&lt;br /&gt;
&lt;br /&gt;
'''General:'''&lt;br /&gt;
* [[Common Problems]]&lt;br /&gt;
* [[Engine Specs]]&lt;br /&gt;
'''Engine:'''&lt;br /&gt;
* [[Aftermarket Parts]]&lt;br /&gt;
* [[Engine Builds|Builds]]&lt;br /&gt;
* [[Forced Induction (Turbocharger)]]&lt;br /&gt;
* [[Engine Swaps]]&lt;br /&gt;
* [[Engine Repair Guides|Repair Procedures]]&lt;br /&gt;
'''Tuning:'''&lt;br /&gt;
* [[Standalone Management]]&lt;br /&gt;
'''Hardware (ECU):'''&lt;br /&gt;
* [[ME7.1.1 Pinout]]&lt;br /&gt;
* [[ME17.5 Pinout]]&lt;br /&gt;
'''Additional Information:'''&lt;br /&gt;
* [[Wiring Diagrams]]&lt;br /&gt;
'''Facebook groups that might interest you:'''&lt;br /&gt;
* [https://www.facebook.com/groups/247446985360343 VW 2.5l Group]&lt;br /&gt;
* [https://www.facebook.com/groups/07kswap The 07K Project]&lt;/div&gt;</summary>
		<author><name>Arte</name></author>
	</entry>
	<entry>
		<id>https://the07k.wiki/index.php?title=Main_Page&amp;diff=7673</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://the07k.wiki/index.php?title=Main_Page&amp;diff=7673"/>
		<updated>2025-10-03T21:23:50Z</updated>

		<summary type="html">&lt;p&gt;Arte: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;strong&amp;gt;Welcome to the 07K Wiki&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This Wiki is dedicated to the [[07K]] engine developed by Volkswagen. An engine known among enthusiast for its underrated potentials, reliability and its glorious 5-cylinders melody.&lt;br /&gt;
You can expect to find anything from oil specs to engine tuning. The Wiki is in his debut, and we encourage anyone who wishes to contribute, whether it's small details or highly technical information.&lt;br /&gt;
&lt;br /&gt;
''You need to create an account to write / edit the Wiki.''&lt;br /&gt;
&lt;br /&gt;
'''First time using a wiki ? Consult our guide : [[How to use the wiki]]'''&lt;br /&gt;
&lt;br /&gt;
If you experience any issues, feel free to contact [mailto:support@the07k.wiki support@the07k.wiki]&lt;br /&gt;
&lt;br /&gt;
'''[/cdn-cgi/l/email-protection#73000603031c010733071b164344185d041a181a General:]'''&lt;br /&gt;
* [/cdn-cgi/l/email-protection#fb888e8b8b94898fbb8f939ecbcc90d58c929092 Common Problems]&lt;br /&gt;
* [[Engine Specs]]&lt;br /&gt;
'''Engine:'''&lt;br /&gt;
* [[Aftermarket Parts]]&lt;br /&gt;
* [[Engine Builds|Builds]]&lt;br /&gt;
* [[Forced Induction (Turbocharger)]]&lt;br /&gt;
* [[Engine Swaps]]&lt;br /&gt;
* [[Engine Repair Guides|Repair Procedures]]&lt;br /&gt;
'''Tuning:'''&lt;br /&gt;
* [[Standalone Management]]&lt;br /&gt;
'''Hardware (ECU):'''&lt;br /&gt;
* [[ME7.1.1 Pinout]]&lt;br /&gt;
* [[ME17.5 Pinout]]&lt;br /&gt;
'''Additional Information:'''&lt;br /&gt;
* [[Wiring Diagrams]]&lt;br /&gt;
'''Facebook groups that might interest you:'''&lt;br /&gt;
* [https://www.facebook.com/groups/247446985360343 VW 2.5l Group]&lt;br /&gt;
* [https://www.facebook.com/groups/07kswap The 07K Project]&lt;/div&gt;</summary>
		<author><name>Arte</name></author>
	</entry>
	<entry>
		<id>https://the07k.wiki/index.php?title=Main_Page&amp;diff=7672</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://the07k.wiki/index.php?title=Main_Page&amp;diff=7672"/>
		<updated>2025-10-03T21:22:17Z</updated>

		<summary type="html">&lt;p&gt;Arte: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;strong&amp;gt;Welcome to the 07K Wiki&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This Wiki is dedicated to the [[07K]] engine developed by Volkswagen. An engine known among enthusiast for its underrated potentials, reliability and its glorious 5-cylinders melody.&lt;br /&gt;
You can expect to find anything from oil specs to engine tuning. The Wiki is in his debut, and we encourage anyone who wishes to contribute, whether it's small details or highly technical information.&lt;br /&gt;
&lt;br /&gt;
''You need to create an account to write / edit the Wiki.''&lt;br /&gt;
&lt;br /&gt;
'''First time using a wiki ? Consult our guide : [[How to use the wiki]]'''&lt;br /&gt;
&lt;br /&gt;
If you experience any issues, feel free to contact [mailto:support@the07k.wiki][/cdn-cgi/l/email-protection &amp;lt;nowiki&amp;gt;[email protected]&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
'''[mailto:support@the07k.wiki General:]'''&lt;br /&gt;
* [mailto:support@the07k.wiki Common Problems]&lt;br /&gt;
* [[Engine Specs]]&lt;br /&gt;
'''Engine:'''&lt;br /&gt;
* [[Aftermarket Parts]]&lt;br /&gt;
* [[Engine Builds|Builds]]&lt;br /&gt;
* [[Forced Induction (Turbocharger)]]&lt;br /&gt;
* [[Engine Swaps]]&lt;br /&gt;
* [[Engine Repair Guides|Repair Procedures]]&lt;br /&gt;
'''Tuning:'''&lt;br /&gt;
* [[Standalone Management]]&lt;br /&gt;
'''Hardware (ECU):'''&lt;br /&gt;
* [[ME7.1.1 Pinout]]&lt;br /&gt;
* [[ME17.5 Pinout]]&lt;br /&gt;
'''Additional Information:'''&lt;br /&gt;
* [[Wiring Diagrams]]&lt;br /&gt;
'''Facebook groups that might interest you:'''&lt;br /&gt;
* [https://www.facebook.com/groups/247446985360343 VW 2.5l Group]&lt;br /&gt;
* [https://www.facebook.com/groups/07kswap The 07K Project]&lt;/div&gt;</summary>
		<author><name>Arte</name></author>
	</entry>
	<entry>
		<id>https://the07k.wiki/index.php?title=Main_Page&amp;diff=7671</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://the07k.wiki/index.php?title=Main_Page&amp;diff=7671"/>
		<updated>2025-10-03T21:21:42Z</updated>

		<summary type="html">&lt;p&gt;Arte: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;strong&amp;gt;Welcome to the 07K Wiki&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This Wiki is dedicated to the [[07K]] engine developed by Volkswagen. An engine known among enthusiast for its underrated potentials, reliability and its glorious 5-cylinders melody.&lt;br /&gt;
You can expect to find anything from oil specs to engine tuning. The Wiki is in his debut, and we encourage anyone who wishes to contribute, whether it's small details or highly technical information.&lt;br /&gt;
&lt;br /&gt;
''You need to create an account to write / edit the Wiki.''&lt;br /&gt;
&lt;br /&gt;
'''First time using a wiki ? Consult our guide : [[How to use the wiki]]'''&lt;br /&gt;
&lt;br /&gt;
If you experience any issues, feel free to contact support@the07k.wiki&lt;br /&gt;
&lt;br /&gt;
'''General:'''&lt;br /&gt;
* [[Common Problems]]&lt;br /&gt;
* [[Engine Specs]]&lt;br /&gt;
'''Engine:'''&lt;br /&gt;
* [[Aftermarket Parts]]&lt;br /&gt;
* [[Engine Builds|Builds]]&lt;br /&gt;
* [[Forced Induction (Turbocharger)]]&lt;br /&gt;
* [[Engine Swaps]]&lt;br /&gt;
* [[Engine Repair Guides|Repair Procedures]]&lt;br /&gt;
'''Tuning:'''&lt;br /&gt;
* [[Standalone Management]]&lt;br /&gt;
'''Hardware (ECU):'''&lt;br /&gt;
* [[ME7.1.1 Pinout]]&lt;br /&gt;
* [[ME17.5 Pinout]]&lt;br /&gt;
'''Additional Information:'''&lt;br /&gt;
* [[Wiring Diagrams]]&lt;br /&gt;
'''Facebook groups that might interest you:'''&lt;br /&gt;
* [https://www.facebook.com/groups/247446985360343 VW 2.5l Group]&lt;br /&gt;
* [https://www.facebook.com/groups/07kswap The 07K Project]&lt;/div&gt;</summary>
		<author><name>Arte</name></author>
	</entry>
	<entry>
		<id>https://the07k.wiki/index.php?title=Main_Page&amp;diff=7670</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://the07k.wiki/index.php?title=Main_Page&amp;diff=7670"/>
		<updated>2025-10-03T21:21:13Z</updated>

		<summary type="html">&lt;p&gt;Arte: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;strong&amp;gt;Welcome to the 07K Wiki&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This Wiki is dedicated to the [[07K]] engine developed by Volkswagen. An engine known among enthusiast for its underrated potentials, reliability and its glorious 5-cylinders melody.&lt;br /&gt;
You can expect to find anything from oil specs to engine tuning. The Wiki is in his debut, and we encourage anyone who wishes to contribute, whether it's small details or highly technical information.&lt;br /&gt;
&lt;br /&gt;
''You need to create an account to write / edit the Wiki.''&lt;br /&gt;
&lt;br /&gt;
'''First time using a wiki ? Consult our guide : [[How to use the wiki]]'''&lt;br /&gt;
&lt;br /&gt;
If you experience any issues, feel free to contact [/cdn-cgi/l/email-protection#f4878184849b8680b4809c91c4c39fda839d9f9d &amp;lt;span class=&amp;quot;__cf_email__&amp;quot; data-cfemail=&amp;quot;9ae9efeaeaf5e8eedaeef2ffaaadf1b4edf3f1f3&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;[email protected]&amp;lt;/nowiki&amp;gt;&amp;lt;/span&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
'''General:'''&lt;br /&gt;
* [[Common Problems]]&lt;br /&gt;
* [[Engine Specs]]&lt;br /&gt;
'''Engine:'''&lt;br /&gt;
* [[Aftermarket Parts]]&lt;br /&gt;
* [[Engine Builds|Builds]]&lt;br /&gt;
* [[Forced Induction (Turbocharger)]]&lt;br /&gt;
* [[Engine Swaps]]&lt;br /&gt;
* [[Engine Repair Guides|Repair Procedures]]&lt;br /&gt;
'''Tuning:'''&lt;br /&gt;
* [[Standalone Management]]&lt;br /&gt;
'''Hardware (ECU):'''&lt;br /&gt;
* [[ME7.1.1 Pinout]]&lt;br /&gt;
* [[ME17.5 Pinout]]&lt;br /&gt;
'''Additional Information:'''&lt;br /&gt;
* [[Wiring Diagrams]]&lt;br /&gt;
'''Facebook groups that might interest you:'''&lt;br /&gt;
* [https://www.facebook.com/groups/247446985360343 VW 2.5l Group]&lt;br /&gt;
* [https://www.facebook.com/groups/07kswap The 07K Project]&lt;/div&gt;</summary>
		<author><name>Arte</name></author>
	</entry>
	<entry>
		<id>https://the07k.wiki/index.php?title=MediaWiki:Grouppage-moderators&amp;diff=7669</id>
		<title>MediaWiki:Grouppage-moderators</title>
		<link rel="alternate" type="text/html" href="https://the07k.wiki/index.php?title=MediaWiki:Grouppage-moderators&amp;diff=7669"/>
		<updated>2025-10-03T21:17:16Z</updated>

		<summary type="html">&lt;p&gt;Arte: Created page with &amp;quot;Moderators&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Moderators&lt;/div&gt;</summary>
		<author><name>Arte</name></author>
	</entry>
	<entry>
		<id>https://the07k.wiki/index.php?title=MediaWiki:Group-moderators-member&amp;diff=7668</id>
		<title>MediaWiki:Group-moderators-member</title>
		<link rel="alternate" type="text/html" href="https://the07k.wiki/index.php?title=MediaWiki:Group-moderators-member&amp;diff=7668"/>
		<updated>2025-10-03T21:16:42Z</updated>

		<summary type="html">&lt;p&gt;Arte: Created page with &amp;quot;Moderators&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Moderators&lt;/div&gt;</summary>
		<author><name>Arte</name></author>
	</entry>
	<entry>
		<id>https://the07k.wiki/index.php?title=MediaWiki:Group-moderators&amp;diff=7666</id>
		<title>MediaWiki:Group-moderators</title>
		<link rel="alternate" type="text/html" href="https://the07k.wiki/index.php?title=MediaWiki:Group-moderators&amp;diff=7666"/>
		<updated>2025-10-03T21:15:31Z</updated>

		<summary type="html">&lt;p&gt;Arte: Created page with &amp;quot;Moderators&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Moderators&lt;/div&gt;</summary>
		<author><name>Arte</name></author>
	</entry>
	<entry>
		<id>https://the07k.wiki/index.php?title=File:2.5_filage_MK5.pdf&amp;diff=7650</id>
		<title>File:2.5 filage MK5.pdf</title>
		<link rel="alternate" type="text/html" href="https://the07k.wiki/index.php?title=File:2.5_filage_MK5.pdf&amp;diff=7650"/>
		<updated>2025-09-04T15:22:07Z</updated>

		<summary type="html">&lt;p&gt;Arte: Simplified wiring diagram for running a 2.5 with the 2005-2008 engine management

Diagram in French&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
Simplified wiring diagram for running a 2.5 with the 2005-2008 engine management&lt;br /&gt;
&lt;br /&gt;
Diagram in French&lt;/div&gt;</summary>
		<author><name>Arte</name></author>
	</entry>
	<entry>
		<id>https://the07k.wiki/index.php?title=File:Backup_07K906032T.zip&amp;diff=7407</id>
		<title>File:Backup 07K906032T.zip</title>
		<link rel="alternate" type="text/html" href="https://the07k.wiki/index.php?title=File:Backup_07K906032T.zip&amp;diff=7407"/>
		<updated>2025-08-09T15:57:36Z</updated>

		<summary type="html">&lt;p&gt;Arte: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Arte</name></author>
	</entry>
	<entry>
		<id>https://the07k.wiki/index.php?title=File:Fuse-matrix.pdf&amp;diff=2986</id>
		<title>File:Fuse-matrix.pdf</title>
		<link rel="alternate" type="text/html" href="https://the07k.wiki/index.php?title=File:Fuse-matrix.pdf&amp;diff=2986"/>
		<updated>2024-08-06T02:30:00Z</updated>

		<summary type="html">&lt;p&gt;Arte: Fuse matrix for calculating power consumption going through a fuse&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
Fuse matrix for calculating power consumption going through a fuse&lt;/div&gt;</summary>
		<author><name>Arte</name></author>
	</entry>
	<entry>
		<id>https://the07k.wiki/index.php?title=The_07K_Wiki:About&amp;diff=2982</id>
		<title>The 07K Wiki:About</title>
		<link rel="alternate" type="text/html" href="https://the07k.wiki/index.php?title=The_07K_Wiki:About&amp;diff=2982"/>
		<updated>2024-07-27T00:31:26Z</updated>

		<summary type="html">&lt;p&gt;Arte: Created page with &amp;quot;The 07K Wiki is being hosted by RevMap Performance for car enthusiasts who seek and wish to supply information regarding the 07K engine&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The 07K Wiki is being hosted by RevMap Performance for car enthusiasts who seek and wish to supply information regarding the 07K engine&lt;/div&gt;</summary>
		<author><name>Arte</name></author>
	</entry>
	<entry>
		<id>https://the07k.wiki/index.php?title=MediaWiki:Sidebar&amp;diff=2981</id>
		<title>MediaWiki:Sidebar</title>
		<link rel="alternate" type="text/html" href="https://the07k.wiki/index.php?title=MediaWiki:Sidebar&amp;diff=2981"/>
		<updated>2024-07-26T23:51:07Z</updated>

		<summary type="html">&lt;p&gt;Arte: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
* Navigation:&lt;br /&gt;
** mainpage|Main Page&lt;br /&gt;
** recentchanges-url|Recent Changes&lt;br /&gt;
* General:&lt;br /&gt;
** Common_Problems | Common Problems&lt;br /&gt;
** Engine_Specs | Engine Specs&lt;br /&gt;
* Engine:&lt;br /&gt;
** Aftermarket_Parts | Aftermarket Parts&lt;br /&gt;
** Engine_Builds | Builds&lt;br /&gt;
** Forced_Induction_(Turbocharger) | Forced Induction&lt;br /&gt;
** Engine_Swaps | Engine Swaps&lt;br /&gt;
** Engine_Repair_Guides | Repair Procedures&lt;br /&gt;
* Tuning:&lt;br /&gt;
** Standalone_Management | Standalone Management&lt;br /&gt;
* Hardware (ECU):&lt;br /&gt;
** ME7.1.1_Pinout | ME7.1.1 Pinout&lt;br /&gt;
** ME17.5_Pinout | ME17.5 Pinout&lt;br /&gt;
* Additional Information:&lt;br /&gt;
** Wiring_Diagrams | Wiring Diagrams&lt;br /&gt;
* SEARCH&lt;br /&gt;
* TOOLBOX&lt;br /&gt;
* LANGUAGES&lt;/div&gt;</summary>
		<author><name>Arte</name></author>
	</entry>
	<entry>
		<id>https://the07k.wiki/index.php?title=Main_Page&amp;diff=2980</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://the07k.wiki/index.php?title=Main_Page&amp;diff=2980"/>
		<updated>2024-07-26T23:49:29Z</updated>

		<summary type="html">&lt;p&gt;Arte: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;strong&amp;gt;Welcome to the 07K Wiki&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This Wiki is dedicated to the [[07K]] engine developped by Volkswagen. An engine known among enthusiast for its underated potentials, reliability and its glorious 5-cylinders melody.&lt;br /&gt;
You can expect to find anything from oil specs to engine tuning. The Wiki is in his debut and we encourage anyone who wishes to contribute whether it's small details or highly technical informations.&lt;br /&gt;
&lt;br /&gt;
''You need to create an account to write / edit the Wiki.''&lt;br /&gt;
&lt;br /&gt;
'''First time using a wiki ? Consult our guide : [[How to use the wiki]]'''&lt;br /&gt;
&lt;br /&gt;
If you experience any issues, feel free to contact [mailto:support@the07k.wiki support@the07k.wiki]&lt;br /&gt;
&lt;br /&gt;
'''General:'''&lt;br /&gt;
* [[Common Problems]]&lt;br /&gt;
* [[Engine Specs]]&lt;br /&gt;
'''Engine:'''&lt;br /&gt;
* [[Aftermarket Parts]]&lt;br /&gt;
* [[Engine Builds|Builds]]&lt;br /&gt;
* [[Forced Induction (Turbocharger)]]&lt;br /&gt;
* [[Engine Swaps]]&lt;br /&gt;
* [[Engine Repair Guides|Repair Procedures]]&lt;br /&gt;
'''Tuning:'''&lt;br /&gt;
* [[Standalone Management]]&lt;br /&gt;
'''Hardware (ECU):'''&lt;br /&gt;
* [[ME7.1.1 Pinout]]&lt;br /&gt;
* [[ME17.5 Pinout]]&lt;br /&gt;
'''Additional Information:'''&lt;br /&gt;
* [[Wiring Diagrams]]&lt;br /&gt;
'''Facebook groups that might interest you:'''&lt;br /&gt;
* [https://www.facebook.com/groups/247446985360343 VW 2.5l Group]&lt;br /&gt;
* [https://www.facebook.com/groups/07kswap The 07K Project]&lt;/div&gt;</summary>
		<author><name>Arte</name></author>
	</entry>
	<entry>
		<id>https://the07k.wiki/index.php?title=MediaWiki:Loginprompt&amp;diff=2979</id>
		<title>MediaWiki:Loginprompt</title>
		<link rel="alternate" type="text/html" href="https://the07k.wiki/index.php?title=MediaWiki:Loginprompt&amp;diff=2979"/>
		<updated>2024-07-26T23:17:00Z</updated>

		<summary type="html">&lt;p&gt;Arte: Blanked the page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Arte</name></author>
	</entry>
	<entry>
		<id>https://the07k.wiki/index.php?title=MediaWiki:Loginprompt&amp;diff=2966</id>
		<title>MediaWiki:Loginprompt</title>
		<link rel="alternate" type="text/html" href="https://the07k.wiki/index.php?title=MediaWiki:Loginprompt&amp;diff=2966"/>
		<updated>2024-06-20T20:58:26Z</updated>

		<summary type="html">&lt;p&gt;Arte: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Note|note-reminder|In an effort to prevent '''leeching''' and encourage contributions between members, some areas of the wiki have been made private and '''require an account'''. To get an account, please email '''support@the07k.wiki'''. Let us know about your background and your motives&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Arte</name></author>
	</entry>
	<entry>
		<id>https://the07k.wiki/index.php?title=MediaWiki:Loginprompt&amp;diff=2965</id>
		<title>MediaWiki:Loginprompt</title>
		<link rel="alternate" type="text/html" href="https://the07k.wiki/index.php?title=MediaWiki:Loginprompt&amp;diff=2965"/>
		<updated>2024-06-20T20:57:35Z</updated>

		<summary type="html">&lt;p&gt;Arte: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Note|note-reminder|In an effort to prevent '''leeching''' and encourage contributions between members, some areas of the wiki have been made private and '''require an account'''. To get an account, please email '''support@the07k.wiki'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Let us know about your background and your motives&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Arte</name></author>
	</entry>
	<entry>
		<id>https://the07k.wiki/index.php?title=MediaWiki:Loginprompt&amp;diff=2964</id>
		<title>MediaWiki:Loginprompt</title>
		<link rel="alternate" type="text/html" href="https://the07k.wiki/index.php?title=MediaWiki:Loginprompt&amp;diff=2964"/>
		<updated>2024-06-20T20:54:10Z</updated>

		<summary type="html">&lt;p&gt;Arte: Created page with &amp;quot;In an effort to prevent '''leeching''' and encourage contributions between members, some areas of the wiki have been private and '''require an account'''. To get an account, please email '''support@the07k.wiki'''  Let us know about your background and your motives&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In an effort to prevent '''leeching''' and encourage contributions between members, some areas of the wiki have been private and '''require an account'''. To get an account, please email '''support@the07k.wiki'''&lt;br /&gt;
&lt;br /&gt;
Let us know about your background and your motives&lt;/div&gt;</summary>
		<author><name>Arte</name></author>
	</entry>
	<entry>
		<id>https://the07k.wiki/index.php?title=File:Me711-swap.pdf&amp;diff=2956</id>
		<title>File:Me711-swap.pdf</title>
		<link rel="alternate" type="text/html" href="https://the07k.wiki/index.php?title=File:Me711-swap.pdf&amp;diff=2956"/>
		<updated>2024-03-22T20:03:50Z</updated>

		<summary type="html">&lt;p&gt;Arte: Author : Emile Morin&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
Author : Emile Morin&lt;/div&gt;</summary>
		<author><name>Arte</name></author>
	</entry>
	<entry>
		<id>https://the07k.wiki/index.php?title=File:Ida-graphic-overview.png&amp;diff=2911</id>
		<title>File:Ida-graphic-overview.png</title>
		<link rel="alternate" type="text/html" href="https://the07k.wiki/index.php?title=File:Ida-graphic-overview.png&amp;diff=2911"/>
		<updated>2023-11-25T23:21:58Z</updated>

		<summary type="html">&lt;p&gt;Arte: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ida-graphic-overview&lt;/div&gt;</summary>
		<author><name>Arte</name></author>
	</entry>
	<entry>
		<id>https://the07k.wiki/index.php?title=File:Ida-subroutine-graphic.png&amp;diff=2910</id>
		<title>File:Ida-subroutine-graphic.png</title>
		<link rel="alternate" type="text/html" href="https://the07k.wiki/index.php?title=File:Ida-subroutine-graphic.png&amp;diff=2910"/>
		<updated>2023-11-25T23:20:56Z</updated>

		<summary type="html">&lt;p&gt;Arte: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ida subroutine graphic&lt;/div&gt;</summary>
		<author><name>Arte</name></author>
	</entry>
	<entry>
		<id>https://the07k.wiki/index.php?title=File:IDA-CODE-EXAMPLE.png&amp;diff=2908</id>
		<title>File:IDA-CODE-EXAMPLE.png</title>
		<link rel="alternate" type="text/html" href="https://the07k.wiki/index.php?title=File:IDA-CODE-EXAMPLE.png&amp;diff=2908"/>
		<updated>2023-11-25T23:12:33Z</updated>

		<summary type="html">&lt;p&gt;Arte: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;example IDA&lt;/div&gt;</summary>
		<author><name>Arte</name></author>
	</entry>
	<entry>
		<id>https://the07k.wiki/index.php?title=File:Ida-defined.png&amp;diff=2907</id>
		<title>File:Ida-defined.png</title>
		<link rel="alternate" type="text/html" href="https://the07k.wiki/index.php?title=File:Ida-defined.png&amp;diff=2907"/>
		<updated>2023-11-25T23:11:41Z</updated>

		<summary type="html">&lt;p&gt;Arte: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ida defined&lt;/div&gt;</summary>
		<author><name>Arte</name></author>
	</entry>
	<entry>
		<id>https://the07k.wiki/index.php?title=File:IDA-ANALYZE.png&amp;diff=2906</id>
		<title>File:IDA-ANALYZE.png</title>
		<link rel="alternate" type="text/html" href="https://the07k.wiki/index.php?title=File:IDA-ANALYZE.png&amp;diff=2906"/>
		<updated>2023-11-25T23:10:11Z</updated>

		<summary type="html">&lt;p&gt;Arte: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Analyze selected area&lt;/div&gt;</summary>
		<author><name>Arte</name></author>
	</entry>
	<entry>
		<id>https://the07k.wiki/index.php?title=File:IDA-DPP.png&amp;diff=2905</id>
		<title>File:IDA-DPP.png</title>
		<link rel="alternate" type="text/html" href="https://the07k.wiki/index.php?title=File:IDA-DPP.png&amp;diff=2905"/>
		<updated>2023-11-25T23:03:14Z</updated>

		<summary type="html">&lt;p&gt;Arte: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Set default segment register&lt;/div&gt;</summary>
		<author><name>Arte</name></author>
	</entry>
	<entry>
		<id>https://the07k.wiki/index.php?title=File:IDA-load-file.png&amp;diff=2904</id>
		<title>File:IDA-load-file.png</title>
		<link rel="alternate" type="text/html" href="https://the07k.wiki/index.php?title=File:IDA-load-file.png&amp;diff=2904"/>
		<updated>2023-11-25T23:00:37Z</updated>

		<summary type="html">&lt;p&gt;Arte: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Load additional file&lt;/div&gt;</summary>
		<author><name>Arte</name></author>
	</entry>
	<entry>
		<id>https://the07k.wiki/index.php?title=File:IDA-create-segment.png&amp;diff=2903</id>
		<title>File:IDA-create-segment.png</title>
		<link rel="alternate" type="text/html" href="https://the07k.wiki/index.php?title=File:IDA-create-segment.png&amp;diff=2903"/>
		<updated>2023-11-25T22:51:41Z</updated>

		<summary type="html">&lt;p&gt;Arte: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Create memory segment&lt;/div&gt;</summary>
		<author><name>Arte</name></author>
	</entry>
	<entry>
		<id>https://the07k.wiki/index.php?title=File:IDA-information-type.png&amp;diff=2902</id>
		<title>File:IDA-information-type.png</title>
		<link rel="alternate" type="text/html" href="https://the07k.wiki/index.php?title=File:IDA-information-type.png&amp;diff=2902"/>
		<updated>2023-11-25T22:49:52Z</updated>

		<summary type="html">&lt;p&gt;Arte: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;IDA information type&lt;/div&gt;</summary>
		<author><name>Arte</name></author>
	</entry>
	<entry>
		<id>https://the07k.wiki/index.php?title=File:Ida-memory-organization.png&amp;diff=2901</id>
		<title>File:Ida-memory-organization.png</title>
		<link rel="alternate" type="text/html" href="https://the07k.wiki/index.php?title=File:Ida-memory-organization.png&amp;diff=2901"/>
		<updated>2023-11-25T22:47:13Z</updated>

		<summary type="html">&lt;p&gt;Arte: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;IDA memory organization&lt;/div&gt;</summary>
		<author><name>Arte</name></author>
	</entry>
</feed>