Help with loop

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);
}

How do denPing(), marPing(), etc. differ? Why do you need 4 identical functions?

How do denEndPing(), marEndPint(), etc. differ? Why do you need 4 identical functions?

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.

I'm pretty sure that it has to do with the fact that pin 10 is the chip select pin for the Ethernet shield.

Thank you for the info! This is my first project and really my first programming experience. I have attached an picture of the project that may better explain what I am trying to accomplish.

Basically a green and red LED for each IP. Green illuminated when ping is successful, red if it fails. I then have one yellow LED that blinks when pings are sent.

You need to pay attention to what pins are being used by the hardware you are using. The Ethernet shield uses pins 10, 11, 12, and 13. If you use the SD card on the shield, pin 4 is not available for you to use, either.

All that #define/#ifdef stuff is not the way to go, in my opinion. Using booleans to define what to do at run time makes more sense to me.

Thank you for your help! I was able to get the LEDs blinking the way I wanted with your advice. I will be working on booleans as you suggested.

Again, thank you for taking the time to help a NOOB!