aboutsummaryrefslogtreecommitdiff
path: root/libraries/Bridge/examples
diff options
context:
space:
mode:
Diffstat (limited to 'libraries/Bridge/examples')
-rw-r--r--libraries/Bridge/examples/Bridge/Bridge.ino94
1 files changed, 76 insertions, 18 deletions
diff --git a/libraries/Bridge/examples/Bridge/Bridge.ino b/libraries/Bridge/examples/Bridge/Bridge.ino
index 848cc4e..c4f71db 100644
--- a/libraries/Bridge/examples/Bridge/Bridge.ino
+++ b/libraries/Bridge/examples/Bridge/Bridge.ino
@@ -1,32 +1,90 @@
#include <Bridge.h>
-void brk() {
- Bridge.print((char)3);
-}
-
void setup() {
pinMode(13,OUTPUT);
digitalWrite(13, LOW);
Bridge.begin();
digitalWrite(13, HIGH);
-
- delay(2000);
- int handle = Bridge.beginCommand("curl");
- Bridge.commandAddEscapedParam("http://arduino.cc/asciilogo.txt");
- Bridge.endCommand();
-
- while (Bridge.commandIsRunning(handle))
- delay(250);
-
- int size = Bridge.commandOutputSize(handle);
- char buff[20];
- Bridge.readCommandOutput(handle, 0, size, buff);
- buff[size]=0;
- Bridge.print(buff);brk();
}
void loop() {
+ while (Bridge.messageAvailable()) {
+ uint8_t buff[64];
+ int l = Bridge.readMessage(buff, 64);
+ process(buff, l);
+ }
+ delay(100); // Poll every 0.100s
+}
+
+void process(uint8_t buff[], int l) {
+ // "DWppv" -> digitalWrite(pp, v)
+ // "DRpp" -> digitalRead(pp) -> "Dpp0" / "Dpp1"
+ // "AWppvvv" -> analogWrite(pp, vvv)
+ // "ARpp" -> analogRead(pp) -> "App0000" - "App1023"
+ // "PIpp" -> pinMode(pp, INPUT)
+ // "POpp" -> pinMode(pp, OUTPUT)
+
+ // Sanity check
+ if (l<4 || l>7)
+ return;
+ if (buff[2]<'0' || buff[2]>'9')
+ return;
+ if (buff[3]<'0' || buff[3]>'9')
+ return;
+ char cmd0 = buff[0];
+ char cmd1 = buff[1];
+ int pin = (buff[2]-'0')*10 + (buff[3]-'0');
+ if (pin<0 || pin>13)
+ return;
+
+ // Command selection
+ if (l==5 && cmd0=='D' && cmd1=='W') {
+ char c = buff[4];
+ if (c=='0' || c=='1')
+ digitalWrite(pin, c-'0');
+ } else if (l==4 && cmd0=='D' && cmd1=='R') {
+ reportDigitalRead(pin, true, true);
+ } else if (l==7 && cmd0=='A' && cmd1=='W') {
+ analogWrite(pin, buff[4]);
+ } else if (l==4 && cmd0=='A' && cmd1=='R') {
+ reportAnalogRead(pin);
+ } else if (l==4 && cmd0=='P' && cmd1=='I') {
+ pinMode(pin, INPUT);
+ } else if (l==4 && cmd0=='P' && cmd1=='O') {
+ pinMode(pin, OUTPUT);
+ }
+}
+
+void reportDigitalRead(int pin, boolean raw, boolean dataset) {
+ // "Dpp0" - "Dpp1"
+ // 0 1 2 3
+ uint8_t buff[] = { 'D', '0', '0', '0' };
+ buff[1] += pin/10;
+ buff[2] += pin%10;
+ if (digitalRead(pin) == HIGH)
+ buff[3] = '1';
+ if (raw)
+ Bridge.writeMessage(buff, 4);
+ if (dataset) {
+ char *val = "0";
+ val[0] = buff[3];
+ buff[3] = 0;
+ Bridge.put((const char *)buff, val);
+ }
}
+void reportAnalogRead(int pin) {
+ // "App0000" - "App1023"
+ // 0 1 2 3 4 5 6
+ uint8_t buff[] = { 'A', '0', '0', '0', '0', '0', '0' };
+ buff[1] += pin/10;
+ buff[2] += pin%10;
+ int v = analogRead(pin);
+ buff[6] += v%10; v /= 10;
+ buff[5] += v%10; v /= 10;
+ buff[4] += v%10; v /= 10;
+ buff[3] += v;
+ Bridge.writeMessage(buff, 7);
+} \ No newline at end of file