示例#1
0
void braccio(int nSteps, int mBaseDest, int m1Dest, int m2Dest, int m3Dest, int mRotPinzaDest, int mPinzaDest){

    if ( (m1Att!=m1Dest) || \
		(m2Att!=m2Dest) || \
		(m3Att!=m3Dest) || \
		(mRotPinzaAtt!=mRotPinzaDest) || \
		(mPinzaAtt!=mPinzaDest) || \
		(mBaseAtt!=mBaseDest) ){

        float mBaseStep = ( (float)mBaseAtt-(float)mBaseDest) / nSteps;
        float m1Step = ( (float)m1Att-(float)m1Dest) / nSteps;
        float m2Step = ( (float)m2Att-(float)m2Dest) / nSteps;
        float m3Step = ( (float)m3Att-(float)m3Dest) / nSteps;
        float mRotPinzaStep = ( (float)mRotPinzaAtt-(float)mRotPinzaDest) / nSteps;
        float mPinzaStep = ( (float)mPinzaAtt-(float)mPinzaDest) / nSteps;

        int i;
        for(i = 0; i<nSteps; i++){
            setPwmValue(CH_PINZA, mPinzaAtt);
            setPwmValue(CH_ROT_PINZA, mRotPinzaAtt);
            setPwmValue(CH_ROT_BASE, mBaseAtt);
            setPwmValue(CH_M1, m1Att);
            setPwmValue(CH_M2, m2Att);
            setPwmValue(CH_M3, m3Att);
            mBaseAtt -= mBaseStep;
            m1Att -= m1Step;
            m2Att -= m2Step;
            m3Att -= m3Step;
            mRotPinzaAtt -= mRotPinzaStep;
            mPinzaAtt -= mPinzaStep;
            usleep(10);
        }
    }
    //fix possible error in division of float
    mBaseAtt = mBaseDest;
    m1Att = m1Dest;
    m2Att = m2Dest;
    m3Att = m3Dest;
    mRotPinzaAtt = mRotPinzaDest;
    mPinzaAtt = mPinzaDest;

    setPwmValue(CH_ROT_BASE, mBaseAtt);
    setPwmValue(CH_M1, m1Att);
    setPwmValue(CH_M2, m2Att);
    setPwmValue(CH_M3, m3Att);
    setPwmValue(CH_ROT_PINZA, mRotPinzaAtt);
    setPwmValue(CH_PINZA, mPinzaAtt);
}
示例#2
0
void main(void) {

  

  int t=15;
  /* include your code here */
  
  f1.functionId=ULTRASONIC_FRONT;
  f1.status=READY;
  f1.root=UNIQUE_FUNCTION;
  f1.timerCount=50;
  
  DisableInterrupts;
  InitReg();  
  InitClock();
  InitComunication();  
  InitPorts();
  InitInputCompare();
  
  InitKbi();
  beginComunication();
  initExecutingVector();
  InitBuffer(&bufferIn);
  InitBuffer(&bufferOut);
  InitPwm();
  InitADC();  
  EnableInterrupts;
  InitRtc();
  /*  
    despues de habilitar interrupciones y
    antes de empezar a mover el robot debe calibrar sensores de meta
    no arrancar el motor sin antes ejecutar initGoalSensor()! 
  */
  initGoalSensor();

  
  setPwmValue(t);
  
  if(t>35){
    kbiSampleFreq=1000;
  }else{
    kbiSampleFreq=1000+((35-t)*200);
  }
  

  
  for(;;) {
  if(goalStatus == 0){
  
    PTDD_PTDD1;
    
    setGoalMode(STOP_ON_GOAL);
    
    SENTIDO_M1_1=1;
    SENTIDO_M1_2=0;
    
    
    SENTIDO_M2_1=1;
    SENTIDO_M2_2=0;  
    
    SENSOR_DE_META_ON;
    PTDD_PTDD0=1;

    
    /*
    functionHandler();
    dispatcher(&executingVector,&bufferOut);
    frameGenerator();*/
     /* f1.functionId=ULTRASONIC_FRONT;
      f1.status=READY;
      getUltrasonic(&f1);
      
      while(f1.status!=AVAILABLE);
      t=3000;
      while(t!=0){
        t--;
      } */
      
      /*
      f1.functionId=ULTRASONIC_FRONT;
      f1.status=READY;
      f1.root=UNIQUE_FUNCTION;
      f1.timerCount=50;
      getUltrasonic(&f1);
      
      while(f1.status!=AVAILABLE);
      t=3000;
      while(t!=0){
        t--;
      } */
      /*
      f1.functionId=ULTRASONIC_RIGHT;
      f1.status=READY;
      getUltrasonic(&f1);
      
      while(f1.status!=AVAILABLE);
      t=30000;
      while(t!=0){
        t--;
      } */
      
    } /* loop forever */
  } 
  /* please make sure that you never leave main */
}