private static PwmController GetPwmController(ConsoleOptions options) { var deviceFactory = new Pca9685DeviceFactory(); var device = deviceFactory.GetDevice(options.UseFakeDevice); var motorController = new PwmController(device); motorController.Init(); return(motorController); }
private void InitI2C() { Log.Info("Initialising I2C bus"); if (PanTiltMechanism == null) { var pwmDeviceFactory = new Pca9685DeviceFactory(); var pwmDevice = pwmDeviceFactory.GetDevice(); PanTiltMechanism = new PanTiltMechanism(pwmDevice); } }
private void FrmMain_Load(object sender, EventArgs e) { _deviceFactory = new Pca9685DeviceFactory(); var device = _deviceFactory.GetDevice(); _motorController = new PwmController(device); _motorController.Init(); //LogBus.Instance.LogReceived += Instance_LogReceived; }
public ServoSorter( ICaptureGrab capture , ConsoleOptions options) : base(capture) { _servoPosition = 70; Settings = options.ColourSettings; _debounceWatch = new Stopwatch(); var deviceFactory = new Pca9685DeviceFactory(); var device = deviceFactory.GetDevice(options.UseFakeDevice); SetLogLevel(device); _pwmControl = new ServoSortPwmControl(device); _pwmControl.Init(); _detector = new ColourDetector(); }
static void Main(string[] args) { var appData = ExecutionEnvironment.GetApplicationMetadata(); Log.Info(appData); _consoleOptions = new ConsoleOptions(args); if (_consoleOptions.ShowHelp) { Console.WriteLine("Options:"); _consoleOptions.OptionSet.WriteOptionDescriptions(Console.Out); return; } CapturePi.DoMatMagic("CreateCapture"); var noCaptureGrabs = new[] { Mode.simple, Mode.pantiltjoy, Mode.ipReport }; var i2cRequired = new[] { Mode.pantiltface, Mode.pantiltjoy, Mode.pantiltcolour, Mode.pantiltmultimode }; ICaptureGrab capture = null; if (!noCaptureGrabs.Contains(_consoleOptions.Mode)) { var config = CaptureConfig.Parse(_consoleOptions.CaptureConfig); capture = BuildCaptureGrabber(config); Log.Info($"Requested capture {capture.RequestedConfig}"); } IPanTiltMechanism panTiltMech = null; IScreen screen = null; if (i2cRequired.Contains(_consoleOptions.Mode)) { var pwmDeviceFactory = new Pca9685DeviceFactory(); var pwmDevice = pwmDeviceFactory.GetDevice(_consoleOptions.UseFakeDevice); panTiltMech = new PanTiltMechanism(pwmDevice); screen = new ConsoleScreen(); screen.Clear(); } else { Log.Info("Pan Tilt is not required"); } IRunner runner; Log.Info(_consoleOptions); switch (_consoleOptions.Mode) { case Mode.noop: var noopRunner = new NoopRunner(capture); noopRunner.ReportFramesPerSecond = true; runner = noopRunner; break; case Mode.simple: runner = new SimpleCv(); break; case Mode.colourdetect: var colorDetector = new ColorDetectRunner(capture); if (_consoleOptions.HasColourSettings) { colorDetector.Settings = _consoleOptions.ColourSettings; } runner = colorDetector; break; case Mode.haar: var relativePath = $@"haarcascades{Path.DirectorySeparatorChar}haarcascade_frontalface_default.xml"; var cascadeFilename = Path.Combine(appData.ExeFolder, relativePath); var cascadeContent = File.ReadAllText(cascadeFilename); runner = new CascadeRunner(capture, cascadeContent); break; case Mode.servosort: runner = new ServoSorter(capture, _consoleOptions); break; case Mode.pantiltjoy: var joyController = new JoystickPanTiltController(panTiltMech); runner = new TimerRunner(joyController, screen); break; case Mode.pantiltface: var controllerF = new FaceTrackingPanTiltController(panTiltMech, capture.RequestedConfig); runner = new CameraBasedPanTiltRunner(panTiltMech, capture, controllerF, screen); break; case Mode.pantiltmultimode: var cameraHubProxy = new CameraHubProxy(); cameraHubProxy.Connect(); var remoteScreen = new RemoteConsoleScreen(cameraHubProxy); var piServerClient = new BsonPostImageTransmitter(); var imageTransmitter = new RemoteImageSender(piServerClient, cameraHubProxy); cameraHubProxy.SettingsChanged += (sender, s) => { remoteScreen.Enabled = s.EnableConsoleTransmit; imageTransmitter.Enabled = s.EnableImageTransmit; }; var controllerMultimode = new MultimodePanTiltController(panTiltMech, capture.RequestedConfig, remoteScreen, cameraHubProxy, imageTransmitter); var cameraBasedRunner = new CameraBasedPanTiltRunner(panTiltMech, capture, controllerMultimode, screen); runner = cameraBasedRunner; cameraHubProxy.UpdateCapture += (s, e) => { remoteScreen.WriteLine($"Changing capture settings to {e}"); var newGrabber = BuildCaptureGrabber(e); cameraBasedRunner.UpdateCaptureGrabber(newGrabber); }; break; case Mode.pantiltcolour: var controllerC = new ColourTrackingPanTiltController(panTiltMech, capture.RequestedConfig); if (_consoleOptions.HasColourSettings) { controllerC.Settings = _consoleOptions.ColourSettings; } else { throw KrakenException.Create("Colour settings not found"); } runner = new CameraBasedPanTiltRunner(panTiltMech, capture, controllerC, screen); break; case Mode.ipReport: var hub = new CameraHubProxy(); runner = new IpReporter(hub); break; default: throw KrakenException.Create("Option mode {0} needs wiring up", _consoleOptions.Mode); } runner.Run(); }
private void Run(string[] args) { // Creating this from static causes an exception in Raspian. Not in ubunti though? Log = LogManager.GetCurrentClassLogger(); var options = new ConsoleOptions(args); if (options.ShowHelp) { Console.WriteLine("Options:"); options.OptionSet.WriteOptionDescriptions(Console.Out); return; } var deviceFactory = new Pca9685DeviceFactory(); var device = deviceFactory.GetDevice(options.UseFakeDevice); var motorController = new PwmController(device); motorController.Init(); Log.InfoFormat("RPi.Console running with {0}", options); switch (options.Mode) { case Mode.DcMotor: RunDcMotor(motorController); break; case Mode.Servo: RunServo(motorController); break; case Mode.Stepper: motorController.Stepper.Rotate(600); break; case Mode.Led: RunLed(motorController); break; case Mode.RawPwm: RunRawPwm(device); break; case Mode.AlarmClock: var alarmClock = new AlarmClock(motorController); alarmClock.Set(options.AlarmDate); alarmClock.WaitForAlarm(); break; case Mode.SignalRTest: var signalRConnection = new SignalRConnection(motorController); signalRConnection.Run(); break; } motorController.AllStop(); deviceFactory.Dispose(); //http://nlog-project.org/2011/10/30/using-nlog-with-mono.html // NLog.LogManager.Configuration = null; }