Ejemplo n.º 1
0
void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
{
    int i;
    int boardNum = 0;
    int ULStat;
    int reward;
    LARGE_INTEGER frequency;        // ticks per second
    char ErrMsg[ERRSTRLEN];
    float duration;
    
    // get ticks per second
    QueryPerformanceFrequency(&frequency);

    if (nrhs > 0)
    {
        duration = *mxGetPr(prhs[0]);
    }
    else
    {
        duration = 10;
    }

    ULStat = cbDOut(boardNum, AUXPORT,8);
    waitMS(duration,frequency);
    ULStat = cbDOut(boardNum, AUXPORT,0);

    return;
}
DCMotorCommand::~DCMotorCommand(void)
{
	for(int i = 0; i < numMotors; i++) {
		cbVOut(BoardNumVoltage, 2 * i, voltageGain, 0, Options);
	}

	cbDOut(BoardNumVoltage, 1, 0);

}
int DCMotorCommand::TurnAmplifiersOff()
{
	for (int i = 0; i < numMotors; i++) {
		*(motorVoltages + i) = 0;
	}
	SendVoltageArrayOut(motorVoltages);
	cbDOut(BoardNumVoltage, 1, 0);
	bIsAmplifiersOn = false;
	return 0;
}
DCMotorCommand::DCMotorCommand(void)
{
	numMotors = 7;
	BoardNumVoltage = 0;
	Options = DEFAULTOPTION;
	voltageGain = UNI10VOLTS;
	minVoltage = 0.0;
	maxVoltage = 2.0;
	bIsAmplifiersOn = false;
	
	// Initializing VoltageOut modules
	for(int i = 0; i < numMotors; i++) {
		cbVOut(BoardNumVoltage, 2 * i, voltageGain, 0, Options);
	}

	// Configuring Digital Outputs
	cbDConfigPort(BoardNumVoltage, 1, DIGITALOUT);
	cbDOut(BoardNumVoltage, 1, 0);

}
int DCMotorCommand::TurnAmplifiersOn()
{
	cbDOut(BoardNumVoltage, 1, 255);
	bIsAmplifiersOn = true;
	return 0;
}
Ejemplo n.º 6
0
void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
{
    int i;
    int boardNum = 0;
    int ULStat;
    int lowPort,highPort,strobePort;
    LARGE_INTEGER frequency;        // ticks per second
    double* doubleData;
    mxChar * charData;
    double waitTimeMS1,waitTimeMS2;

    /* These variables set the lag between bit flips (ms) */
    /* 20-50 uS is the range needed for the Ripple system */
    /* faster than that will likely cause dropped codes */
    waitTimeMS1 = 0.050; /* between setting bits and the strobe */
    waitTimeMS2 = 0.050; /* between setting the strobe to 1 and back to 0 */

    // get ticks per second
    QueryPerformanceFrequency(&frequency);

    lowPort = FIRSTPORTA;
    highPort = FIRSTPORTB;
    strobePort = FIRSTPORTC;

    ULStat = cbDConfigPort (boardNum, lowPort, DIGITALOUT);
    ULStat = cbDConfigPort (boardNum, highPort, DIGITALOUT);
    ULStat = cbDConfigPort (boardNum, strobePort, DIGITALOUT);

    if (nrhs > 0)
    {
        switch (mxGetClassID(prhs[0]))
        {
        case mxDOUBLE_CLASS:
            doubleData = mxGetPr(prhs[0]);

            for (i = 0; i < mxGetNumberOfElements(prhs[0]); i++)
            {
                ULStat = cbDOut(boardNum, lowPort, ((int)doubleData[i]) % 256);
                ULStat = cbDOut(boardNum, highPort, ((int)doubleData[i]) / 256);
                waitMS(waitTimeMS1,frequency);
                ULStat = cbDOut(boardNum, strobePort,1);
                waitMS(waitTimeMS2,frequency);
                ULStat = cbDOut(boardNum, strobePort,0);
            }
            break;
        case mxCHAR_CLASS:
            charData = (mxChar*)mxGetData(prhs[0]);

            for (i = 0; i < mxGetNumberOfElements(prhs[0]); i++)
            {
                ULStat = cbDOut(boardNum, lowPort, charData[i]);
                waitMS(waitTimeMS1,frequency);
                ULStat = cbDOut(boardNum, strobePort, 1);
                waitMS(waitTimeMS2,frequency);
                ULStat = cbDOut(boardNum, strobePort, 0);
            }
            break;
        default:
            mexPrintf("Sorry, this data type cannot be transmitted.\n");
            mexEvalString("drawnow;");
        }
    }

    return;
}