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