Skip to main content

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:
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.ino
// 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

1

Start Minimal

Begin with only the modules you absolutely need. Add more as requirements grow.
2

Use Version Suffixes

Prefer V2 modules when available (e.g., ENABLE_SENSOR_MODULE_V2 over ENABLE_SENSOR_MODULE).
3

Group Related Modules

Organize your #define statements by category for better readability.
4

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

Build docs developers (and LLMs) love