Mindstorms 3rd Party ROBOTC Drivers RobotC
[Home] [Download] [Submit a bug/suggestion] [ROBOTC Forums] [Blog] [Support this project]

holitdata-motormux-test2.c

#pragma config(Sensor, S1,     HDMMUX,              sensorI2CCustomFastSkipStates)
//*!!Code automatically generated by 'ROBOTC' configuration wizard               !!*//

/*
 * $Id: holitdata-motormux-test2.c 133 2013-03-10 15:15:38Z xander $
 */

/**
 * holitdata-motormux.h provides an API for the Holit Data Systems Motor MUX. This program
 * demonstrates how to use that API to control the motors attached to the MUX.
 *
 * Changelog:
 * - 0.1: Initial release
 * - 0.2: Removed common.h from list of includes
 *
 * Credits:
 * - Big thanks to Holit Data Systems for providing me with the hardware necessary to write and test this.
 *
 * License: You may use this code as you wish, provided you give credit where it's due.
 *
 * THIS CODE WILL ONLY WORK WITH ROBOTC VERSION 3.59 AND HIGHER. 

 * Xander Soldaat (xander_at_botbench.com)
 * 14 February 2011
 * version 0.2
 */

#include "drivers/holitdata-motormux.h"

task main () {
  long encA  = 0;
  long encB  = 0;
  long encC  = 0;

  long timer = 0;

  ubyte motorStatus = 0;
  string motorAstatus;
  bool done = false;

  eraseDisplay();

  // Initialise all the internal variables
  HDMMUXinit();

  // Reset the encoders.  This can be done individually or all at once.
  // You should do this at the start of your program.
  HDMMotorEncoderResetAll(HDMMUX);

  // You can specify the type of braking that should be used when the motors
  // are sent the stop command.  The default is to use brake.
  HDMMotorSetBrake(mmotor_S1_1);

  // Specify a motor 1 to run for 2.5 seconds.
  HDMMotorSetTimeTarget(mmotor_S1_1, 2.50);

  // Tell the motors to start moving.
  HDMMotor(mmotor_S1_1, 50);

  // Reset the timer
  time1[T1] = 0;
  // Give the motor time to get started
  wait1Msec(50);
  while (!done) {
    // Retrieve the motor-MUX's status info and encoder counts
                HDMMUXreadStatus(HDMMUX, motorStatus, encA, encB, encC);

                // Use the HDMMotorBusy() function to see if a motor is busy or idle.
          motorAstatus = HDMMotorBusy(mmotor_S1_1) ? "busy" : "idle";
                if (!HDMMotorBusy(mmotor_S1_1) && timer == 0) {
                  timer = time1[T1];
                  nxtDisplayTextLine(0,"Time: %dms", timer);
                  done = true;
                }

                // Display the info.
                nxtDisplayTextLine(6, "B: %5d (%s)", encB, motorAstatus);
    EndTimeSlice();
  }
  wait1Msec(5000);
}

/*
 * $Id: holitdata-motormux-test2.c 133 2013-03-10 15:15:38Z xander $
 */