Growlight control w/ timers

Updated code as I was having problems with the simpletimer library for some reason… this new way works better anyway.

#include <Arduino.h>

// #define CAYENNE_DEBUG Serial
// #define CAYENNE_PRINT Serial
#include "CayenneDefines.h"
#include "BlynkSimpleEsp8266.h"
#include "CayenneWiFiClient.h"



char token[] = "zadg3a574d";
char ssid[] = "devices";
char password[] = "open4meplease";


#define relayPin 5

bool online = false;

byte eightHrTimer;
byte fourHrTimer;
unsigned long expireTime;

int disco = 0;
byte relay;

unsigned long time1;
unsigned long onlineTime;
unsigned long prevTime;




void setup()
{
	// Serial.begin(9600);
	Cayenne.begin(token, ssid, password);

	pinMode(BUILTIN_LED, OUTPUT);
	pinMode(relayPin, OUTPUT);
}




void loop()
{
	time1 = millis();

	Cayenne.run();



	if (relay == LOW)
		{
			digitalWrite(relayPin, LOW);
		}

	else
		{
			digitalWrite(relayPin, HIGH);
		}

	if (fourHrTimer == 1 || eightHrTimer == 1)
		{
			if (expireTime < millis())
				{
					timerDone();
				}
		}
}




void timerDone()
{
	relay = LOW;
	Cayenne.virtualWrite(V0, LOW);
	Cayenne.virtualWrite(V1, LOW);
	Cayenne.virtualWrite(V2, LOW);
	fourHrTimer = 0;
	eightHrTimer = 0;
	expireTime = 0;
}



CAYENNE_CONNECTED()
{
	online = true;
	digitalWrite(BUILTIN_LED, LOW);
}


CAYENNE_DISCONNECTED()
{
	online = false;
	digitalWrite(BUILTIN_LED, HIGH);
	prevTime = millis();
	disco++;
}


CAYENNE_IN(V0)
{
	relay = getValue.asInt();
}


CAYENNE_IN(V1)
{
	fourHrTimer = getValue.asInt();

	if (fourHrTimer == 1)
		{
			expireTime = (millis() + 14400000L);
		}

	else
		{
			expireTime = 0;
		}
}


CAYENNE_IN(V2)
{
	eightHrTimer = getValue.asInt();

	if (eightHrTimer == 1)
		{
			expireTime = (millis() + 28800000L);
		}

	else
		{
			expireTime = 0;
		}
}


CAYENNE_OUT(V10)
{
	if (fourHrTimer == 1 || eightHrTimer == 1)
		{
			Cayenne.virtualWrite(V10, ((expireTime - time1) / 1000) / 60);
		}

	else
		{
			Cayenne.virtualWrite(V10, 0);
		}

}



CAYENNE_OUT(V23)
{
	Cayenne.virtualWrite(V23, disco);
}

CAYENNE_OUT(V24)
{
	float time2 = (time1 / 1000) / 60;
	Cayenne.virtualWrite(V24, time2);
}

CAYENNE_OUT(V25)
{
	onlineTime = ((time1 - prevTime) / 1000) / 60;
	Cayenne.virtualWrite(V25, onlineTime);
}
1 Like