예제 #1
0
 protected virtual void Dispose(bool disposing)
 {
     if (disposing)
     {
         KeyboardDriver?.Dispose();
         GamepadDriver?.Dispose();
         MouseDriver?.Dispose();
     }
 }
예제 #2
0
        public static IServiceCollection AddControlLayer(this IServiceCollection services)
        {
            // Configure the Remote Control Controller
            services.AddHostedService <RemoteControlController>(s =>
            {
                var gamepadDriver = new GamepadDriver(s.GetService <ILogger <GamepadDriver> >());

                return(new RemoteControlController(
                           gamepadDriver,
                           s.GetService <IMessageBroker>(),
                           s.GetService <IOptions <RemoteControlOptions> >(),
                           s.GetService <ILogger <RemoteControlController> >()));
            });

            services.AddHostedService <ServoController>((s) =>
            {
                var busId = 1;
                var selectedI2cAddress = 0b000000; // A5 A4 A3 A2 A1 A0
                var deviceAddress      = Pca9685.I2cAddressBase + selectedI2cAddress;
                var settings           = new I2cConnectionSettings(busId, deviceAddress);
                var device             = I2cDevice.Create(settings);
                var pca9685            = new Pca9685(device);
                pca9685.PwmFrequency   = 50;

                return(new ServoController(new List <IServo>
                {
                    new ServoDriver(pca9685, 0),
                    new ServoDriver(pca9685, 1),
                    new ServoDriver(pca9685, 2),
                    new ServoDriver(pca9685, 3),
                    new ServoDriver(pca9685, 4),
                    new ServoDriver(pca9685, 5),
                    new ServoDriver(pca9685, 6),
                    new ServoDriver(pca9685, 7),
                    new ServoDriver(pca9685, 8),
                    new ServoDriver(pca9685, 9),
                    new ServoDriver(pca9685, 10),
                    new ServoDriver(pca9685, 11)
                }, s.GetService <IMessageBroker>(), s.GetService <ILogger <ServoController> >()));
            });

            return(services);
        }
예제 #3
0
        public static IServiceCollection AddControlLayer(this IServiceCollection services)
        {
            // Configure the Differencial Drive Controller
            services.AddHostedService <DifferentialDriveVelocityController>(s =>
            {
                // Create the motor Hat, and the drivers for left and right motors
                var motorHat         = new MotorHat();
                var leftMotorDriver  = new DCMotorDriver(motorHat.CreateDCMotor(1), s.GetService <ILogger <DCMotorDriver> >());
                var rightMotorDriver = new DCMotorDriver(motorHat.CreateDCMotor(3), s.GetService <ILogger <DCMotorDriver> >());

                // Create the SpeedController that controls left and right motors
                return(new DifferentialDriveVelocityController(
                           leftMotorDriver,
                           rightMotorDriver,
                           s.GetService <IMessageBroker>(),
                           s.GetService <ILogger <DifferentialDriveVelocityController> >()));
            });

            services.Configure <RemoteControlOptions>(options =>
            {
                options.GamepadKeyThrottle = 1;
                options.GamepadKeyYaw      = 0;
            });

            // Configure the Remote Control Controller
            services.AddHostedService <RemoteControlController>(s =>
            {
                var gamepadDriver = new GamepadDriver(s.GetService <ILogger <GamepadDriver> >());

                return(new RemoteControlController(
                           gamepadDriver,
                           s.GetService <IMessageBroker>(),
                           s.GetService <IOptions <RemoteControlOptions> >(),
                           s.GetService <ILogger <RemoteControlController> >()));
            });

            return(services);
        }