class OneShotTimer {
public:
OneShotTimer(uint8_t pin, const char* lbl):
m_pin(pin), m_label(lbl)
{
pinMode(m_pin, OUTPUT);
}
void start(float a, float b, float ml) {
digitalWrite(m_pin, HIGH);
m_startTime = millis();
m_setTime = calcDelay(a, b, ml);
Serial.print("Start: ");
Serial.print(m_label);
Serial.print(", duration: ");
Serial.print(m_setTime);
Serial.println(" ms.");
m_running = 1;
}
void run() {
if (millis() - m_startTime >= m_setTime && m_running) {
digitalWrite(m_pin, LOW);
Serial.print("Stop: ");
Serial.println(m_label);
m_running = 0;
}
}
uint32_t calcDelay(float a, float b, int ml) {
double val = a * (ml^2) + b * ml;
return (uint32_t) val;
}
private:
const char* m_label;
uint8_t m_pin;
uint8_t m_running;
uint32_t m_startTime;
uint32_t m_setTime;
};
#define pompa_a 7
#define pompa_b 8
#define pompa_c 9
#define pompa_d 10
OneShotTimer pumpA(pompa_a, "PUMP A");
OneShotTimer pumpB(pompa_b, "PUMP B");
OneShotTimer pumpC(pompa_c, "PUMP C");
OneShotTimer pumpD(pompa_d, "PUMP D");
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
pumpA.start(-0.0568, 66.154, 80);
pumpB.start(-0.0268, 53.651, 80);
pumpC.start(-0.0223, 49.775, 80);
pumpD.start(-0.0505, 64.876, 80);
}
void loop() {
pumpA.run();
pumpB.run();
pumpC.run();
pumpD.run();
}
// void pompaNuang (int pump, int ml){
// int pompa;
// double y;
// switch (pump) {
// case pompa_a:
// pompa = pompa_a;
// y = -0.0568 * (ml^2) + 66.154 * ml;
// break;
// case pompa_b:
// pompa = pompa_b;
// y = -0.0268 * (ml^2) + 53.651 * ml;
// break;
// case pompa_c:
// pompa = pompa_c;
// y = -0.0223 * (ml^2) + 49.775 * ml;
// break;
// case pompa_d:
// pompa = pompa_d;
// y = -0.0505 * (ml^2) + 64.876 *ml;
// break;
// default:
// Serial.println("wrong pin");
// }
// Serial.print("start pump:");
// Serial.print(pompa);
// Serial.print(", duration:");
// Serial.println (int(y));
// digitalWrite(pompa, HIGH);
// delay(int(y));
// digitalWrite(pompa,LOW);
// }