// Library for managing hardware #include #include "hardware.h" bool simulating = false; float simulatedPressure = 0.0; float inflatePSIPerSecond = 0.0; float deflatePSIPerSecond = 0.0; float pressureChangeRate = 0.0; float deflateOffsetMultiplier = 0.0; float inflateOffsetMultiplier = 0.0; float offsetMultiplier = 0.0; void initSimulation() { simulating = true; simulatedPressure = (float) random(10, 30); inflatePSIPerSecond = 0.0303; deflatePSIPerSecond = 0.0958; deflateOffsetMultiplier = random(3, 10) / 100.0; inflateOffsetMultiplier = 1.0 - deflateOffsetMultiplier; offsetMultiplier = 1.0; } void tickSimulation() { static unsigned long lastTick = millis(); if (millis() > lastTick + 100) { float pressureDelta = (millis() - lastTick) / 1000.0 * pressureChangeRate; simulatedPressure += pressureDelta; lastTick = millis(); } } void measurePressure(float &pressureValue) { if (simulating) { float adjusted = simulatedPressure + (random(-100, 100) / 100.0); adjusted *= offsetMultiplier; pressureValue = 0.99 * pressureValue + 0.01 * adjusted; } else { int sensorValue = analogRead(PRESSURE_SENSOR_PIN); float adjusted = 0.098 * sensorValue - 16.56 + 3.58; pressureValue = 0.99 * pressureValue + 0.01 * adjusted; } } void resamplePressure(float &pressureValue) { if (simulating) { float adjusted = simulatedPressure + (random(-100, 100) / 100.0); adjusted *= offsetMultiplier; pressureValue = adjusted; } else { int sensorValue = analogRead(PRESSURE_SENSOR_PIN); float adjusted = 0.098 * sensorValue - 16.56 + 3.58; pressureValue = adjusted; } } void setSoleniod(int solenoidState) { if (solenoidState == SOLENOID_STOP) { pressureChangeRate = 0.0; offsetMultiplier = 1.0; digitalWrite(RELAY1_PIN, HIGH); digitalWrite(RELAY2_PIN, HIGH); } else if (solenoidState == SOLENOID_INFLATE) { pressureChangeRate = inflatePSIPerSecond; offsetMultiplier = inflateOffsetMultiplier; digitalWrite(RELAY1_PIN, LOW); digitalWrite(RELAY2_PIN, HIGH); } else if (solenoidState == SOLENOID_DEFLATE) { pressureChangeRate = -deflatePSIPerSecond; offsetMultiplier = deflatePSIPerSecond; digitalWrite(RELAY1_PIN, HIGH); digitalWrite(RELAY2_PIN, LOW); } }