-
Notifications
You must be signed in to change notification settings - Fork 0
/
RouterReset_shield_speaker.ino
138 lines (117 loc) · 3.16 KB
/
RouterReset_shield_speaker.ino
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
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
/*** RouterReset: test if internet is working; if not, reset router
*
* Karlduino, Dec 2013
*
* Parts taken from Arduino wifi examples:
* WifiWebClient by dlf, srl, and Tom Igoe
* SD/Datalogger by Tom Igoe
*
***/
#include <SPI.h>
#include <WiFi.h>
#include <SD.h>
// private info
char ssid[] = "Br0man";
char pass[] = "4106620554";
// end of private info
char server[] = "www.google.com";
//IPAddress server(74,125,225,113); // numeric IP for google
//IPAddress server(192,168,1,155); // numeric IP that doesn't work
WiFiClient client;
// checking connection
unsigned long lastConnectionTime = 0;
#define postingInterval 10000
boolean canConnect = false;
boolean canConnect_prev = false;
// LED pins
#define redLed 3
#define greenLed 5
#define yellowLed 6
#define routerPin1 8
#define routerPin2 9
#define resetRouter_nTones 30
#define speakerPin 2
#define errorFreq 220
void setup() {
// Initial LEDs
pinMode(redLed, OUTPUT);
pinMode(greenLed, OUTPUT);
pinMode(yellowLed, OUTPUT);
pinMode(routerPin1, OUTPUT);
pinMode(routerPin2, OUTPUT);
digitalWrite(routerPin1, HIGH);
digitalWrite(routerPin2, HIGH);
// check for the presence of the shield:
if (WiFi.status() == WL_NO_SHIELD) {
while (true); // stop
}
String fv = WiFi.firmwareVersion();
// attempt to connect to Wifi network:
while (WiFi.begin(ssid, pass) != WL_CONNECTED) delay(1000);
// setup SD card and log file
pinMode(10, OUTPUT);
while(!SD.begin(chipSelect)) error_tone(2, 250, 250);
char filename[] = "wifi_log.txt";
logfile = SD.open(filename, FILE_WRITE);
logfile.println("\nStart up -");
logfile.flush();
error_tone(4, 250, 250);
}
void loop() {
// if there are incoming bytes available
// from the server, read them and print them:
while (client.available()) {
client.stop();
}
if(!client.connected() && (millis() - lastConnectionTime > postingInterval)) {
digitalWrite(yellowLed, HIGH);
connect_to_server();
digitalWrite(yellowLed, LOW);
}
if(canConnect) {
digitalWrite(greenLed, HIGH);
digitalWrite(redLed, LOW);
}
else {
digitalWrite(greenLed, LOW);
digitalWrite(redLed, HIGH);
resetRouter();
}
if(canConnect != canConnect_prev) {
if(!canConnect) logfile.print("not ");
logfile.println("connected");
logfile.flush();
canConnect_prev = canConnect;
}
}
void connect_to_server(void) {
if (client.connect(server, 80)) {
canConnect = true;
client.println("GET /search?q=arduino HTTP/1.1");
client.println("Host: www.google.com");
client.println("Connection: close");
client.println();
}
else {
client.stop();
canConnect = false;
}
lastConnectionTime=millis();
}
void resetRouter(void) {
digitalWrite(routerPin1, LOW);
digitalWrite(routerPin2, LOW);
error_tone(resetRouter_nTones, 700, 300);
digitalWrite(routerPin1, HIGH);
digitalWrite(routerPin2, HIGH);
error_tone(resetRouter_nTones, 700, 300);
}
void error_tone(unsigned int n_times, unsigned int on_time, unsigned int off_time)
{
for(int i=0; i<n_times; i++) {
tone(speakerPin, errorFreq);
delay(on_time);
noTone(speakerPin);
delay(off_time);
}
}