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