Kinematrix implements a triple include system - a sophisticated three-tier architecture that provides different ways to include modules depending on your use case. This system gives you precise control over compilation behavior and memory usage.
Use when: You need separate enable flags for helper/utility functions distinct from production modules.Enable prefix: ENABLE_MODULE_HELPER_* or ENABLE_SENSOR_HELPER_*Statistics:
KinematrixModulesHelper.h: 88 modules, 97 .cpp includes ✅
Includes only.h header files - no implementations compiled.
KinematrixModulesNoDef.h
#ifdef ENABLE_MODULE_NODEF_I2C_SCANNER#include "../lib/modules/communication/wired/i2c/i2c-scanner.h"// No .cpp file - just the header!#endif#ifdef ENABLE_MODULE_NODEF_PID_CONTROLLER#include "../lib/modules/control/PIDController.h"// No .cpp file - declarations only#endif#ifdef ENABLE_MODULE_NODEF_WIFI_HANDLER_V2#include "../lib/modules/wifi/wifi-handler-v2.h"// No .cpp file - API visible but not compiled#endif
Use when:
Exploring APIs during development
Creating mock implementations
Reducing compilation time for IntelliSense/autocomplete
Documentation generation
Enable prefix: ENABLE_MODULE_NODEF_* or ENABLE_SENSOR_NODEF_*Statistics:
KinematrixModulesNoDef.h: 88 modules, 0 .cpp includes ✅
KinematrixSensorNoDef.h: 72 .h includes, 0 .cpp includes ✅
NoDef headers provide declarations only. Attempting to use functionality without compiling the .cpp will result in linker errors.
// Just exploring the API - no compilation overhead#define ENABLE_MODULE_NODEF_FIREBASE_RTDB_V3#define ENABLE_MODULE_NODEF_FUZZY_MAMDANI#define ENABLE_MODULE_NODEF_KNN#include "KinematrixModulesNoDef.h" // Headers only!// IntelliSense/autocomplete works, but linking will fail// Good for exploring class interfaces during planning
// Don't use main header at all// #include "Kinematrix.h" // Skipped// Manually include exactly what you need#include "lib/modules/control/PID.h"#include "lib/modules/control/PID.cpp"#include "lib/sensors/SensorModuleV2/SensorModule/SensorModuleV2.h"#include "lib/sensors/SensorModuleV2/SensorModule/SensorModuleV2.cpp"void setup() { // Only PID and SensorModuleV2 available // Maximum control, maximum manual effort}
✅ KinematrixModules.h
88 modules, 97 .cpp includes (production)✅ KinematrixModulesHelper.h
88 modules, 97 .cpp includes (helper)✅ KinematrixModulesNoDef.h
88 modules, 0 .cpp includes (header-only)All three files maintain the same module list with different prefixes.
✅ KinematrixSensor.h
78 .cpp includes (production)✅ KinematrixSensorHelper.h
78 .cpp includes (helper)✅ KinematrixSensorNoDef.h
72 .h includes, 0 .cpp includes (header-only)Sensor framework with dual version support (V1 legacy + V2 modern).
[INFO]: compiling Kinematrix started[INFO]: Including production modules...[INFO]: Including helper modules...[INFO]: Including header-only modules...[INFO]: compiling Kinematrix done