aboutsummaryrefslogtreecommitdiff
path: root/libraries/Bridge/examples/WifiSignalStrengthIndicator/WifiSignalStrengthIndicator.ino
blob: e0b2d1f655db6223c93feef7e80e86cc8e223dbf (plain)
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); 
}