コード例 #1
0
 public static Position SurroundSearch(Position start, short maxRange, IPositionChecker checker)
 {
     for (short actualR = 1; actualR < maxRange; ++actualR)
     {
         for (short x = ((short)(start.X - actualR)); x <= start.X + actualR; ++x)
         {
             short topY = ((short)(start.Y + actualR));
             if (checker.CheckPosition(x, topY))
             {
                 return(new Position(x, topY));
             }
             if (checker.CheckPosition(x, (short)-topY))
             {
                 return(new Position(x, -topY));
             }
         }
         for (short y = ((short)(start.Y - actualR + 1)); y < start.Y + actualR; ++y)
         {
             short topX = ((short)(actualR + start.X));
             if (checker.CheckPosition(topX, y))
             {
                 return(new Position(topX, y));
             }
             if (checker.CheckPosition((short)-topX, y))
             {
                 return(new Position(-topX, y));
             }
         }
     }
     return(start);
 }
コード例 #2
0
        public SpeedDetectionLogicPan(ICommunication communication)
        {
            this._communication  = communication;
            this._panTiltControl = new EneoPanTiltControl(this._communication);
            this._panTiltControl.PositionChanged += OnPositionChanged;
            this._positionChecker = new PositionChecker(this._panTiltControl);

            this._panTiltControl.Start();
        }
コード例 #3
0
        public SpeedTestLogic(ICommunication communication, AxisType axisType)
        {
            this._axisType       = axisType;
            this._panTiltControl = new EneoPanTiltControl(communication);
            this._panTiltControl.PositionChanged += OnPositionChanged;
            this._positionChecker = new PositionChecker(this._panTiltControl);

            this._panTiltControl.Start();
        }
コード例 #4
0
        public void SetPanTiltControl(IPanTiltControl panTiltControl)
        {
            this._panTiltControl  = panTiltControl;
            this._positionChecker = new PositionChecker(this._panTiltControl);

            this._panTiltControl.PositionChanged += PanTiltPositionChanged;
            this._panTiltControl.LimitChanged    += PanTiltLimitChanged;

            this.CheckPtLimitAsync().GetAwaiter().GetResult();
        }
コード例 #5
0
        public void SetPanTiltControl(IPanTiltControl panTiltControl)
        {
            this._panTiltControl  = panTiltControl;
            this._positionChecker = new PositionChecker(this._panTiltControl);

            this._panTiltControl.PositionChanged += PanTiltPositionChanged;
            this._panTiltControl.LimitChanged    += PanTiltLimitChanged;

            this.CheckPtLimit();
        }
コード例 #6
0
        public const int TIMEOUT_TIME    = 1000; // msec

        public MainWindow()
        {
            InitializeComponent();
            kinectService   = new KinectService();
            positionChecker = new PositionChecker(kinectService);
            robot           = new Robot(positionChecker);
            skeletonDrawer  = new SkeletonDrawer();

            this.Closing += MainWindow_Closing;


            this.DataContext = new MainWindowViewModel(kinectService, skeletonDrawer);
        }
コード例 #7
0
        public SpeedTestLogic(ICommunication communication, PanTiltControlType panTiltControlType, AxisType axisType)
        {
            this._axisType = axisType;
            if (panTiltControlType == PanTiltControlType.Eneo)
            {
                this._panTiltControl = new EneoPanTiltControl(communication);
            }
            else
            {
                this._panTiltControl = new AlturosPanTiltControl(communication);
            }
            this._panTiltControl.PositionChanged += OnPositionChanged;
            this._positionChecker = new PositionChecker(this._panTiltControl);

            this._panTiltControl.Start();
        }
コード例 #8
0
        public SpeedDetectionLogicPan(ICommunication communication, PanTiltControlType panTiltControlType)
        {
            this._communication = communication;
            if (panTiltControlType == PanTiltControlType.Eneo)
            {
                this._panTiltControl = new EneoPanTiltControl(this._communication);
            }
            else
            {
                this._panTiltControl = new AlturosPanTiltControl(this._communication);
            }

            this._panTiltControl.PositionChanged += OnPositionChanged;
            this._positionChecker = new PositionChecker(this._panTiltControl);

            this._panTiltControl.Start();
        }
コード例 #9
0
        public const int TIMEOUT_TIME    = 1000; // msec

        public Robot(IPositionChecker positionChecker)
        {
            if (zigbee.zgb_initialize(DEFAULT_PORTNUM) == 0)
            {
                Console.WriteLine("Failed to open Zig2Serial!");
                Console.WriteLine("Press any key to terminate...");
                Console.ReadKey(true);
                return;
            }
            else
            {
                Console.WriteLine("Succeed to open Zig2Serial!");
            }

            _positionChecker             = positionChecker;
            _positionChecker.MatchFound += _positionChecker_MatchFound;
        }
