Overview
Kinematrix uses a sophisticated conditional compilation system that allows you to include only the modules you need in your project. This dramatically reduces memory footprint and compilation time, making it possible to run complex applications even on resource-constrained microcontrollers.
How It Works
The system uses C preprocessor directives (#ifdef, #define) to conditionally include modules at compile time. Only enabled modules are compiled into your final binary.
Basic Pattern
// Define required modules BEFORE including Kinematrix
#define ENABLE_SENSOR_MODULE_V2
#define ENABLE_MODULE_WIFI_HANDLER_V2
#define ENABLE_MODULE_PID_CONTROLLER
// Include main header - only enabled modules are compiled
#include "Kinematrix.h"
The order matters! Always define your ENABLE_* directives before including Kinematrix.h.
Module Categories
Kinematrix organizes 156+ modules into logical categories:
Communication Modules (15)
// I2C Communication
#define ENABLE_MODULE_I2C_SCANNER
#define ENABLE_MODULE_I2C_EXPANDER
#define ENABLE_MODULE_IO_EXPANDER
// Serial Communication
#define ENABLE_MODULE_SERIAL_ENHANCED
#define ENABLE_MODULE_SERIAL_HARD
#define ENABLE_MODULE_SERIAL_SOFT
// Wireless Communication
#define ENABLE_MODULE_LORA_COM_V2
#define ENABLE_MODULE_ESP_NOW
Control Algorithms (7)
// PID Controllers
#define ENABLE_MODULE_PID
#define ENABLE_MODULE_PID_CONTROLLER
// Fuzzy Logic
#define ENABLE_MODULE_FUZZY_MAMDANI
#define ENABLE_MODULE_FUZZY_SUGENO
#define ENABLE_MODULE_FUZZY_TSUKAMOTO
// Machine Learning
#define ENABLE_MODULE_KNN
#define ENABLE_MODULE_DECISION_TREE
WiFi & Cloud Services (21)
// WiFi Management
#define ENABLE_MODULE_WIFI_HANDLER_V2
#define ENABLE_MODULE_WIFI_MANAGER
// Cloud Services
#define ENABLE_MODULE_FIREBASE_RTDB_V3
#define ENABLE_MODULE_MQTT_MANAGER
#define ENABLE_MODULE_GOOGLE_SHEETS
// Communication Bots
#define ENABLE_MODULE_TELEGRAM_BOT
#define ENABLE_MODULE_WHATSAPP_BOT
// Time Synchronization
#define ENABLE_MODULE_DATETIME_NTP_V2
Sensor Framework (78)
// Sensor Module V2 (Modern)
#define ENABLE_SENSOR_MODULE_V2
#define ENABLE_SENSOR_BME680_V2
#define ENABLE_SENSOR_DHT_V2
#define ENABLE_SENSOR_ANALOG_V2
// Sensor Module V1 (Legacy)
#define ENABLE_SENSOR_MODULE
#define ENABLE_SENSOR_BME280
#define ENABLE_SENSOR_DS18B20
Filter Modules (14)
// Digital Signal Processing
#define ENABLE_MODULE_MOVING_AVERAGE_FILTER
#define ENABLE_MODULE_KALMAN_FILTER
#define ENABLE_MODULE_LOW_PASS_FILTER
#define ENABLE_MODULE_HIGH_PASS_FILTER
// Dynamic Type Filters
#define ENABLE_MODULE_DYNAMIC_TYPE_MOVING_AVERAGE_FILTER
#define ENABLE_MODULE_DYNAMIC_TYPE_COMPLEMENTARY_FILTER
Configuration Files
Using lib/enable.h
For project-wide configuration, you can define all modules in lib/enable.h:
#include "Arduino.h"
// === MODULES ===
#define ENABLE_MODULE_I2C_SCANNER
#define ENABLE_MODULE_WIFI_HANDLER_V2
#define ENABLE_MODULE_PID_CONTROLLER
// === SENSORS ===
#define ENABLE_SENSOR_MODULE_V2
#define ENABLE_SENSOR_BME680_V2
// === ADDONS ===
#define ENABLE_ADDONS_AUTOLIGHT_V3
Then simply include Kinematrix in your sketch:
#include "Kinematrix.h" // Reads definitions from lib/enable.h
Per-Sketch Configuration
For sketch-specific modules, define them directly in your .ino file:
// Sketch-specific modules
#define ENABLE_MODULE_MQTT_MANAGER
#define ENABLE_SENSOR_DHT_V2
#include "Kinematrix.h"
void setup () {
// Your code here
}
Real-World Examples
Environmental Monitor (Minimal)
// Only 3 modules needed - minimal memory footprint
#define ENABLE_SENSOR_MODULE_V2
#define ENABLE_SENSOR_BME680_V2
#define ENABLE_MODULE_SERIAL_DEBUGGER_LITE
#include "Kinematrix.h"
SensorModuleV2 sensors;
BME680SensV2 environmental;
void setup () {
Serial . begin ( 115200 );
environmental . setUpdateInterval ( 5000 );
sensors . addSensor ( "env" , & environmental);
sensors . init ();
}
void loop () {
sensors . update ();
Serial . printf ( "Temp: %.2f °C \n " , environmental . getTemperature ());
delay ( 1000 );
}
IoT Data Logger (Medium)
// 8 modules - standard IoT application
#define ENABLE_SENSOR_MODULE_V2
#define ENABLE_SENSOR_BME680_V2
#define ENABLE_SENSOR_ANALOG_V2
#define ENABLE_MODULE_WIFI_HANDLER_V2
#define ENABLE_MODULE_MQTT_MANAGER
#define ENABLE_MODULE_DATETIME_NTP_V2
#define ENABLE_MODULE_SD_CARD_MODULE_ESP32
#define ENABLE_MODULE_MOVING_AVERAGE_FILTER
#include "Kinematrix.h"
// Full-featured data logging with WiFi and SD card
Industrial Controller (Full)
// 15+ modules - full-featured industrial application
#define ENABLE_SENSOR_MODULE_V2
#define ENABLE_MODULE_PID_CONTROLLER
#define ENABLE_MODULE_FUZZY_MAMDANI
#define ENABLE_MODULE_WIFI_HANDLER_V2
#define ENABLE_MODULE_MQTT_MANAGER
#define ENABLE_MODULE_MODBUS
#define ENABLE_MODULE_FREE_RTOS_HANDLER
#define ENABLE_MODULE_OLED_MENU
#define ENABLE_MODULE_EEPROM_LIB_ESP8266
#define ENABLE_MODULE_SERIAL_DEBUGGER_V2
#include "Kinematrix.h"
// Industrial-grade control system with HMI
Compilation Messages
Kinematrix provides feedback during compilation:
[INFO]: compiling Kinematrix started
[INFO]: Including module I2C_SCANNER
[INFO]: Including module WIFI_HANDLER_V2
[INFO]: Including sensor BME680_V2
[INFO]: compiling Kinematrix done
Watch the compilation output to verify that only your intended modules are being compiled.
Benefits
Reduced Binary Size Only compile what you use. A minimal sensor project can be as small as 50KB instead of 500KB+.
Faster Compilation Fewer modules mean faster build times during development iterations.
Lower Memory Usage Critical for AVR boards (2KB RAM) and ESP8266 (80KB RAM) platforms.
Cleaner Code Only include the functionality you need, making your codebase more maintainable.
Best Practices
Start Minimal
Begin with only the modules you absolutely need. Add more as requirements grow.
Use Version Suffixes
Prefer V2 modules when available (e.g., ENABLE_SENSOR_MODULE_V2 over ENABLE_SENSOR_MODULE).
Group Related Modules
Organize your #define statements by category for better readability.
Document Dependencies
Some modules depend on others. Document these relationships in your code comments.
Advanced: Conditional Features
Some modules have sub-features controlled by additional definitions:
// Enable Firebase V3 with specific features
#define ENABLE_MODULE_FIREBASE_APPLICATION_V3
#define ENABLE_MODULE_FIREBASE_RTDB_V3 // Realtime Database
#define ENABLE_MODULE_FIREBASE_FIRESTORE_V3 // Firestore
#define ENABLE_MODULE_FIREBASE_STORAGE_V3 // Cloud Storage
// Enable sensor calibration tools
#define ENABLE_SENSOR_MODULE_V2
#define ENABLE_SENSOR_CALIBRATION_MODULE_V2
#define ENABLE_INTERACTIVE_SERIAL_GENERAL_SENSOR_CALIBRATOR_V2
See Also