XY Plotter/CNC style interpolation project. Need great deal of help

stimmer, sirbow, wildbill --- thanks for all your help so far!

I am getting a readout for xpos and ypos, but now that I have fixed the xIs0 == true to xIs0 = true, the switches seem to be seriously misbehaving. I am not sure what's going on, but they seem to constantly read out high.

/* Stepper Motor Controller ;  language: Wiring/Arduino
 This program drives a unipolar or bipolar stepper motor.  by Tom Igoe */
/* significant help from arduino forum superstars: sirbow2, stimmer
*/

#include <Stepper.h>

#define motorSteps 200     // change this depending on the number of steps
#define motor2Steps 200     // change this depending on the number of steps
// per revolution of your motor


#define motorPin1 2
#define motorPin2 3
#define motorPin3 4
#define motorPin4 5
#define motorPin6 8
#define motorPin7 9
#define motorPin8 10
#define motorPin9 11


int reading = 0;
int previous = LOW;
long time = 0;         // the last time the output pin was toggled
long debounce = 50;   // the debounce time, increase if the output flickers
int state = HIGH;    

//set pin numbers

int xStopMax = A1;
int xStopMin = A0;
int yStopMin = A3;
int yStopMax = A2;



int xPos;
int yPos;
boolean xIs0;
boolean xIsMax;
boolean yIs0;
boolean yIsMax;


// initialize of the Stepper library:
Stepper yAxis(motorSteps, motorPin1,motorPin2, motorPin3, motorPin4); 
Stepper xAxis(motor2Steps, motorPin6,motorPin7, motorPin8, motorPin9); 




void setup() {

  // set the motor speed at 60 RPMS:
  xAxis.setSpeed(60); //x
  yAxis.setSpeed(60); //y

  //set limit switches to analog inputs
  pinMode(xStopMin, INPUT);
  pinMode(xStopMax, INPUT);
  pinMode(yStopMin, INPUT); 
  pinMode(yStopMax, INPUT);
  
  xPos = 0;
  yPos = 0;

  // Initialize the Serial port:
  Serial.begin(9600);
}

void loop() {
  //check limit switches
  if(digitalRead(xStopMin) == HIGH){
 
    
    xIs0 = true;  
    xPos = 0;
    Serial.println("xMin");
  }
  else xIs0 = false;

 
 
  if(digitalRead(xStopMax) == HIGH){
    xIsMax = true;  
    Serial.println("xMax");
  }
  else xIsMax = false;

  if(digitalRead(yStopMin) == HIGH){
    yIs0 = true;  
    Serial.println("yMin");
    yPos = 0;
    
   }
  else yIs0 = false;

  if(digitalRead(yStopMax) == HIGH){
    yIsMax = true;  
    Serial.println("yMax");
  }
  else yIsMax = false;



  char val=0;
  if(Serial.available()) val = Serial.read();

  //keyboard control  
  switch(val){
  case 'N':
    Serial.read();
      moveN(200);
    break;

  case 'S':
    Serial.read();
      moveS(200);
    break;

  case 'E':
    Serial.read();
      moveE(200);
    break;

  case 'W':
    Serial.read();
      moveW(200);
    break; 



    //diagonal (moving motors almost at the same time)      
  case 'J': //NE
    Serial.read();
          moveNE(200);
    break;
  case 'H': //NW
     Serial.read();
          moveNW(200);
    break;

  case 'X': //SE
    Serial.read();
          moveSE(200);
    break;
  case 'Z': //SW
     Serial.read();
          moveSW(200);
    break;

  case 'C': //SW
     Serial.read();
          moveCirc();
    break;
  
  
  //resets
  case 'Q': //reset to 0,0 
     Serial.read();
         moveN(100);
         moveE(100);
     break;
     


 //debugs
   case 'P':
     Serial.read();
       Serial.print("x position: ");
       Serial.println(xPos);
       Serial.println("y position: ");
       Serial.println(yPos);
    break;

  default:
    Serial.read();
    delay(10);
    break;
  }
}
//movement functions

  //first, str  aight up down left right
