diff options
-rw-r--r-- | libraries/Bridge/examples/BootWatcher001/BootWatcher001.ino | 90 | ||||
-rw-r--r-- | libraries/Bridge/examples/Bridge/Bridge.ino | 240 | ||||
-rw-r--r-- | libraries/Bridge/examples/BridgeNew/BridgeNew.ino | 174 |
3 files changed, 132 insertions, 372 deletions
diff --git a/libraries/Bridge/examples/BootWatcher001/BootWatcher001.ino b/libraries/Bridge/examples/BootWatcher001/BootWatcher001.ino deleted file mode 100644 index 7833d54..0000000 --- a/libraries/Bridge/examples/BootWatcher001/BootWatcher001.ino +++ /dev/null @@ -1,90 +0,0 @@ - -/* - Arduino Yun Boot watcher - - Allows you to use the Yun's 32U4 processor as a - serial terminal for the linino processor - - Upload this to an Arduino Yun via serial (not WiFi) - then open the serial monitor at 115200 to see the boot process - of the linino processor. You can also use the serial monitor - as a basic command line interface for the linino processor using - this sketch. - - The circuit: - * Arduino Yun - - created March 2013 - by Massimo Banzi - modified 26 May 2013 - by Tom Igoe - - This example code is in the public domain. - */ - -long baud = 115200; - -// Pin 13 has an LED connected on most Arduino boards. -// give it a name: -int led = 13; -int ledState = HIGH; // whether the LED is high or low - -String bootString = ""; -int bootLineCount = 0; -boolean booting = true; - -void setup() { - Serial.begin(baud); // open serial connection to Linino - Serial1.begin(baud); // open serial connection via USB-Serial - - // initialize the digital pin as an output. - pinMode(led, OUTPUT); - digitalWrite(led, ledState); // turn the LED on (HIGH is the voltage level) - while(booting) { - listenForBoot(); - } - delay(500); -} - - -void loop() { - // After booting, become a serial terminal: - if (Serial.available()) { // got anything from USB-Serial? - char c = (char)Serial.read(); // read from USB-serial - Serial1.write(c); // write to Linino - ledState=!ledState; // invert LED state - digitalWrite(led, ledState); // toggle the LED - } - if (Serial1.available()) { // got anything from Linino? - char c = (char)Serial1.read(); // read from Linino - Serial.write(c); // write to USB-serial - } - -} - -void listenForBoot() { - char c; - if (Serial1.available()) { // got anything from Linino? - c = (char)Serial1.read(); // read from Linino - - if (c == '\n') { // clear the bootString every newline - bootLineCount++; // increment the boot line counter - Serial.println(bootLineCount); // print the count - bootString = ""; // clear the boot string - } - else { // anything other than newline, add to string - bootString += c; - } - } - - // look for the final boot string message: - if (bootString.endsWith("entered forwarding state")) { - Serial1.println(); - } - - // look for the command prompt: - if (bootString.endsWith(":/#")) { - Serial.println("Ready for action."); - booting = false; - } -} diff --git a/libraries/Bridge/examples/Bridge/Bridge.ino b/libraries/Bridge/examples/Bridge/Bridge.ino index c7627b2..eceab07 100644 --- a/libraries/Bridge/examples/Bridge/Bridge.ino +++ b/libraries/Bridge/examples/Bridge/Bridge.ino @@ -1,150 +1,174 @@ -//#include <Bridge.h> -#include <Mailbox.h> +// 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 default port 5555, the webserver on the Yun +// will forward there all the HTTP requests for us. +YunServer server; void setup() { + Serial.begin(9600); + + // Bridge startup pinMode(13,OUTPUT); digitalWrite(13, LOW); Bridge.begin(); digitalWrite(13, HIGH); - Serial.begin(9600); + + // Listen for incoming connection only from localhost + // (no one from the external network could connect) + server.listenOnLocalhost(); + server.begin(); } void loop() { - while (Mailbox.messageAvailable()) { - String msg; - Mailbox.readMessage(msg); - process(msg); + // 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(100); // Poll every 0.100s + + delay(50); // Poll every 50ms } -void process(String command) { - Serial.println(command); - // "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) - - // is digital command? - if (command.startsWith("digital/")) { - // extract subcommand (after the "/") - command = command.substring(8); - digitalCommand(command); +void process(YunClient client) { + // read the command + String command = client.readStringUntil('/'); - } - // is analog command? - else if (command.startsWith("analog/")) { - // extract subcommand (after the "/") - command = command.substring(7); - analogCommand(command); + // is "digital" command? + if (command == "digital") { + digitalCommand(client); + } - } - // is mode command? - else if (command.startsWith("mode/")) { - // extract subcommand (after the "/") - command = command.substring(5); - modeCommand(command); + // is "analog" command? + if (command == "analog") { + analogCommand(client); + } + + // is "mode" command? + if (command == "mode") { + modeCommand(client); } } -void digitalCommand(String command) { +void digitalCommand(YunClient client) { int pin, value; - // Find the position of the "/" inside the command - int slashIndex = command.indexOf("/"); + // Read pin number + pin = client.parseInt(); - // If there are no slashes - if (slashIndex == -1) { - // then we are in the following case: - // "digital/13" -> digitalRead(13) - - // so we can extract the pin number from the remainder of the command string - pin = command.toInt(); + // 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 { - // else, we found a slash, so we are in the following case: - // "digital/13/1" -> digitalWrite(13, HIGH) - - // we must estract pin number before the "/" - pin = command.substring(0, slashIndex).toInt(); - // and value after the "/" - value = command.substring(slashIndex+1).toInt(); - digitalWrite(pin, value); + value = digitalRead(pin); } - reportDigitalRead(pin, true); + + // 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(String command) { +void analogCommand(YunClient client) { int pin, value; - if (command.indexOf("/") != -1) { - pin = command.substring(0, command.indexOf("/")).toInt(); - value = command.substring(command.indexOf("/") + 1, command.length()).toInt(); + + // 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); - } - else { - pin = command.toInt(); - } - reportAnalogRead(pin, true); -} -void modeCommand(String command) { - int pin; - String strValue; - pin = command.substring(0, command.indexOf("/")).toInt(); - strValue = command.substring(command.indexOf("/") + 1, command.length()); - if (strValue == "output") { - pinMode(pin, OUTPUT); - reportPinMode(pin, strValue); - } - else if (strValue == "input") { - pinMode(pin, INPUT); - reportPinMode(pin, strValue); + // 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); -void reportPinMode(int pin, String mode) { - String json = "{\"pin\":"; - json += pin; - json += ", \"mode\": \""; - json += mode; - json += "\"}"; - Mailbox.writeJSON(json); + // Update datastore key with the current pin value + String key = "A"; + key += pin; + Bridge.put(key, String(value)); + } } -void reportDigitalRead(int pin, boolean dataset) { - int value = digitalRead(pin); +void modeCommand(YunClient client) { + int pin; - String json = "{\"pin\":"; - json += pin; - json += ", \"value\": "; - json += value; - json += "}"; - Mailbox.writeJSON(json); + // Read pin number + pin = client.parseInt(); - if (dataset) { - String key = "D"; - key += pin; - Bridge.put(key.c_str(), String(value).c_str()); + // If the next character is not a '/' we have a malformed URL + if (client.read() != '/') { + client.println(F("error")); + return; } -} -void reportAnalogRead(int pin, boolean dataset) { - int value = analogRead(pin); + String mode = client.readStringUntil('\r'); - String json = "{\"pin\":"; - json += pin; - json += ", \"value\": "; - json += value; - json += "}"; - Mailbox.writeJSON(json); + 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 (dataset) { - String key = "A"; - key += pin; - Bridge.put(key.c_str(), String(value).c_str()); + 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); } + diff --git a/libraries/Bridge/examples/BridgeNew/BridgeNew.ino b/libraries/Bridge/examples/BridgeNew/BridgeNew.ino deleted file mode 100644 index eceab07..0000000 --- a/libraries/Bridge/examples/BridgeNew/BridgeNew.ino +++ /dev/null @@ -1,174 +0,0 @@ - -// 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 default port 5555, the webserver on the Yun -// will forward there all the HTTP requests for us. -YunServer server; - -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) { - // 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); -} - - |