1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
|
/*
Wifi Signal Strength Indicator
This example demonstrates the use of the bridge and process libraries
to communicate between the Arduino side and the linux side of the Arduino Yun.
The Linux script returns the strength of the wifi signal.
The Arduino sketch uses LEDs to indicate whether the current value of
the signal strength is above, below, or the same as the last value
The circuit:
* LEDs on pins 8, 9, and 10
* Built-in LED on pin 13
The script:
The following one line script must exist in the /root directory of the
linux file system, in a file named "wifiStrength.sh", and it must be executable:
tail -1 /proc/net/wireless | cut -c22-23
created 06 June 2013
by Michael Shiloh
modified 08 June 2013
by Tom Igoe
This example code is in the public domain
*/
#include <Process.h>
// global variable to store the last value of the signal strength
int lastValue;
void setup() {
// set up LED pins as outputs:
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
pinMode(13,OUTPUT);
// Indicate that you're ready by flashing pin 13 LED twice
for (int flash = 0; flash < 3; flash++) {
digitalWrite(13,HIGH);
delay(200);
digitalWrite(13,LOW);
delay(800);
}
// initialize Serial and Bridge:
Serial.begin(9600);
Bridge.begin();
// Indicate that setup is finished
digitalWrite(13,HIGH);
}
void loop() {
int value = 0; // the signal strength as an integer
String result; // the result of the process as a String
Process wifiCheck; // the process itself
// Run the script on the linux side. Note that any word
//or text separated by a tab or space is considered
//an additional parameter:
wifiCheck.begin("ash");
wifiCheck.addParameter("/root/wifiStrength.sh");
wifiCheck.run();
// If the process has sent any characters:
while (wifiCheck.available()>0) {
result = wifiCheck.readString(); // read the result into a string
value = result.toInt(); // parse the string as an int
}
// for debugging
Serial.print("previous strength:");
Serial.print(lastValue);
Serial.print("\tcurrent strength:");
Serial.println(value);
// indicate the relative string by lighting the appropriate LED
allOff(); // turn off all the LEDS
if (value > lastValue) { // if the signal's getting stronger
digitalWrite(10, HIGH);
}
else if (value < lastValue){ // if the signal's getting weaker
digitalWrite(8, HIGH);
}
else { // if the signal's stayed steady
digitalWrite(9, HIGH);
}
lastValue = value; // record this value for next time
delay(10); // small delay before next time through the loop
}
void allOff() {
digitalWrite(8, LOW);
digitalWrite(9, LOW);
digitalWrite(10, LOW);
}
|