Still having trouble with digital reads

I posted this last week and changed my inputs to be INPUT_PULLUP and set the software to look for a LOW signal. Which works great when I just a little jumper from ground to pins 2-7 my corisponding outputs go low triggering pins 8-13 so when 2 is low pin 8 goes low and fires a relay, 3 goes low and fires 9 low and so on. My problem is when I actually attach my wire to my switch out in the field and trigger a contact closure on pin 2 all outputs go low? what am I missing. Do i need a resister some where. I am using this 4 channel relay board, 4 Channel 5V Relay Module - Wiki , it says it only need 15-20ma of current per relay so if all 4 are fired it is only drawing 80ma of power so i should be under what the limit of 200ma is. Here is my code, i am at a lost as to why a contact closure would cause this to happen but when I remove the wire and just jump to ground i dont have any issues? Sorry to be a pain but cannot wrap my head around what the difference is?

const int INPUTPINFIRST = 2;
const int INPUTPINLAST = 7;
const int OUTPUTPINFIRST = 8;
const int OUTPUTPINLAST = 13;

int pinWaitingFor = INPUTPINFIRST;
int soundTriggerCurrPin = OUTPUTPINFIRST;

void setup() {
  // put your setup code here, to run once:
  // Set up the pins for input.
  for ( int li_LoopPinIdx = INPUTPINFIRST ; li_LoopPinIdx <= INPUTPINLAST ; li_LoopPinIdx++ )
  {
    pinMode ( li_LoopPinIdx , INPUT_PULLUP);
  }

  // Set up the pings for output.
  for ( int li_LoopPinIdx = OUTPUTPINFIRST; li_LoopPinIdx <= OUTPUTPINLAST ; li_LoopPinIdx++ )
  {
    pinMode ( li_LoopPinIdx , OUTPUT);
  }

  // Set up the output pins as HIGH.
  for ( int li_LoopPinIdx = OUTPUTPINFIRST; li_LoopPinIdx <= OUTPUTPINLAST ; li_LoopPinIdx++ )
  {
    digitalWrite ( li_LoopPinIdx , HIGH);
  }

}

void loop() {
  // Read the input pin.
  int buttonState = digitalRead (pinWaitingFor );
  // Did they trigger it>'
  if ( buttonState == LOW )
  {
    // Does this pin need a delay?
    if ( pinWaitingFor == INPUTPINFIRST )
    {
      // Delay to let everyone in.
      delay ( 100 );
    }
    // Fire the sound.
  PinTemporarilyLow ( soundTriggerCurrPin );
    // Set up for the next sound.
    soundTriggerCurrPin++;
    // Set up for next pin.
    pinWaitingFor++;
    // Are we out of pings?
    if ( pinWaitingFor > INPUTPINLAST )
    {
      // Exit the loop.
      exit;
    } // End of if ( pinWaitingFor > INPUTPINLAST )
  } // End of if ( buttonState == HIGH )
} // End of loop ()

void PinTemporarilyLow ( int pinNumber )
{
  // Set the pin low.
  digitalWrite ( pinNumber , LOW );
  // Wait 1/10th of a second.;
}

Please edit your post and add code tags

Type
** **[code]** **
before your code
Type
** **[/code]** **
after your code

What is the distance from the switches to the Arduino?

Ok I edited it.

So in my head when i create a contact closure on pin 2 to ground it is pulling all pins to ground causing all output pins to go low also as far as I can create. I have 4 switches in the field about 40' away and if I only have one side hooked up to pin 2 and the other side of the switch to ground i can get pin 8 to fire low. As soon as i add the other switch to pin 3 is when all heck breaks loose and will fire remaining output pins. I can test it with my multi meter and it is open with no voltage and i get continuity when i turn the key. So what i can test works but i don't understand why when i hook up the physical switch it causes the issue.

if ( pinWaitingFor > INPUTPINLAST )
    {
      // Exit the loop.
      exit;
    }

What the heck is exit? The loop function will end when it gets to the end of the function or when it hits a return statement. Since that is the last line in loop, it would be redundant either way. The loop function exits on the next line anyway.

Once pinWaitingFor gets up to INPUTPINLAST you don't have any code to set it back down to INPUTPINFIRST so it will be stuck there only reading the last pin every time.

You have a similar problem with the sound trigger output pin. You keep incrementing it but never check to make sure the value is in range. So eventually it will go off into pin numbers that don't exist.