Added Time Activation Example
Added example file to turn relays on or off based on time of day.
This commit is contained in:
parent
d351d88489
commit
b63cc6e213
1 changed files with 258 additions and 0 deletions
258
firmware/examples/Time_Activated_Relay.ino
Normal file
258
firmware/examples/Time_Activated_Relay.ino
Normal file
|
|
@ -0,0 +1,258 @@
|
|||
// This #include statement was automatically added by the Particle IDE.
|
||||
#include "NCD8Relay/NCD8Relay.h"
|
||||
|
||||
const int centralZone = -6;
|
||||
const int easternZone = -5;
|
||||
const int mountainZone = -7;
|
||||
const int pacificZone = -8;
|
||||
|
||||
int eventArray[28][9];
|
||||
int numberOfEvents = 0;
|
||||
|
||||
bool process = false;
|
||||
|
||||
void newEventsHandler(const char *event, const char *data);
|
||||
int setZone(String zone);
|
||||
int clearMemory(String nothing);
|
||||
int serialPrintMemory(String nothing);
|
||||
|
||||
NCD8Relay controller;
|
||||
|
||||
void setup() {
|
||||
controller.setAddress(0,0,0);
|
||||
if(Particle.subscribe("timeEventsDevice1", newEventsHandler, MY_DEVICES)){
|
||||
Serial.println("Subscribed");
|
||||
}else{
|
||||
Serial.println("Failed to subscribe");
|
||||
}
|
||||
Particle.function("setTimezone", setZone);
|
||||
Particle.function("clearMemory", clearMemory);
|
||||
Particle.function("printMemory", serialPrintMemory);
|
||||
int storedZone = EEPROM.read(0);
|
||||
if(storedZone != 255){
|
||||
int zone = (EEPROM.read(0)*-1);
|
||||
Time.zone(zone);
|
||||
process = true;
|
||||
readStoredEvents();
|
||||
}
|
||||
}
|
||||
|
||||
void loop() {
|
||||
if(process){
|
||||
evalTime(Time.year(), Time.month(), Time.day(), Time.weekday(), Time.hour(), Time.minute(), Time.second());
|
||||
delay(1000);
|
||||
}else{
|
||||
Serial.println("No Stored Events");
|
||||
delay(2000);
|
||||
}
|
||||
}
|
||||
|
||||
void newEventsHandler(const char *event, const char *data){
|
||||
Serial.println("Handler Triggered");
|
||||
storeEvents((char *)data);
|
||||
}
|
||||
|
||||
void storeEvents(char *events){
|
||||
Serial.printf("events at entry to storeEvents method: %s \n", events);
|
||||
//break events up into an array of ints
|
||||
int len = 0;
|
||||
String testString = String(events);
|
||||
int stringLength = testString.length();
|
||||
Serial.printf("stringLength: %i \n", stringLength);
|
||||
|
||||
char tempEvents[stringLength+1];
|
||||
testString.toCharArray(tempEvents, stringLength+1);
|
||||
Serial.printf("tempEvents: %s \n", tempEvents);
|
||||
char * pch = strtok (tempEvents, ",");
|
||||
while (pch != NULL)
|
||||
{
|
||||
len++;
|
||||
pch = strtok (NULL, ",");
|
||||
}
|
||||
Serial.printf("len: %i \n", len);
|
||||
|
||||
int eventArray[len];
|
||||
Serial.printf("events before going to split: %s \n", events);
|
||||
splitStringToIntArray(events, eventArray, ",");
|
||||
|
||||
for(unsigned int i = 1; i < len*4;i+=4){
|
||||
Serial.printf("Storing %i in location %i \n", eventArray[(i-1)/4], i);
|
||||
EEPROM.put(i, eventArray[(i-1)/4]);
|
||||
}
|
||||
readStoredEvents();
|
||||
}
|
||||
|
||||
void readStoredEvents(){
|
||||
int stopIndex = 0;
|
||||
for(int i = 1; i < 2048; i++){
|
||||
if(EEPROM.read(i) != 255){
|
||||
stopIndex++;
|
||||
}
|
||||
}
|
||||
if(stopIndex == 0){
|
||||
Serial.println("No Stored Events");
|
||||
return;
|
||||
}
|
||||
unsigned char bytes[4];
|
||||
bytes[0] = (2016 >> 24) &0xFF;
|
||||
bytes[1] = (2016 >> 16) &0xFF;
|
||||
bytes[2] = (2016 >> 8) &0xFF;
|
||||
bytes[3] = 2016&0xFF;
|
||||
Serial.printf("%i, %i, %i, %i \n", bytes[0], bytes[1], bytes[2], bytes[3]);
|
||||
int locationTest;
|
||||
EEPROM.get(1, locationTest);
|
||||
Serial.printf("location test %i \n",locationTest);
|
||||
int locationTest2;
|
||||
EEPROM.get(5, locationTest2);
|
||||
Serial.printf("location test 2 %i \n", locationTest2);
|
||||
Serial.printf("stopIndex: %i \n" , stopIndex);
|
||||
|
||||
numberOfEvents = stopIndex/36;
|
||||
Serial.printf("numberOfEvents: %i \n", numberOfEvents);
|
||||
|
||||
int startIndex = 1;
|
||||
for(int eventIndex = 0; eventIndex < numberOfEvents; eventIndex++){
|
||||
Serial.printf("Event at location %i: ",eventIndex);
|
||||
for(int i = startIndex; i < startIndex+36; i+=4){
|
||||
EEPROM.get(i, eventArray[eventIndex][(i-1)/4]);
|
||||
Serial.printf("%i, ", eventArray[eventIndex][(i-1)/4]);
|
||||
}
|
||||
Serial.printf("Event at location %i: ",eventIndex);
|
||||
Serial.println();
|
||||
startIndex+=36;
|
||||
}
|
||||
Serial.printf("2numberOfEvents: %i \n", numberOfEvents);
|
||||
}
|
||||
|
||||
int setZone(String zone){
|
||||
int tZone = zone.toInt();
|
||||
EEPROM.write(0, tZone);
|
||||
tZone = tZone * -1;
|
||||
Time.zone(tZone);
|
||||
process = true;
|
||||
return 1;
|
||||
}
|
||||
|
||||
void evalTime(int year, int month, int dayOfMonth, int dayOfWeek, int hour, int minute, int second){
|
||||
//Cycle through stored events and compare to current date/time.
|
||||
for(int i = 0; i < numberOfEvents; i++){
|
||||
bool runCommand = true;
|
||||
|
||||
//Check Year
|
||||
if(eventArray[i][0] != year){
|
||||
//Year does not match and is required
|
||||
if(eventArray[i][0] != 0){
|
||||
runCommand = false;
|
||||
}
|
||||
|
||||
}
|
||||
//Check Month
|
||||
if(eventArray[i][1] != month){
|
||||
//Month does not match and is required
|
||||
if(eventArray[i][1] != 0){
|
||||
runCommand = false;
|
||||
}
|
||||
}
|
||||
//Check Day of Month
|
||||
if(eventArray[i][2] != dayOfMonth){
|
||||
//Day of Month does not match and is required
|
||||
if(eventArray[i][2] != 0){
|
||||
runCommand = false;
|
||||
}
|
||||
}
|
||||
//Check Day of Week
|
||||
if(eventArray[i][3] != dayOfWeek){
|
||||
//Day of Week does not match and is required
|
||||
if(eventArray[i][3] != 0){
|
||||
runCommand = false;
|
||||
}
|
||||
}
|
||||
//Check Hour
|
||||
if(eventArray[i][4] != hour){
|
||||
//Hour does not match and is required
|
||||
if(eventArray[i][4] != 24){
|
||||
runCommand = false;
|
||||
}
|
||||
}
|
||||
//Check Minute
|
||||
if(eventArray[i][5] != minute){
|
||||
//Minute does not match and is required
|
||||
if(eventArray[i][5] != 60){
|
||||
runCommand = false;
|
||||
}
|
||||
}
|
||||
//Check Second
|
||||
if(eventArray[i][6] != second){
|
||||
//Second does not match and is required
|
||||
if(eventArray[i][6] != 60){
|
||||
runCommand = false;
|
||||
}
|
||||
}
|
||||
|
||||
if(runCommand){
|
||||
Serial.println("Running command");
|
||||
executeCommand(eventArray[i][7], eventArray[i][8]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void splitStringToIntArray(char *s, int *buffer, String del){
|
||||
int index = 0;
|
||||
|
||||
Serial.printf("s in splitString method: %s \n", s);
|
||||
|
||||
char * pch = strtok (s, del);
|
||||
while (pch != NULL)
|
||||
{
|
||||
String pchString = String(pch);
|
||||
buffer[index] = pchString.toInt();
|
||||
Serial.printf("buffer[%i] = %i \n",index,pchString.toInt());
|
||||
index++;
|
||||
pch = strtok (NULL, del);
|
||||
}
|
||||
}
|
||||
|
||||
int clearMemory(String nothing){
|
||||
for(int i = 0; i < 2048; i++){
|
||||
EEPROM.write(i, 255);
|
||||
}
|
||||
}
|
||||
|
||||
int serialPrintMemory(String nothing){
|
||||
for(int i = 0; i < 2048; i++){
|
||||
Serial.print(EEPROM.read(i));
|
||||
Serial.print(" ");
|
||||
if(i != 0 && i%15 == 0){
|
||||
Serial.println();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void executeCommand(int commandID, int commandData){
|
||||
switch(commandID){
|
||||
case 0:
|
||||
//Turn On All Relays
|
||||
controller.turnOnAllRelays();
|
||||
break;
|
||||
case 1:
|
||||
//Turn Off All Relays
|
||||
controller.turnOffAllRelays();
|
||||
break;
|
||||
case 2:
|
||||
//Set bank Status
|
||||
controller.setBankStatus(commandData);
|
||||
break;
|
||||
case 3:
|
||||
//Turn On Relay #
|
||||
controller.turnOnRelay(commandData);
|
||||
break;
|
||||
case 4:
|
||||
//Turn Off Relay #
|
||||
controller.turnOffRelay(commandData);
|
||||
break;
|
||||
case 5:
|
||||
//Toggle Relay #
|
||||
controller.toggleRelay(commandData);
|
||||
break;
|
||||
}
|
||||
}
|
||||
Loading…
Reference in a new issue