public DcMotor(MotorHeaders header) { switch (header) { case MotorHeaders.M3: _motorBitA = (int)MotorBits.Motor3A; _motorBitB = (int)MotorBits.Motor3B; _pwm = new PWM(MotorShield.Pwm_0B); break; case MotorHeaders.M4: _motorBitA = (int)MotorBits.Motor4A; _motorBitB = (int)MotorBits.Motor4B; _pwm = new PWM(MotorShield.Pwm_0A); break; default: throw new InvalidOperationException("Invalid motor header specified."); } MotorShield.Instance.LatchState &= (byte)(~(1 << _motorBitA) & ~(1 << _motorBitB)); MotorShield.Instance.LatchTx(); _pwm.SetPulse(100, 0); }
/// <summary> /// A DC Motor controller /// </summary> /// <param name="header">The header to which the motor is connected</param> /// <param name="frequency">The PWM frequency (in Hz) at which to drive the motor. Defaults to 10kHz.</param> public DCMotor(MotorHeaders header, uint frequency = 10000) { switch (header) { /* * case MotorHeaders.M1: * motorBitA = (int)MotorBits.Motor1_A; * motorBitB = (int)MotorBits.Motor1_B; * pwm = new PWM(PwmPins.pwm2A); * break; * case MotorHeaders.M2: * motorBitA = (int)MotorBits.Motor2_A; * motorBitB = (int)MotorBits.Motor2_B; * pwm = new PWM(PwmPins.pwm2B); * break; */ case MotorHeaders.M3: motorBitA = (int)MotorBits.Motor3_A; motorBitB = (int)MotorBits.Motor3_B; pwm = new PWM(PwmPins.pwm0B); break; case MotorHeaders.M4: motorBitA = (int)MotorBits.Motor4_A; motorBitB = (int)MotorBits.Motor4_B; pwm = new PWM(PwmPins.pwm0A); break; default: throw new InvalidOperationException("Invalid motor header specified"); } latchState &= (byte)(~(1 << motorBitA) & ~(1 << motorBitB)); latch_tx(latchState); // Set both motor pins low pwm.SetPulse(1000000 / frequency, 0); // Set PWM frequency, but 0% duty cycle }