diff options
Diffstat (limited to 'libraries/Bridge/examples/BridgeNew')
-rw-r--r-- | libraries/Bridge/examples/BridgeNew/BridgeNew.ino | 177 |
1 files changed, 177 insertions, 0 deletions
diff --git a/libraries/Bridge/examples/BridgeNew/BridgeNew.ino b/libraries/Bridge/examples/BridgeNew/BridgeNew.ino new file mode 100644 index 0000000..0f9f86a --- /dev/null +++ b/libraries/Bridge/examples/BridgeNew/BridgeNew.ino @@ -0,0 +1,177 @@ + +// Possible commands are listed here: +// +// "digital/13" -> digitalRead(13) +// "digital/13/1" -> digitalWrite(13, HIGH) +// "analog/2/123" -> analogWrite(2, 123) +// "analog/2" -> analogRead(2) +// "mode/13/input" -> pinMode(13, INPUT) +// "mode/13/output" -> pinMode(13, OUTPUT) + +#include <Bridge.h> +#include <YunServer.h> + +// Listen on port 5555, the webserver on the Yun +// will forward there all the HTTP requests for us. +YunServer server(5555); + +void setup() { + Serial.begin(9600); + + // Bridge startup + pinMode(13,OUTPUT); + digitalWrite(13, LOW); + Bridge.begin(); + digitalWrite(13, HIGH); + + // Listen for incoming connection only from localhost + // (no one from the external network could connect) + server.listenOnLocalhost(); + server.begin(); +} + +void loop() { + // Get clients coming from server + YunClient client = server.accept(); + + // There is a new client? + if (client) { + // Process request + process(client); + + // Close connection and free resources. + client.stop(); + } + + delay(50); // Poll every 50ms +} + +void process(YunClient client) { + // discard the first slash '/' character from the URL + client.read(); + + // read the command + String command = client.readStringUntil('/'); + + // is "digital" command? + if (command == "digital") { + digitalCommand(client); + } + + // is "analog" command? + if (command == "analog") { + analogCommand(client); + } + + // is "mode" command? + if (command == "mode") { + modeCommand(client); + } +} + +void digitalCommand(YunClient client) { + int pin, value; + + // Read pin number + pin = client.parseInt(); + + // If the next character is a '/' it means we have an URL + // with a value like: "/digital/13/1" + if (client.read() == '/') { + value = client.parseInt(); + digitalWrite(pin, value); + } + else { + value = digitalRead(pin); + } + + // Send feedback to client + client.print(F("Pin D")); + client.print(pin); + client.print(F(" set to ")); + client.println(value); + + // Update datastore key with the current pin value + String key = "D"; + key += pin; + Bridge.put(key, String(value)); +} + +void analogCommand(YunClient client) { + int pin, value; + + // Read pin number + pin = client.parseInt(); + + // If the next character is a '/' it means we have an URL + // with a value like: "/analog/5/120" + if (client.read() == '/') { + // Read value and execute command + value = client.parseInt(); + analogWrite(pin, value); + + // Send feedback to client + client.print(F("Pin D")); + client.print(pin); + client.print(F(" set to analog ")); + client.println(value); + + // Update datastore key with the current pin value + String key = "D"; + key += pin; + Bridge.put(key, String(value)); + } + else { + // Read analog pin + value = analogRead(pin); + + // Send feedback to client + client.print(F("Pin A")); + client.print(pin); + client.print(F(" reads analog ")); + client.println(value); + + // Update datastore key with the current pin value + String key = "A"; + key += pin; + Bridge.put(key, String(value)); + } +} + +void modeCommand(YunClient client) { + int pin; + + // Read pin number + pin = client.parseInt(); + + // If the next character is not a '/' we have a malformed URL + if (client.read() != '/') { + client.println(F("error")); + return; + } + + String mode = client.readStringUntil('\r'); + + if (mode == "input") { + pinMode(pin, INPUT); + // Send feedback to client + client.print(F("Pin D")); + client.print(pin); + client.print(F(" configured as INPUT!")); + return; + } + + if (mode == "output") { + pinMode(pin, OUTPUT); + // Send feedback to client + client.print(F("Pin D")); + client.print(pin); + client.print(F(" configured as OUTPUT!")); + return; + } + + client.print(F("error: invalid mode ")); + client.print(mode); +} + + |