void moveE(int numSteps){
    int s = 0;
    while(!digitalRead(xStopMax)&& s<numSteps)//checks the button each step, also checks to see if it has moved s amount of steps
    {
          xAxis.step(1);
          s++;
      }  
      delay(100);    
     xPos += numSteps;
     Serial.println(xPos);
     Serial.println(yPos);
 }
 

void moveW(int numSteps){
     int s = 0;
    while(!digitalRead(xStopMin)&& s<numSteps)//checks the button each step, also checks to see if it has moved s amount of steps
    {
          xAxis.step(-1);
          s++;
      }  
      delay(100);    
    xPos -= numSteps;
}

void moveN(int numSteps){
   int s = 0;
    while(!digitalRead(yStopMax)&& s<numSteps)//checks the button each step, also checks to see if it has moved s amount of steps
    {
          yAxis.step(-1);
          s++;
      }  
      delay(100);    
    yPos += numSteps;
}  
   
void moveS(int numSteps){
  int s = 0;
    while(!digitalRead(yStopMin)&& s<numSteps)//checks the button each step, also checks to see if it has moved s amount of steps
    {
          yAxis.step(1);
          s++;
      }  
      delay(100);    
    yPos -= numSteps;
}    

//diagonals
void moveNE(int numSteps){    
  int s=0; 
  while(!digitalRead(xStopMax) && !digitalRead(yStopMin) && s<numSteps); 
    for(int s=0; s<numSteps; s++)
    {
        yAxis.step(-1);
        xAxis.step(1);
      }
   xPos += numSteps;
   yPos -= numSteps;
 }  
 

void moveSE(int numSteps){
   int s=0; 
  while(!digitalRead(xStopMax) && !digitalRead(yStopMax) && s<numSteps); 
    for(int s=0; s<numSteps; s++)
    {
        yAxis.step(1);
        xAxis.step(1);
      }
   xPos += numSteps;
   yPos += numSteps;
 }  
  
  
void moveSW(int numSteps){
  int s=0; 
    while(!digitalRead(xStopMin) && !digitalRead(yStopMax) && s<numSteps); 
      for(int s=0; s<numSteps; s++)
      {
          yAxis.step(1);
          xAxis.step(-1);
        }
   xPos -= numSteps;
   yPos += numSteps;
    }  
void moveNW(int numSteps){
  int s=0; 
    while(!digitalRead(xStopMin) && !digitalRead(yStopMin) && s<numSteps); 
      for(int s=0; s<numSteps; s++)
      {
          yAxis.step(-1);
          xAxis.step(-1);
        }
   xPos -= numSteps;
   yPos -= numSteps;
    }  

void moveCirc(){
   //draw circle at x,y 50,50
    int CircleXCenter = 2;
    int CircleYCenter = 2; 
    int CurXPos = xPos; //where the platform currently is in X
    int CurYPos = yPos; //where the platform currently is in Y
    int Rad = 1;
    
    
    
    
    for (int i = 0; i < 360; i++)
      {
    //it does this for each point of the circle, so you dont have to run them at the same time
       float 
       angle = i*2*3.14/360;
        xPos = CircleXCenter + (cos(angle) * Rad);
        yPos = CircleYCenter + (sin(angle) * Rad);
        if(CurXPos < xPos)
         {
           
               xAxis.step(xPos - CurXPos);
              //movexnow = Xpos - CurXPos;
          }
       else
       {
               xAxis.step(xPos - CurXPos); 
           //MoveXNow = CurXPos - Xpos; 
       }
       
        if(CurYPos < yPos)
        {
               yAxis.step(yPos - CurYPos); 
             //   MoveYNow = Ypos - CurYPos;
        }
       else
       {
               yAxis.step(yPos - CurYPos
               ); 
             //MoveYNow = CurYPos - Ypos; 
       }
    
      // step(xAxis);
       //step(yAxis);
      
                 //<100, so -1 
       if(i == (360-1)) //we are at end of for loop, save current position.
       {
           CurYPos = yPos;
           CurXPos = xPos ; 
       }
    
      }
      
}