aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCristian Maglie <c.maglie@bug.st>2013-07-01 19:12:42 +0200
committerCristian Maglie <c.maglie@bug.st>2013-07-01 19:12:49 +0200
commit92ea15d31740bd5f6458410f4b95f5f89aa33de4 (patch)
tree85fb8aa55ca70efede7690afd0757fc735a659b4
parentef0f1e593f7af6463642154ec1eb675e1231cb45 (diff)
Added example BridgeNew
-rw-r--r--libraries/Bridge/examples/BridgeNew/BridgeNew.ino177
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);
+}
+
+