I have built a device to ping 4 servers and indicate reply status with either a green or red LED. My code came from the article posted here http://labby.co.uk/2012/08/arduino-visual-icmp-ping-server-monitor-icmp-echo-request/
The LED on pin 10 is always on except for the moment the corresponding server is successfully pinged. I am pretty sure it has something to do with the way the loop ends.
Any suggestions?
#include <SPI.h>
#include <Ethernet.h>
#include <ICMPPing.h>
byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED}; // mac address for ethernet shield
byte ip[] = {10,0,2,254}; // ip address for ethernet shield
byte pingAddr[] = {172,16,10,10}; //Denver Shoretel
byte pingAddr2[] = {10,31,13,11}; //Marin Shoretel
byte pingAddr3[] = {10,10,130,13}; //CoLo DC
byte pingAddr4[] = {8,8,8,8}; // Google DNS
SOCKET pingSocket = 0;
char buffer [256];
char buffer2 [256];
char buffer3 [256];
char buffer4 [256];
int delayMS = 1 * 1000; // delay between successive pings (60 * 1000 = 60 seconds)
#define serialOut 1
#define ledOut 1
#define ledOut2 1
#define ledOut3 1
#define ledOut4 1
#ifdef ledOut
#define ledPing 2
#define denUp 3
#define denDown 4
void denPing()
{
digitalWrite(ledPing, HIGH);
}
void denEndPing()
{
digitalWrite(ledPing, LOW);
}
void denSuccess()
{
digitalWrite(denDown, LOW);
digitalWrite(denUp, HIGH);
}
void denFail()
{
digitalWrite(denDown, HIGH);
digitalWrite(denUp, LOW);
}
#endif
#ifdef ledOut2
#define ledPing 2
#define marUp 5
#define marDown 6
void marPing()
{
digitalWrite(ledPing, HIGH);
}
void marEndPing()
{
digitalWrite(ledPing, LOW);
}
void marSuccess()
{
digitalWrite(marDown, LOW);
digitalWrite(marUp, HIGH);
}
void marFail()
{
digitalWrite(marDown, HIGH);
digitalWrite(marUp, LOW);
}
#endif
#ifdef ledOut3
#define ledPing 2
#define colUp 7
#define colDown 8
void colPing()
{
digitalWrite(ledPing, HIGH);
}
void colEndPing()
{
digitalWrite(ledPing, LOW);
}
void colSuccess()
{
digitalWrite(colDown, LOW);
digitalWrite(colUp, HIGH);
}
void colFail()
{
digitalWrite(colDown, HIGH);
digitalWrite(colUp, LOW);
}
#endif
#ifdef ledOut4
#define ledPing 2
#define gooUp 9
#define gooDown 10
void gooPing()
{
digitalWrite(ledPing, HIGH);
}
void gooEndPing()
{
digitalWrite(ledPing, LOW);
}
void gooSuccess()
{
digitalWrite(gooDown, LOW);
digitalWrite(gooUp, HIGH);
}
void gooFail()
{
digitalWrite(gooDown, HIGH);
digitalWrite(gooUp, LOW);
}
#endif
void setup()
{
#ifdef ledOut
pinMode(ledPing, OUTPUT);
pinMode(denUp, OUTPUT);
pinMode(denDown, OUTPUT);
// initialising, turn all LEDs on
digitalWrite(ledPing, HIGH);
digitalWrite(denUp, HIGH);
digitalWrite(denDown, HIGH);
#endif
#ifdef ledOut2
pinMode(ledPing, OUTPUT);
pinMode(marUp, OUTPUT);
pinMode(marDown, OUTPUT);
// initialising, turn all LEDs on
digitalWrite(marDown, HIGH);
digitalWrite(marUp, HIGH);
#endif
#ifdef ledOut3
pinMode(ledPing, OUTPUT);
pinMode(colUp, OUTPUT);
pinMode(colDown, OUTPUT);
// initialising, turn all LEDs on
digitalWrite(colDown, HIGH);
digitalWrite(colUp, HIGH);
#endif
#ifdef ledOut4
pinMode(ledPing, OUTPUT);
pinMode(gooUp, OUTPUT);
pinMode(gooDown, OUTPUT);
// initialising, turn all LEDs on
digitalWrite(gooDown, HIGH);
digitalWrite(gooUp, HIGH);
#endif
#ifdef serialOut
// start serial port:
Serial.begin(9600);
Serial.println("Starting ethernet connection");
#endif
// start Ethernet
if (Ethernet.begin(mac) == 0) {
#ifdef serialOut
Serial.println("Failed to configure Ethernet using DHCP");
#endif
// DHCP failed, so use a fixed IP address:
Ethernet.begin(mac, ip);
}
}
void loop()
{
bool pingRet; // pingRet stores the ping() success (true/false)
ICMPPing ping(pingSocket);
#ifdef ledOut
denPing();
#endif
pingRet = ping(4, pingAddr, buffer);
#ifdef ledOut
delay(250);
denEndPing();
#endif
#ifdef serialOut
Serial.println(buffer);
#endif
#ifdef ledOut
if(pingRet) // Failure
denSuccess();
else
denFail();
#endif
delay(delayMS);
#ifdef ledOut2
marPing();
#endif
pingRet = ping(4, pingAddr2, buffer2);
#ifdef ledOut2
delay(250);
marEndPing();
#endif
#ifdef serialOut
Serial.println(buffer2);
#endif
#ifdef ledOut2
if(pingRet) // Failure
marSuccess();
else
marFail();
#endif
delay(delayMS);
#ifdef ledOut3
colPing();
#endif
pingRet = ping(4, pingAddr3, buffer3);
#ifdef ledOut3
delay(250);
colEndPing();
#endif
#ifdef serialOut
Serial.println(buffer3);
#endif
#ifdef ledOut3
if(pingRet) // Failure
colSuccess();
else
colFail();
#endif
delay(delayMS);
#ifdef ledOut4
gooPing();
#endif
pingRet = ping(4, pingAddr4, buffer4);
#ifdef ledOut4
delay(250);
gooEndPing();
#endif
#ifdef serialOut
Serial.println(buffer4);
#endif
#ifdef ledOut4
if(pingRet) // Failure
gooSuccess();
else
gooFail();
#endif
delay(delayMS);
}
