parent
d9c3b6acaa
commit
ace6c671a6
3 changed files with 85 additions and 7 deletions
@ -0,0 +1,57 @@ |
||||
// 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 = random(8, 12) / 100.0; |
||||
deflatePSIPerSecond = random(35, 45) / 100.0; |
||||
deflateOffsetMultiplier = random(3, 10) / 100.0; |
||||
inflateOffsetMultiplier = 1.0 - deflateOffsetMultiplier; |
||||
offsetMultiplier = 1.0; |
||||
} |
||||
|
||||
void tickSimulation() { |
||||
static unsigned long lastTick = millis(); |
||||
|
||||
float pressureDelta = (millis() - lastTick) / 1000.0 * pressureChangeRate; |
||||
|
||||
simulatedPressure += pressureDelta; |
||||
lastTick = millis(); |
||||
} |
||||
|
||||
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 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; |
||||
} |
||||
} |
@ -0,0 +1,15 @@ |
||||
// Library for managing hardware
|
||||
|
||||
#ifndef _hardware_H_ |
||||
#define _hardware_H_ |
||||
|
||||
#define SOLENOID_STOP 0 |
||||
#define SOLENOID_INFLATE 1 |
||||
#define SOLENOID_DEFLATE 2 |
||||
|
||||
void initSimulation(); |
||||
void tickSimulation(); |
||||
void measurePressure(float &pressureValue, int pin); |
||||
void setSoleniod(int solenoidState); |
||||
|
||||
#endif |
Loading…
Reference in new issue