コード例 #10
0
ファイル: Main.cs プロジェクト: LKneringer/Alturos.PanTilt
        private async Task StartPanTiltCommunication()
        {
            if (string.IsNullOrEmpty(this._deviceConfiguration.PanTiltIpAddress))
            {
                return;
            }

            try
            {
                switch (this._deviceConfiguration.CommunicationType)
                {
                case CommunicationType.NetworkTcp:
                    this._communication = new TcpNetworkCommunication(new IPEndPoint(IPAddress.Parse(this._deviceConfiguration.PanTiltIpAddress), 4003));
                    break;

                case CommunicationType.NetworkUdp:
                    var port = 4003;
                    if (this._deviceConfiguration.PanTiltControlType == PanTiltControlType.Alturos)
                    {
                        port = 5555;
                    }

                    this._communication = new UdpNetworkCommunication(IPAddress.Parse(this._deviceConfiguration.PanTiltIpAddress), port, port);
                    break;

                case CommunicationType.SerialPort:
                    this._communication = new SerialPortCommunication(this._deviceConfiguration.ComPort);
                    break;
                }
            }
            catch (Exception exception)
            {
                MessageBox.Show($"Cannot initialize communication, error:{exception.ToString()}", "Communication error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }

            this._communication.SendData    += this.CommunicationSendData;
            this._communication.ReceiveData += this.CommunicationReceiveData;

            using (var firmwareReader = new FirmwareReader(this._communication))
            {
                this.labelFirmware.Invoke(o => o.Text = $"Firmware: {firmwareReader.Firmware}");
                await Task.Delay(100).ConfigureAwait(false);
            }

            switch (this._deviceConfiguration.PanTiltControlType)
            {
            case PanTiltControlType.Alturos:
                this._panTiltControl = new AlturosPanTiltControl(this._communication);
                break;

            case PanTiltControlType.Eneo:
                this._panTiltControl = new EneoPanTiltControl(this._communication);
                break;
            }
            this._panTiltControl.PositionChanged += OnPositionChanged;
            this._positionChecker = new PositionChecker(this._panTiltControl);

            this._panTiltControl.Start();
            this.SetSmoothing(100, 50);

            Thread.Sleep(500);
            this.GetLimitInfos();
        }
コード例 #11
0
ファイル: AnimalFinder.cs プロジェクト: dim97/Savanna
 public AnimalFinder(IField field, IPositionChecker positionChecker, IDistanceHandler distanceHandler)
 {
     _positionChecker = positionChecker;
     _field           = field;
     _distanceHandler = distanceHandler;
 }
コード例 #12
0
        private async Task StartPanTiltCommunication()
        {
            if (string.IsNullOrEmpty(this._deviceConfiguration.PanTiltIpAddress))
            {
                return;
            }

            try
            {
                switch (this._deviceConfiguration.CommunicationType)
                {
                case CommunicationType.NetworkTcp:
                    this._communication = new TcpNetworkCommunication(new IPEndPoint(IPAddress.Parse(this._deviceConfiguration.PanTiltIpAddress), 4003));
                    break;

                case CommunicationType.NetworkUdp:
                    if (this._deviceConfiguration.PanTiltControlType == PanTiltControlType.Alturos)
                    {
                        this._communication = new UdpNetworkCommunication(IPAddress.Parse(this._deviceConfiguration.PanTiltIpAddress), 5555);
                    }
                    else
                    {
                        this._communication = new UdpNetworkCommunication(IPAddress.Parse(this._deviceConfiguration.PanTiltIpAddress), 4003, 4003);
                    }

                    break;

                case CommunicationType.SerialPort:
                    this._communication = new SerialPortCommunication(this._deviceConfiguration.ComPort);
                    break;
                }
            }
            catch (Exception exception)
            {
                MessageBox.Show($"Cannot initialize communication, error:{exception.ToString()}", "Communication error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }

            this._communication.SendData    += this.CommunicationSendData;
            this._communication.ReceiveData += this.CommunicationReceiveData;

            switch (this._deviceConfiguration.PanTiltControlType)
            {
            case PanTiltControlType.Alturos:
                this.mainTabControl.TabPages.Remove(this.tabPageEneo);
                this._panTiltControl = new AlturosPanTiltControl(this._communication);
                this.communicationHistoryControl1.SetTranslator(new AlturosFeedbackTranslator());
                break;

            case PanTiltControlType.Eneo:
                this.mainTabControl.TabPages.Remove(this.tabPageAlturos);
                this._panTiltControl = new EneoPanTiltControl(this._communication);
                this.communicationHistoryControl1.SetTranslator(new EneoFeedbackTranslator());
                break;
            }

            if (this._panTiltControl is IFirmwareReader firmwareReader)
            {
                var firmware = await firmwareReader.GetFirmwareAsync();

                this.labelFirmware.Invoke(o => o.Text = $"Firmware: {firmware}");
            }
            else
            {
                this.labelFirmware.Invoke(o => o.Text = $"Cannot get firmware info");
            }

            this._panTiltControl.PositionChanged            += OnPositionChanged;
            this._panTiltControl.LimitChanged               += OnLimitChanged;
            this._panTiltControl.NoPositionFeedbackReceived += NoPositionFeedbackReceived;

            this._positionChecker = new PositionChecker(this._panTiltControl);

            this._panTiltControl.Start();

            Thread.Sleep(500);
            this.GetLimitInfos();
        }
コード例 #13
0
ファイル: PositionHandler.cs プロジェクト: dim97/Savanna
 public PositionHandler(IPositionChecker positionChecker, IField field, IPathHandler pathHandler)
 {
     _positionChecker = positionChecker;
     _field           = field;
     _pathHandler     = pathHandler;
 }
コード例 #14
0
 public PointReplacer(IPositionChecker positionChecker, IField field)
 {
     _positionChecker = positionChecker;
     _field           = field;
 }
コード例 #15
0
 public void SetPanTiltControl(IPanTiltControl panTiltControl)
 {
     this._panTiltControl = panTiltControl;
     this._panTiltControl.PositionChanged += PositionChanged;
     this._positionChecker = new PositionChecker(this._panTiltControl);
 }