1. Overview
This module demonstrates how to implement a vehicle lighting control system using analog input acquisition and FlexIO-based LED driving on NXP S32K3 microcontrollers.
The application reads analog inputs from the Analog Key Click module (six push-buttons, each generating a distinct voltage level) and converts them into commands that drive a 4x4 RGB LED matrix. Each button press activates a specific lighting function — low beam, high beam, turn signals, brake lights, or hazard lights — while safety interlocks and blinking patterns run continuously in the background, mimicking how a real automotive Body Control Module (BCM) manages vehicle lighting.
This example is based on Application Code Hub demonstrations for:
Vehicle Lighting Control for Daylight and Hazard Signals on FRDM-A-S32K344
Vehicle Lighting Control for Daylight and Hazard Signals on FRDM-A-S32K312
In this workshop, the Analog Key Click simulates six vehicle lighting controls. When the student presses a button, an analog voltage proportional to the pressed key is read by the MCU through the ADC (with software debouncing), decoded into a specific lighting command, and translated into an RGB pattern generated by the FlexIO peripheral. The 4x4 RGB Click then displays the corresponding automotive lighting behavior in real time — warm white for low beams, cool white for high beams, blinking amber for turn signals and hazards, and red for brake lights.
Beyond the technical implementation, the course serves as a foundation for the Eat-Sleep-Code-Repeat learning initiative, encouraging a hands-on approach where students continuously learn, develop, test, and improve automotive embedded applications using real hardware and practical examples.
2. Learning Scope
After completing this course, participants should be able to:
Understand a basic vehicle lighting control system and the ideas behind an automotive Body Control Module (BCM).
Use the Analog Key Click as a simulated multi-button user interface (six inputs on a single analog line).
Acquire analog values (0–3.3 V) using the ADC and understand how multiple buttons share one channel through voltage division.
Perform software debouncing and decode which button was pressed based on ADC value ranges.
Drive an RGB LED matrix using the FlexIO peripheral, generating precise timing for WS2812-style LEDs.
Implement safety interlocks between lighting functions (e.g., high beam requires low beam ON).
Implement continuous background patterns such as blinking turn signals and synchronized hazards.
Recognize the actuation data flow: analog input → ADC → command decoding → FlexIO LED output.
Import, build, flash, and debug an ACH project in S32 Design Studio 3.6.5.
Understand why lighting functions are relevant for automotive safety and driver visibility.
3. System Architecture
The three elements capture exactly the basic idea of the system in the demo:
Input: Analog Key Click (six buttons T1–T6, each generating a distinct analog voltage level)
Processing: S32K3 MCU (reads the ADC, decodes the button, applies BCM logic, updates the LED state)
Output: 4x4 RGB Click (16-LED matrix driven by FlexIO to display lighting patterns)
This matches the classic flow of an embedded body-control system: sensor → processing → actuator.
Functional Flow
The system operates continuously as follows:
The user presses a button on the Analog Key Click (T1–T6)
Each button generates a distinct analog voltage on the shared output line
The ADC samples the voltage and converts it into a digital value
The application decodes which button was pressed (with debouncing)
The BCM logic applies interlocks and dependencies (e.g., high beam requires low beam)
The FlexIO peripheral drives the RGB Click LEDs with the corresponding color pattern
This loop runs continuously to ensure real-time lighting control, with blinking patterns and safety interlocks maintained in the background.
Vehicle Lighting Control Application Architecture
4. Key Concepts
4.1 ADC (Analog-to-Digital Converter)
The Analog Key Click outputs 0–3.3 V on a single analog line, with each button generating a specific voltage step. The ADC samples this voltage on ADC0_P0 (pin PTD1) at regular intervals and quantizes it into a digital code (a 12-bit ADC produces values between 0 and 4095). Each button corresponds to a specific value range, allowing six digital inputs to be read through a single ADC channel. ADC acquisition is the foundation of automotive sensing — used for switches, buttons, sensors, and many others.
4.2 Analog Multi-Button Decoding
Instead of using six separate GPIO pins, the Analog Key Click uses a resistor ladder that produces a different voltage for each button press. The application performs software debouncing (multiple ADC samples must agree before a press is confirmed) and then compares the ADC value against predefined thresholds to identify which button (T1–T6) was pressed. This technique is common in automotive steering-wheel controls, where many buttons share a single analog line to save wiring and pins.
4.3 FlexIO — Driving the RGB Click LEDs
FlexIO is a highly flexible peripheral on S32K3 that can emulate serial protocols like WS2812/NeoPixel. The RGB Click uses individually addressable LEDs that require precise timing (~800 kHz with strict pulse widths). FlexIO on PTA13 (FlexIO_D8) generates this waveform in hardware, without loading the CPU. Each of the 16 LEDs receives its color data through a serial stream, allowing independent control of color and brightness per LED.
4.4 RGB LED Mapping and Lighting Zones
The 16 LEDs of the RGB Click are logically grouped into automotive lighting zones:
LEDs 13, 14 → Low Beam Headlights (warm white)
LEDs 8, 9, 10, 11 → High Beam Headlights (cool white)
LEDs 0, 12 → Left Turn Signal (blinking amber)
LEDs 3, 15 → Right Turn Signal (blinking amber)
LEDs 1, 2, 5, 6 → Brake Lights (red)
LEDs 0, 3, 12, 15 → Hazard Lights (synchronized blinking amber)
4.5 BCM Safety Interlocks and State Dependencies
The application implements safety logic typical of a real Body Control Module: high beam can only be activated when low beam is already ON; turning OFF the low beam automatically disables the high beam; hazard lights synchronize left and right turn signals simultaneously; high beam state is preserved during hazard blinking and restored between cycles. These interlocks illustrate how real automotive lighting logic prevents unsafe combinations and preserves driver intent.
4.6 Data Flow at a Glance
Button press → analog voltage on shared line → ADC sample → software debouncing → button decoding → BCM logic (interlocks + dependencies) → FlexIO WS2812 output stream → RGB LED color update. This direct chain from the student's finger to the LEDs is the main educational value of the demo.
5. Hardware and Software Setup
Required Hardware
Component
Image
Purpose
FRDM-A-S32K312
Alternative MCU platform used to run the lighting application and process user inputs.
FRDM-A-S32K344
Alternative MCU platform used to run the lighting application and control connected peripherals.
FRDM-K64 Click Shield
mikroBUS expansion board used to connect Click modules to the FRDM platform.
Analog Key Click
Six-button analog module used to simulate the vehicle lighting controls (headlights, indicators, brakes, hazards).
4x4 RGB Click
16-LED RGB matrix used to display the automotive lighting patterns in real time.
USB-C / 12 V supply
—
Provides power and enables programming and debugging of the system through a single USB-C connection.
The example applications demonstrate how these peripherals are connected to the MCU pins and used to simulate a complete vehicle lighting control system.
Vehicle Lighting Control on FRDM-A-S32K312
Vehicle Lighting Control on FRDM-A-S32K344
Software Environment
S32 Design Studio IDE
S32K3 Automotive Software Package
Application Code Hub project import
Vehicle Lighting Control for Daylight and Hazard Signals on FRDM-A-S32K344
Vehicle Lighting Control for Daylight and Hazard Signals on FRDM-A-S32K312
6. Implementation Guide
Step
Action
Sub-steps
Expected Result
1
Import the Project
Open S32 Design Studio 3.6.5
Select “Import project from Application Code Hub”
Search for “Lighting”
Select the desired project for your FRDM board
Use the GitHub link for automatic configuration
Select main branch
Import project
Project successfully appears in workspace
2
Build the Application
Right-click project
Select “Update Code and Build Project”
Confirm SDK component management
Build completes with no errors and generates .elf file
3
Connect Hardware
Connect USB-C cable (and 12 V supply for FRDM-A-S32K312)
Attach FRDM-K64 Click Shield, Analog Key Click and 4x4 RGB Click
Verify wiring on PTA13 (FlexIO) and PTD1 (ADC)
Board is powered and detected by IDE
4
Flash and Run
Open Debug Configurations
Select “debug_flash_pemicro”
Start debugging
Application runs continuously; LEDs perform startup test sequence
5
Functional Validation
Press buttons T1–T6 on the Analog Key Click
Observe corresponding LED patterns on the RGB Click
Verify safety interlocks (high beam requires low beam)
Verify continuous blinking on turn signals and hazards
RGB LEDs display the correct automotive lighting patterns for each button
7. Signal Behavior and Control Logic
The following diagram illustrates how each user input on the Analog Key Click is mapped to a specific lighting function and to the individual LEDs of the 4×4 RGB Click matrix. Each button (T1–T6) triggers a unique combination of LEDs, colors, and patterns, reproducing the behavior of a simplified automotive lighting system.
The MCU continuously monitors the analog input from the Analog Key Click and decodes which button is pressed. Based on the detected input, the application activates the corresponding lighting function by driving the assigned LEDs on the 4×4 RGB Click through the FlexIO serial interface. Steady functions (Low Beam, High Beam, Brake) keep the associated LEDs constantly ON, while directional functions (Left Turn, Right Turn, Hazard) toggle the LEDs at approximately 1 Hz to reproduce the blinking behavior of real vehicle indicators. Additional control rules — such as High Beam requiring Low Beam to be active, or Hazard Lights preserving and restoring the High Beam state — reflect the interdependencies found in a real automotive body control module.
8. Troubleshooting
Issue
Possible Actions
Board Not Detected
Check USB-C cable and drivers
Verify debugger connection
Restart IDE
No LEDs Lighting Up
Verify FlexIO configuration on PTA13
Check 3.3 V and GND wiring on RGB Click
Confirm data-line wiring to IN1
Buttons Not Detected
Verify ADC0_P0 configuration on PTD1
Check 3.3 V and GND wiring on Analog Key Click
Confirm software debouncing thresholds
Wrong Button Triggered
Recalibrate ADC value ranges for each button
Verify power supply stability (3.3 V)
Check for noise on the analog line
Incorrect LED Colors or Timing
Verify FlexIO clock configuration (WS2812 timing)
Check LED index → color mapping in code
Ensure RGB order (GRB vs. RGB) matches the LED type
High Beam Not Activating
Ensure low beam (T1) is ON first — BCM interlock
Check application logic for beam dependencies
9. Extending the Application
The basic implementation can be extended in several ways:
Additional Lighting Functions
Add fog lights, parking lights, or daytime running lights (DRL)
Simulate reverse lights that activate when a specific input is triggered
Adaptive Front Lighting
Integrate a steering angle input (e.g., POT Click) to swivel the headlights
Simulate cornering lights that turn on when indicators are active
Ambient Light Sensing
Add a light sensor to automatically enable low beams at dusk
Implement smooth dimming between day and night modes
Brake Light Enhancements
Add an emergency brake flashing pattern for hard braking
Implement a third brake light (single LED, always ON with brakes)
CAN Communication
Enable communication with other vehicle ECUs (e.g., BCM master, doors)
Receive lighting commands over the vehicle network
State Machine Implementation A more advanced approach is to implement a formal state machine covering:
Off
DRL / Parking
Low Beam
High Beam
Hazard / Fault
10. Safety Context
This example reflects key automotive principles:
Continuous monitoring of driver input
Immediate response to control signals
Reliable actuator (LED) control with predictable timing
Safety interlocks between lighting functions (high beam requires low beam)
In real systems:
Redundancy is required for safety-relevant functions (e.g., brake lights, hazards)
Fault detection mechanisms are implemented (open lamp, short circuit, overcurrent)
Systems must comply with ISO 26262 (functional safety standard)
Vehicle lighting is one of the most safety-critical automotive functions because it directly affects driver visibility and vehicle conspicuity. Modern Body Control Modules implement extensive diagnostics, backup lighting strategies, and fail-safe defaults (e.g., hazard lights activated on power-loss recovery).
11. Conclusion
This module demonstrates how a simple embedded system can implement complete vehicle lighting control using ADC input and FlexIO output on the S32K3 platform.
It shows how:
Multiple digital inputs can share a single analog line through resistor-ladder decoding
Analog data is acquired, debounced and processed in real time
Complex automotive lighting patterns are controlled through FlexIO-driven WS2812 LEDs
Safety interlocks and background blinking patterns are managed by BCM-style logic
Result on FRDM-A-S32K312
Result on FRDM-A-S32K344
FRDM-A-S32K312
FRDM-A-S32K344
The course provides a strong foundation for more advanced systems, including adaptive lighting, CAN networking, ambient sensing, and safety-oriented designs typical of automotive body-control modules.
View full article