1 | /*
|
---|
2 |
|
---|
3 | This sketch uses the restserver connector receive rest calls. It allows access to
|
---|
4 | the analog and digital pin of the board via rest calls.
|
---|
5 |
|
---|
6 | supported boards: Yun,Tian.
|
---|
7 |
|
---|
8 | Possible commands to send from the xmpp client:
|
---|
9 |
|
---|
10 | * "/arduino/digital/PIN" -> to read a digital PIN
|
---|
11 | * "/arduino/digital/PIN/VALUE" -> to write a digital PIN (VALUE: 1/0)
|
---|
12 | * "/arduino/analog/PIN/VALUE" -> to write in a PWM PIN(VALUE range: 0 - 255);
|
---|
13 | * "/arduino/analog/PIN" -> to read a analog PIN
|
---|
14 | * "/arduino/servo/PIN/VALUE" -> to write angle in a SERVO PIN(VALUE range: 0 - 180);
|
---|
15 | * "/arduino/mode/PIN/VALUE" -> to set the PIN mode (VALUE: input / output)
|
---|
16 |
|
---|
17 | Example:
|
---|
18 | "/arduino/mode/13/output" -> pinMode(13, OUTPUT)
|
---|
19 | "/arduino/digital/13/1" -> digitalWrite(13, HIGH)
|
---|
20 |
|
---|
21 |
|
---|
22 | NOTE: be sure to activate and configure restserver connector on Linino OS
|
---|
23 | http://labs.arduino.org/Ciao
|
---|
24 |
|
---|
25 | created September 2015
|
---|
26 | by andrea[at]arduino[dot]org
|
---|
27 |
|
---|
28 | */
|
---|
29 |
|
---|
30 | #include <Ciao.h>
|
---|
31 | #include <Servo.h>
|
---|
32 |
|
---|
33 | Servo servo;
|
---|
34 |
|
---|
35 | void setup() {
|
---|
36 |
|
---|
37 | Ciao.begin();
|
---|
38 | }
|
---|
39 |
|
---|
40 | void loop() {
|
---|
41 |
|
---|
42 | CiaoData data = Ciao.read("restserver");
|
---|
43 | if(!data.isEmpty()){
|
---|
44 | String id = data.get(0);
|
---|
45 | String sender = data.get(1);
|
---|
46 | String message = data.get(2);
|
---|
47 |
|
---|
48 | message.toUpperCase();
|
---|
49 |
|
---|
50 | String command[3];
|
---|
51 |
|
---|
52 | splitString(message,"/",command,3);
|
---|
53 | execute(command,id);
|
---|
54 |
|
---|
55 | }
|
---|
56 | }
|
---|
57 |
|
---|
58 | void execute(String cmd[], String id) {
|
---|
59 |
|
---|
60 | if (cmd[0] == "DIGITAL") {
|
---|
61 | digitalCommand(cmd,id);
|
---|
62 | }
|
---|
63 | else if (cmd[0] == "ANALOG") {
|
---|
64 | analogCommand(cmd,id);
|
---|
65 | }
|
---|
66 | else if (cmd[0] == "SERVO") {
|
---|
67 | servoCommand(cmd,id);
|
---|
68 | }
|
---|
69 | else if (cmd[0] == "MODE") {
|
---|
70 | setMode(cmd,id);
|
---|
71 | }
|
---|
72 | else
|
---|
73 | Ciao.writeResponse("restserver",id,"sorry, i don't understand :(");
|
---|
74 | }
|
---|
75 |
|
---|
76 | void servoCommand(String cmd[], String id){
|
---|
77 | int pin, value;
|
---|
78 |
|
---|
79 | pin = (cmd[1]).toInt();
|
---|
80 |
|
---|
81 | if (cmd[2] != "-1") {
|
---|
82 | value = (cmd[2]).toInt();
|
---|
83 | if(value <= 180 && value >=0){
|
---|
84 | servo.attach(pin);
|
---|
85 | servo.write(value);
|
---|
86 | Ciao.writeResponse("restserver",id,"Servo D"+String(pin)+" set to "+String(value)+" degrees");
|
---|
87 | }
|
---|
88 | else
|
---|
89 | Ciao.writeResponse("restserver",id,"Invalid angle value");
|
---|
90 | }
|
---|
91 | else
|
---|
92 | Ciao.writeResponse("restserver",id,"Invalid command");
|
---|
93 | }
|
---|
94 |
|
---|
95 | void digitalCommand(String cmd[], String id) {
|
---|
96 | int pin, value;
|
---|
97 |
|
---|
98 | pin = (cmd[1]).toInt();
|
---|
99 |
|
---|
100 | if (cmd[2] != "-1") {
|
---|
101 | value = (cmd[2]).toInt();
|
---|
102 | digitalWrite(pin, value);
|
---|
103 | if (value == 1)
|
---|
104 | Ciao.writeResponse("restserver",id,"Pin D"+String(pin)+" ON");
|
---|
105 | else if(value == 0)
|
---|
106 | Ciao.writeResponse("restserver",id,"Pin D"+String(pin)+" OFF");
|
---|
107 | }
|
---|
108 | else if (cmd[2] == "-1") {
|
---|
109 | value = digitalRead(pin);
|
---|
110 | Ciao.writeResponse("restserver",id,"D"+String(pin)+" value = "+String(value));
|
---|
111 | }
|
---|
112 | }
|
---|
113 |
|
---|
114 | void analogCommand(String cmd[], String id) {
|
---|
115 | int pin, value;
|
---|
116 |
|
---|
117 | pin = (cmd[1]).toInt();
|
---|
118 |
|
---|
119 | if (cmd[2] != "-1") {
|
---|
120 | value =(cmd[2]).toInt();
|
---|
121 | analogWrite(pin, value);
|
---|
122 | Ciao.writeResponse("restserver",id,"D"+String(pin)+" set to analog");
|
---|
123 | }
|
---|
124 | else if (cmd[2] == "-1") {
|
---|
125 | value = analogRead(pin);
|
---|
126 | Ciao.writeResponse("restserver",id,"A"+String(pin)+" value = "+String(value));
|
---|
127 | }
|
---|
128 | }
|
---|
129 |
|
---|
130 | void setMode(String cmd[], String id) {
|
---|
131 | int pin;
|
---|
132 |
|
---|
133 | pin = (cmd[1]).toInt();
|
---|
134 |
|
---|
135 | if (cmd[2] == "INPUT") {
|
---|
136 | pinMode(pin, INPUT);
|
---|
137 | Ciao.writeResponse("restserver",id," pin D"+String(pin)+" set in INPUT mode");
|
---|
138 | return;
|
---|
139 | }
|
---|
140 |
|
---|
141 | if (cmd[2] == "OUTPUT") {
|
---|
142 | pinMode(pin, OUTPUT);
|
---|
143 | Ciao.writeResponse("restserver",id," pin D"+String(pin)+" set in OUTPUT mode");
|
---|
144 | return;
|
---|
145 | }
|
---|
146 | Ciao.writeResponse("restserver",id,"invalid mode");
|
---|
147 | }
|
---|