Beispiel #1
0
// Public Methods //////////////////////////////////////////////////////////////
uint8_t Finger::attach(uint8_t dir0, uint8_t dir1, uint8_t sense, bool inv)
{
    if (fingerIndex < MAX_FINGERS)
    {
        // configure pins
        pinMode(dir0, OUTPUT);                           // set direction1 pin to output
        pinMode(dir1, OUTPUT);                           // set direction2 pin to output
        pinMode(sense, INPUT);                           // set sense pin to input
        // attach all finger pins
        _fingers[fingerIndex].Pin.dir[0] = dir0;
        _fingers[fingerIndex].Pin.dir[1] = dir1;
        _fingers[fingerIndex].Pin.sns = sense;
        // enable the motor and disable finger inversion
        _fingers[fingerIndex].invert = inv;
        _fingers[fingerIndex].motorEn = true;
        // set limits and initial values
        setPosLimits(MIN_FINGER_POS,MAX_FINGER_POS);
        setSpeedLimits(MIN_FINGER_SPEED,MAX_FINGER_SPEED);
        writeSpeed(MAX_FINGER_SPEED);
        writePos(MIN_FINGER_POS);
        _fingers[fingerIndex].CurrDir = OPEN;					// set dir to OPEN after initial writePos to configure finger dir


        // if using the Atmega2560, set the PWM freq to > 20kHz to prevent humming
        setPWMFreq(dir0, 0x01);		// set PWM frequency to max freq
        setPWMFreq(dir1, 0x01);		// set PWM frequency to max freq

        // initialise the timer
        if(_timerSetupFlag == false)
        {
            _passMotorPtr(&fingerPosCtrl);
            _timerSetup();
            _timerSetupFlag = true;
        }
        _fingers[fingerIndex].Pin.isActive = true;		// this must be set after the check
    }

    return fingerIndex;
}
Beispiel #2
0
int Solid::OpticalDrive::writeSpeed() const
{
    Q_D(const OpticalDrive);
    return_SOLID_CALL(Ifaces::OpticalDrive *, d->backendObject(), 0, writeSpeed());
}