Alpha Rex 2.1

Programmation en NXC (extraits) :

// Jambe droite : Moteur B + Capteur de contact 1
#define RIGHT_MOTOR         OUT_B
#define RIGHT_TOUCH         S1
#define RIGHT_TOUCH_VAL     SENSOR_1  // Valeur de S1

// Jambe gauche : Moteur C + Capteur de contact 2
#define LEFT_MOTOR          OUT_C
#define LEFT_TOUCH          S2
#define LEFT_TOUCH_VAL      SENSOR_2  // Valeur de S2

// Les 2 jambes à la fois
#define MOTORS              OUT_BC

// Marche avant / arrière
#define FORWARDS 1
#define BACKWARDS 2

// Les autres capteurs utilisés ///////////////////////////////

// Capteur ultrasonique
#define ULTRASONIC          S4
#define ACTIVE_DISTANCE 30

// IMU (Inertial Motion Unit)
// https://www.dexterindustries.com/manual/imu-sensor/
#define IMU                 S3
#define IMU_ACC_ADDR 0x3A
#define IMU_GYR_ADDR 0xD2

// Les autres capteurs potentiels /////////////////////////////

// Capteur de couleurs
#define COLOR               S3
#define COLOR_VAL           SENSOR_3  // Valeur de S3

// Capteur de sons
#define SOUND               S4
#define SOUND_VAL           SENSOR_4  // Valeur de S4
void walkAngle (int direction, long angle) {
  
  ResetTachoCount(MOTORS);
  switch (direction) {
    case FORWARDS:
      // Les moteurs avancent synchronisés à la vitesse de 50 %
      OnFwdReg(MOTORS, 50, OUT_REGMODE_SYNC);
      while (MotorTachoCount(RIGHT_MOTOR) != angle);
      break;
    case BACKWARDS:
      // Les moteurs reculent synchronisés à la vitesse de 50 %
      OnRevReg(MOTORS, 50, OUT_REGMODE_SYNC);
      while (MotorTachoCount(RIGHT_MOTOR) != -angle);
      break;
  }
  Off(MOTORS);
}
void walkDuration (int direction, unsigned long duration) {

  unsigned long t0 = CurrentTick();  // Renvoie le temps en ms
  switch (direction) {
    case FORWARDS:
      // Les moteurs avancent synchronisés à la vitesse de 50 %
      OnFwdReg(MOTORS, 50, OUT_REGMODE_SYNC);
      while (CurrentTick () - t0 < duration);
      break;
    case BACKWARDS:
      // Les moteurs reculent synchronisés à la vitesse de 50 %
      OnRevReg(MOTORS, 50, OUT_REGMODE_SYNC);
      while (CurrentTick () - t0 < duration);
      break;
  }
  Off(MOTORS);
}

Laisser un commentaire