75 lines
2.0 KiB
C++
75 lines
2.0 KiB
C++
// Library for managing hardware
|
|
|
|
#include <Arduino.h>
|
|
#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();
|
|
|
|
Serial.print("Simulated pressure: ");
|
|
Serial.println(simulatedPressure);
|
|
}
|
|
}
|
|
|
|
void measurePressure(float &pressureValue, int pin) {
|
|
if (simulating) {
|
|
float adjusted = simulatedPressure + (random(-100, 100) / 100.0);
|
|
adjusted *= offsetMultiplier;
|
|
pressureValue = 0.99 * pressureValue + 0.01 * adjusted;
|
|
} else {
|
|
int sensorValue = analogRead(pin);
|
|
float adjusted = 0.098 * sensorValue - 16.56 + 3.58;
|
|
pressureValue = 0.99 * pressureValue + 0.01 * adjusted;
|
|
}
|
|
}
|
|
|
|
void resamplePressure(float &pressureValue, int pin) {
|
|
if (simulating) {
|
|
float adjusted = simulatedPressure + (random(-100, 100) / 100.0);
|
|
adjusted *= offsetMultiplier;
|
|
pressureValue = adjusted;
|
|
} else {
|
|
int sensorValue = analogRead(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;
|
|
} else if (solenoidState == SOLENOID_INFLATE) {
|
|
pressureChangeRate = inflatePSIPerSecond;
|
|
offsetMultiplier = inflateOffsetMultiplier;
|
|
} else if (solenoidState == SOLENOID_DEFLATE) {
|
|
pressureChangeRate = -deflatePSIPerSecond;
|
|
offsetMultiplier = deflatePSIPerSecond;
|
|
}
|
|
}
|