commit 06548b211405ea8bd632d3c1f6ee430bb5b35e79 Author: James Devine Date: Wed Jan 17 22:57:49 2018 +0100 diff --git a/RelayStatusControl.ino b/RelayStatusControl.ino new file mode 100644 index 0000000..0e2b8aa --- /dev/null +++ b/RelayStatusControl.ino @@ -0,0 +1,117 @@ +// ----------------------------------- +// Controlling LEDs over the Internet +// ----------------------------------- + +// First, let's create our "shorthand" for the pins +// Same as in the Blink an LED example: +// led1 is D0, led2 is D7 + +int Relay1 = D4; +int Relay2 = D5; +int StatusLED = D7; +// Last time, we only needed to declare pins in the setup function. +// This time, we are also going to register our Particle function + +void setup() +{ + + // Here's the pin configuration, same as last time + pinMode(Relay1, OUTPUT); + pinMode(Relay2, OUTPUT); + pinMode(StatusLED, OUTPUT); + + // We are also going to declare a Particle.function so that we can turn the LED on and off from the cloud. + Particle.function("Relay1",Relay1Toggle); + Particle.function("Relay2",Relay2Toggle); + Particle.function("StatusLED",StatusLEDToggle); + // This is saying that when we ask the cloud for the function "led", it will employ the function ledToggle() from this app. + + // For good measure, let's also make sure both LEDs are off when we start: + digitalWrite(Relay1, LOW); + digitalWrite(Relay2, LOW); + digitalWrite(StatusLED, LOW); + + +} + + +// Last time, we wanted to continously blink the LED on and off +// Since we're waiting for input through the cloud this time, +// we don't actually need to put anything in the loop + +void loop() +{ + // Nothing to do here +} + +// We're going to have a super cool function now that gets called when a matching API request is sent +// This is the ledToggle function we registered to the "led" Particle.function earlier. + + +int Relay1Toggle(String command) { + /* Particle.functions always take a string as an argument and return an integer. + Since we can pass a string, it means that we can give the program commands on how the function should be used. + In this case, telling the function "on" will turn the LED on and telling it "off" will turn the LED off. + Then, the function returns a value to us to let us know what happened. + In this case, it will return 1 for the LEDs turning on, 0 for the LEDs turning off, + and -1 if we received a totally bogus command that didn't do anything to the LEDs. + */ + + if (command=="on") { + digitalWrite(Relay1,HIGH); + return 1; + } + else if (command=="off") { + digitalWrite(Relay1,LOW); + return 0; + } + else { + return -1; + } +} + + +int Relay2Toggle(String command) { + /* Particle.functions always take a string as an argument and return an integer. + Since we can pass a string, it means that we can give the program commands on how the function should be used. + In this case, telling the function "on" will turn the LED on and telling it "off" will turn the LED off. + Then, the function returns a value to us to let us know what happened. + In this case, it will return 1 for the LEDs turning on, 0 for the LEDs turning off, + and -1 if we received a totally bogus command that didn't do anything to the LEDs. + */ + + if (command=="on") { + digitalWrite(Relay2,HIGH); + return 1; + } + else if (command=="off") { + digitalWrite(Relay2,LOW); + return 0; + } + else { + return -1; + } +} + + +int StatusLEDToggle(String command) { + /* Particle.functions always take a string as an argument and return an integer. + Since we can pass a string, it means that we can give the program commands on how the function should be used. + In this case, telling the function "on" will turn the LED on and telling it "off" will turn the LED off. + Then, the function returns a value to us to let us know what happened. + In this case, it will return 1 for the LEDs turning on, 0 for the LEDs turning off, + and -1 if we received a totally bogus command that didn't do anything to the LEDs. + */ + + if (command=="on") { + digitalWrite(StatusLED,HIGH); + return 1; + } + else if (command=="off") { + digitalWrite(StatusLED,LOW); + return 0; + } + else { + return -1; + } +}