// 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; }
int Solid::OpticalDrive::writeSpeed() const { Q_D(const OpticalDrive); return_SOLID_CALL(Ifaces::OpticalDrive *, d->backendObject(), 0, writeSpeed()); }