Skip to content

Instantly share code, notes, and snippets.

@andyshinn
Created January 8, 2019 00:59
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save andyshinn/ef6ff5fb62be698b8ca414043e02c70f to your computer and use it in GitHub Desktop.
Save andyshinn/ef6ff5fb62be698b8ca414043e02c70f to your computer and use it in GitHub Desktop.
// This #include statement was automatically added by the Particle IDE.
#include <blynk.h>
// This #include statement was automatically added by the Particle IDE.
#include <RelayShield.h>
RelayShield myRelays;
LEDStatus blinkRed(RGB_COLOR_RED, LED_PATTERN_BLINK);
char auth[] = "e2f9e87c65c04d9f8ae6c05c46af0271";
int buttonOpen = A4;
int switchUpper = A5;
int switchLower = A4;
int switchUpperTrigger = LOW;
int switchLowerTrigger = LOW;
int buttonOpenState = LOW;
int doorRelay = 1;
int triggerDelay = 500;
int triggerHoldDown = 2000;
bool enabled = 1;
void setup() {
pinMode(buttonOpen, INPUT_PULLDOWN);
pinMode(switchUpper, INPUT_PULLDOWN);
pinMode(switchLower, INPUT_PULLDOWN);
Particle.function("doorTrigger", cloudTriggerRelay);
Particle.subscribe("doorTrigger", triggerHandler, MY_DEVICES);
Particle.variable("switchUpper", switchUpperTrigger);
Particle.variable("switchLower", switchLowerTrigger);
myRelays.begin();
delay(5000);
Blynk.begin(auth);
}
void loop() {
Blynk.run();
buttonOpenState = digitalRead(buttonOpen);
switchUpperTrigger = digitalRead(switchUpper);
switchLowerTrigger = digitalRead(switchLower);
if (buttonOpenState == HIGH) {
Particle.publish("triggerFrom", "buttonOpen");
triggerRelay(doorRelay);
}
}
BLYNK_WRITE(V1) {
int pinValue = param.asInt();
if (pinValue == 1) {
Particle.publish("triggerFrom", "blynk");
triggerRelay(doorRelay);
}
}
void triggerHandler(const char *event, const char *data) {
if (data) {
Particle.publish("triggerFrom", "subscribe");
triggerRelay(doorRelay);
}
}
int cloudTriggerRelay(String relay) {
int relayNumber = relay.charAt(1) - '0';
triggerRelay(relayNumber);
}
void triggerRelay(int relayNumber) {
int relayState = 0;
String message;
String messageEnabled = "enabled: triggered relay: ";
String messageDisabled = "enabled: triggered relay: ";
message = messageEnabled + String(relayNumber);
if (enabled) {
if (!switchUpperTrigger && !switchLowerTrigger) {
Particle.publish("relayTrigger", message);
myRelays.on(relayNumber);
delay(triggerDelay);
myRelays.off(relayNumber);
delay(triggerHoldDown);
} else {
Particle.publish("relayTrigger", "switches in bad state");
blinkRed.setActive(true);
delay(triggerDelay);
blinkRed.setActive(false);
}
} else {
message = messageDisabled + String(relayNumber);
Particle.publish("relayTrigger", message);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment