CCCPaste

IRSys.ino

// Include the Arduino Stepper Library
#include 
#include 

const int RECV_PIN = 2;
IRrecv irrecv(RECV_PIN);
decode_results results;
const int stepsPerRevolution = 200;

Stepper myStepper(stepsPerRevolution, 4,5,6,7);

int lim = 39; //lim is the max number of linear axis steps
int count = 0;
int minstep=28; //~2 degrees at28 to 30
int OldX=0;
int OldY=0;
int NewX=0;
int NewY=0;
int IsHome=0;
int buttonState = 0;

int nav(int x, int y);
int goHome();

void setup(){
  irrecv.enableIRIn(); // Start the receiver
  irrecv.blink13(true);
  
  myStepper.setSpeed(30);
pinMode(14, OUTPUT); //DC motor
pinMode(15, OUTPUT); //dc motor other direction
pinMode(10, INPUT_PULLUP);
  Serial.begin(9600);
  delay(6000);
//if(IsHome==0){
//goHome();
//}

}
  


void loop(){
  if (IrReceiver.decode())
   {
      Serial.println(IrReceiver.decodedIRData.command);
      if(IrReceiver.decodedIRData.command==21){
        goHome();
        //isHome now set to 1
        }
      if(IrReceiver.decodedIRData.command==64){
        //y axis +
         myStepper.step(10);
         
        }
      if(IrReceiver.decodedIRData.command==25){
        //move towards center
         myStepper.step(-10);
        }
      if(IrReceiver.decodedIRData.command==7){
        //counter clock wize
      analogWrite(14,0);
      analogWrite(15, 150); //motor beeps if its too low
      delay(30);
      analogWrite(15,0);
        }
      if(IrReceiver.decodedIRData.command==9){
        //step clockwize
          analogWrite(15,0);
      analogWrite(14, 150); //motor beeps if its too low
      delay(30);
      analogWrite(14,0);
      }
      IrReceiver.resume();
   }
} //end void loop()




int nav(int x, int y){
//x is infinite, y is limited. if y is negative the limit is 0.
// y is allso max limited at IDK, like 70 turns, so figure out the limit there too.
int difX=NewX-OldX;
int difY=NewY-OldY;

  if(NewX > OldX){
       analogWrite(14, 55); //motor beeps if its too low
delay(difX*60);
analogWrite(14,0);  
    }
   if(NewX < OldX){
      analogWrite(15, 55); //motor beeps if its too low
      delay(difX*60);
      analogWrite(15,0);
    }
   
    if(NewX == OldX){
       analogWrite(14,0);
       analogWrite(15,0);
      }

 if(NewY < OldY){
  if(difY<0){
    difY=0;
    goHome();
    }else{
     myStepper.step(difY);
  }
 }
 if(NewY > OldY){
     myStepper.step(difY);
  }
     if(NewY == OldY){
        myStepper.halt();
      }
 OldX=NewX;
OldY=NewY;

  return 0;
  }

int goHome(){
  buttonState = digitalRead(10);
while(buttonState==HIGH){
  //Serial.println("HIGH");
   myStepper.step(stepsPerRevolution); //going home
    Serial.println("High");

   buttonState = digitalRead(10);
  if(buttonState==LOW) {
  Serial.println("LOW");
     //move to center
   for (int i =0; i<20; i++){
   myStepper.step(-stepsPerRevolution);
   Serial.print("i step count: ");
   Serial.println(i);
  }
  myStepper.halt();
  IsHome=1;
  }
}
  return IsHome;
  }