Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 2

#pragma config(Sensor, S1,  

  Colision,       sensorTouch)
#pragma config(Sensor, S2,     Giroscopio,     sensorI2CHiTechnicGyro)
#pragma config(Sensor, S3,     Luz,            sensorLightActive)
#pragma config(Sensor, S4,     Ultrasonido,    sensorSONAR)
#pragma config(Motor,  motorA,          Garra,         tmotorNXT,
PIDControl, encoder)
#pragma config(Motor,  motorB,          MotorDer,      tmotorNXT,
PIDControl, driveRight, encoder)
#pragma config(Motor,  motorC,          MotorIzq,      tmotorNXT,
PIDControl, driveLeft, encoder)

void mover_distancia(float distancia, int velocidad=50)


{
nMotorEncoder[MotorDer]=0;
nMotorEncoder[MotorIzq]=0;
nMotorPIDSpeedCtrl[MotorDer] = mtrSpeedReg;
  nSyncedMotors = synchBC;
  nSyncedTurnRatio = 100;
  float recorrido=0;
  motor[MotorDer] = velocidad;
  while (recorrido<distancia)
  {
          recorrido=(nMotorEncoder[MotorDer]*2*PI*2.74)/360;
  }
  motor[MotorDer] =0;
motor[MotorIzq] =0;
}
///  angulo >0  -> giro horario -> derecha
///  angulo <0  -> giro antihorario -> izquierda
void girar(int angulo,int velocidad=20)
{
int anterior=SensorValue(Giroscopio);
int angulo1=angulo;
  nMotorPIDSpeedCtrl[MotorDer] = mtrSpeedReg;
  nSyncedMotors = synchBC;
  nSyncedTurnRatio = -100;
  int grados=0;
  angulo=angulo*10;
  anterior=anterior+angulo;
  angulo=anterior;
  if(angulo1>=0)// sentido horario
  {
           motor[MotorDer] = -velocidad;
           grados=SensorValue(Giroscopio);
           while (grados<angulo)
           {
             grados=SensorValue(Giroscopio);
           }
           motor[MotorDer] = 0;
           motor[MotorIzq] = 0;
           return;
  }
  else  // sentido antihorario
  {
          motor[MotorDer] = velocidad;
          grados=SensorValue(Giroscopio);
           while (grados>angulo)
           {
             grados=SensorValue(Giroscopio);
           }
           motor[MotorDer] = 0;
           motor[MotorIzq] = 0;
           return;
  }
}

task main()
{
mover_distancia(70,60);
girar(-75,60);
mover_distancia(70,60);
girar(80,60);
mover_distancia(70,60);
girar(80,60);
mover_distancia(30,60);
}

You might also like