You all are the coolest. I decided to give enum a try because it seems awesome (This is one of my first coding projects so everything seems awesome).
As of now, it's working as I want. My new question, as I need to sort of triple this code to account for humidity levels (h), humidity solenoids (humdRelay), carbon dioxide levels (co2) and my co2 fresh air intake relay (co2Relay), is:
How do I go about turning my loop-embedded switch function into something more general that can be called 3 times using different variables each time?
I should also say, I'm using this code in conjunction with the Blynk app for and using it to display my temperature as well as provide a virtual thermostat from my phone...
Here's what I have:
#include <Bridge.h>
#include <BlynkSimpleYun.h>
#include <Wire.h>
#include "SparkFunHTU21D.h"
#include "kSeries.h"
#include <SimpleTimer.h>
SimpleTimer timer;
HTU21D myClimate;
int tempSlider = 30;
int tempRelay = 10;
int t;
enum State {
OFF = 0,
DELAYING = 1,
ON = 2
} state;
unsigned long delayingFromMs;
char auth[] = "derp";
void setup() {
Blynk.begin(auth);
state = OFF;
pinMode(tempRelay, OUTPUT);
myClimate.begin();
}
BLYNK_READ(0) { // temp display
float celsiusTemp = myClimate.readTemperature();
t = (celsiusTemp * 9.0) / 5.0 + 32.0; //convert to fahrenheit
Blynk.virtualWrite(0, t);
}
//Temperature Setting in Blynk on Virtual Pin 2
BLYNK_WRITE(2) {
tempSlider = param.asInt();
}
void loop() {
Blynk.run();
float celsiusTemp = myClimate.readTemperature();
t = (celsiusTemp * 9.0) / 5.0 + 32.0; //convert to fahrenheit
switch (state)
{
case OFF:
if (t < tempSlider) {
state = DELAYING;
delayingFromMs = millis();
}
break;
case DELAYING:
if (t < tempSlider) {
if (millis() - delayingFromMs > 1000L * 60L) {
digitalWrite(tempRelay, HIGH);
state = ON;
}
}
else {
state = OFF;
}
break;
case ON:
{
if (t < tempSlider) {
// do nothing
} else {
digitalWrite(tempRelay, LOW);
state = OFF;
}
break;
}
}
}
and the specific code I'm looking to simplify to be called multiple times with different parameters...
switch (state)
{
case OFF:
if (t < tempSlider) {
state = DELAYING;
delayingFromMs = millis();
}
break;
case DELAYING:
if (t < tempSlider) {
if (millis() - delayingFromMs > 1000L * 60L) {
digitalWrite(tempRelay, HIGH);
state = ON;
}
}
else {
state = OFF;
}
break;
case ON:
{
if (t < tempSlider) {
// do nothing
} else {
digitalWrite(tempRelay, LOW);
state = OFF;
}
break;
}
}
Something like...
void loop{
switch(state, co2, co2Slider, co2Relay);
}
switch(state, int actualValue, setValue, relayValue)
{
case OFF:
if (actualValue < setValue) {
state = DELAYING;
delayingFromMs = millis();
}
break;
etc etc etc
But that doesn't seem to work.
Any Thoughts?