From 30dfcc59dfbaf60db7fca908c42cfffc3cc8027b Mon Sep 17 00:00:00 2001 From: "Adrian A. Baumann" Date: Thu, 21 May 2026 22:05:38 +0200 Subject: [PATCH] refactor: wire gauge_config.h into sketch, remove GaugePins and hardcoded defaults --- Gaugecontroller/Gaugecontroller.ino | 64 ++++++++++++----------------- 1 file changed, 27 insertions(+), 37 deletions(-) diff --git a/Gaugecontroller/Gaugecontroller.ino b/Gaugecontroller/Gaugecontroller.ino index d484d91..62be8ab 100644 --- a/Gaugecontroller/Gaugecontroller.ino +++ b/Gaugecontroller/Gaugecontroller.ino @@ -1,8 +1,8 @@ #include #include #include +#include "gauge_config.h" -static const uint8_t GAUGE_COUNT = 4; static const uint16_t STEPPER_TIMER_HZ = 20000; static const int32_t STEP_RATE_SCALE = 65536L; static const float MAX_TIMER_STEP_RATE = (float)STEPPER_TIMER_HZ / 2.0f; @@ -12,23 +12,6 @@ static const float MAX_TIMER_STEP_RATE = (float)STEPPER_TIMER_HZ / 2.0f; #define DEBUG_PORT Serial static const unsigned long SERIAL_BAUD = 38400; -struct GaugePins { - uint8_t dirPin; - uint8_t stepPin; - int8_t enablePin; // -1 means there is no enable pin - bool dirInverted; - bool stepActiveHigh; - bool enableActiveLow; -}; - -constexpr GaugePins gaugePins[GAUGE_COUNT] = { - // dir, step, en, dirInv, stepHigh, enActiveLow - {48, 49, -1, false, true, true}, // Gauge 0 - {8, 9, -1, true, true, true}, // Gauge 1 - {52, 53, -1, false, true, true}, // Gauge 2 - {50, 51, -1, false, true, true}, // Gauge 3 -}; - enum HomingState : uint8_t { HS_IDLE, HS_START, @@ -42,13 +25,13 @@ struct Gauge { volatile long targetPos = 0; long minPos = 0; - long maxPos = 3780; - long homingBackoffSteps = 3800; // Deliberately a touch past full reverse travel. + long maxPos = 0; + long homingBackoffSteps = 0; float velocity = 0.0f; - float maxSpeed = 4000.0f; - float accel = 6000.0f; - float homingSpeed = 500.0f; + float maxSpeed = 0.0f; + float accel = 0.0f; + float homingSpeed = 0.0f; unsigned long lastUpdateMicros = 0; @@ -104,12 +87,12 @@ inline void writePortBit(volatile uint8_t* port, uint8_t mask, bool high) { } inline void writeDirectionPin(uint8_t id, bool forward) { - bool level = gaugePins[id].dirInverted ? !forward : forward; + bool level = gaugeConfigs[id].dirInverted ? !forward : forward; writePortBit(stepperHardware[id].dirPort, stepperHardware[id].dirMask, level); } inline void writeStepPin(uint8_t id, bool active) { - bool level = gaugePins[id].stepActiveHigh ? active : !active; + bool level = gaugeConfigs[id].stepActiveHigh ? active : !active; writePortBit(stepperHardware[id].stepPort, stepperHardware[id].stepMask, level); } @@ -149,10 +132,10 @@ void stopTimerStepping(uint8_t id) { } void configureStepperHardware(uint8_t id) { - stepperHardware[id].stepPort = portOutputRegister(digitalPinToPort(gaugePins[id].stepPin)); - stepperHardware[id].stepMask = digitalPinToBitMask(gaugePins[id].stepPin); - stepperHardware[id].dirPort = portOutputRegister(digitalPinToPort(gaugePins[id].dirPin)); - stepperHardware[id].dirMask = digitalPinToBitMask(gaugePins[id].dirPin); + stepperHardware[id].stepPort = portOutputRegister(digitalPinToPort(gaugeConfigs[id].stepPin)); + stepperHardware[id].stepMask = digitalPinToBitMask(gaugeConfigs[id].stepPin); + stepperHardware[id].dirPort = portOutputRegister(digitalPinToPort(gaugeConfigs[id].dirPin)); + stepperHardware[id].dirMask = digitalPinToBitMask(gaugeConfigs[id].dirPin); } void beginStepperTimer() { @@ -288,10 +271,10 @@ void setEnable(uint8_t id, bool en) { if (id >= GAUGE_COUNT) return; gauges[id].enabled = en; - int8_t pin = gaugePins[id].enablePin; + int8_t pin = gaugeConfigs[id].enablePin; if (pin < 0) return; - bool level = gaugePins[id].enableActiveLow ? !en : en; + bool level = gaugeConfigs[id].enableActiveLow ? !en : en; digitalWrite(pin, level ? HIGH : LOW); } @@ -718,18 +701,25 @@ void setup() { DEBUG_PORT.println("Gauge controller booting"); for (uint8_t i = 0; i < GAUGE_COUNT; i++) { - pinMode(gaugePins[i].dirPin, OUTPUT); - pinMode(gaugePins[i].stepPin, OUTPUT); + pinMode(gaugeConfigs[i].dirPin, OUTPUT); + pinMode(gaugeConfigs[i].stepPin, OUTPUT); configureStepperHardware(i); - digitalWrite(gaugePins[i].dirPin, LOW); - digitalWrite(gaugePins[i].stepPin, gaugePins[i].stepActiveHigh ? LOW : HIGH); + digitalWrite(gaugeConfigs[i].dirPin, LOW); + digitalWrite(gaugeConfigs[i].stepPin, gaugeConfigs[i].stepActiveHigh ? LOW : HIGH); - if (gaugePins[i].enablePin >= 0) { - pinMode(gaugePins[i].enablePin, OUTPUT); + if (gaugeConfigs[i].enablePin >= 0) { + pinMode(gaugeConfigs[i].enablePin, OUTPUT); setEnable(i, true); } + gauges[i].minPos = gaugeConfigs[i].minPos; + gauges[i].maxPos = gaugeConfigs[i].maxPos; + gauges[i].homingBackoffSteps = gaugeConfigs[i].homingBackoffSteps; + gauges[i].maxSpeed = (float)gaugeConfigs[i].maxSpeed; + gauges[i].accel = (float)gaugeConfigs[i].accel; + gauges[i].homingSpeed = (float)gaugeConfigs[i].homingSpeed; + gauges[i].lastUpdateMicros = micros(); }