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);
}
	
 
					