예제 #1
0
        private void btnAffichage_Click(object sender, EventArgs e)
        {
            if (btnAffichage.Text == "Lancer l'affichage")
            {
                _linkDisplay      = ThreadManager.CreateThread(link => DisplayInfos());
                _linkDisplay.Name = "Affichage des données";
                _linkDisplay.StartInfiniteLoop(new TimeSpan(0, 0, 0, 0, 100));

                Dessinateur.Start();

                btnAffichage.Text  = "Stopper l'affichage";
                btnAffichage.Image = GoBot.Properties.Resources.Pause16;
            }
            else
            {
                _linkDisplay?.Cancel();
                _linkDisplay?.WaitEnd();
                _linkDisplay = null;

                Dessinateur.Stop();

                btnAffichage.Text  = "Lancer l'affichage";
                btnAffichage.Image = GoBot.Properties.Resources.Play16;
            }
        }
예제 #2
0
        protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
        {
            if (keyData == Keys.Down)
            {
                _moveVertical = -1;
            }
            else if (keyData == Keys.Up)
            {
                _moveVertical = 1;
            }
            else if (keyData == Keys.Left)
            {
                _moveHorizontal = -1;
            }
            else if (keyData == Keys.Right)
            {
                _moveHorizontal = 1;
            }

            if ((_moveVertical != 0 || _moveHorizontal != 0) && _moveLoop == null)
            {
                _moveLoop = ThreadManager.CreateThread(o => ZoomStep());
                _moveLoop.StartInfiniteLoop(20);
            }

            return(base.ProcessCmdKey(ref msg, keyData));
        }
예제 #3
0
        private void btnLaunch_Click(object sender, EventArgs e)
        {
            if (_linkPolling == null)
            {
                btnLaunch.Text  = "Stopper";
                btnLaunch.Image = Properties.Resources.Pause16;

                _linkPolling = ThreadManager.CreateThread(link => Measure());
                _linkPolling.StartInfiniteLoop(new TimeSpan(0));

                _linkDrawing = ThreadManager.CreateThread(link => DrawMeasures());
                _linkDrawing.StartInfiniteLoop(new TimeSpan(0, 0, 0, 0, 50));
            }
            else
            {
                btnLaunch.Text  = "Lancer";
                btnLaunch.Image = Properties.Resources.Play16;

                _linkPolling.Cancel();
                _linkDrawing.Cancel();

                _linkPolling.WaitEnd();
                _linkDrawing.WaitEnd();

                _linkPolling = null;
                _linkDrawing = null;
            }
        }
예제 #4
0
        private void btnLateral_Click(object sender, EventArgs e)
        {
            _isOnLeft = !_isOnLeft;

            if (_linkAnimation != null)
            {
                _linkAnimation.Cancel();
                _linkAnimation.WaitEnd();
            }

            if (!_isOnLeft)
            {
                Actionneur.ElevatorRight.DoPushInside();
                btnLateral.Image = Properties.Resources.BigArrow;
            }
            else
            {
                Actionneur.ElevatorRight.DoPushOutside();
                Bitmap bmp = new Bitmap(Properties.Resources.BigArrow);
                bmp.RotateFlip(RotateFlipType.RotateNoneFlipX);
                btnLateral.Image = bmp;
            }

            _linkAnimation = ThreadManager.CreateThread(link => ThreadLateral(!_isOnLeft ? -4 : 4));
            _linkAnimation.StartInfiniteLoop(15);

            picStorage.Focus();
        }
예제 #5
0
파일: Hokuyo.cs 프로젝트: Omybot/GoBot
        protected override bool StartLoop()
        {
            _linkMeasures      = ThreadManager.CreateThread(link => DoMeasure());
            _linkMeasures.Name = "Mesure Hokuyo " + _id.ToString();
            _linkMeasures.StartInfiniteLoop(new TimeSpan(0, 0, 0, 0, 100));

            return(true);
        }
예제 #6
0
        public override void Init()
        {
            Historique          = new Historique(IDRobot);
            PositionsHistorical = new List <Position>();
            Position            = new Position(GoBot.Recalibration.StartPosition);

            PositionTarget = null;

            _linkAsserv.StartInfiniteLoop(new TimeSpan(0, 0, 0, 0, _highResolutionAsservissement ? 1 : 16));
            _linkLogPositions.StartInfiniteLoop(new TimeSpan(0, 0, 0, 0, 100));
        }
예제 #7
0
        private void btnUp_Click(object sender, EventArgs e)
        {
            if (_linkAnimation != null)
            {
                _linkAnimation.Cancel();
                _linkAnimation.WaitEnd();
            }

            _linkAnimation = ThreadManager.CreateThread(link => ThreadVertical(4));
            _linkAnimation.StartInfiniteLoop(10);

            picStorage.Focus();
        }
예제 #8
0
        private void switchButtonPort_ValueChanged(object sender, bool value)
        {
            if ((switchButtonPortA.Value || switchButtonPortB.Value || switchButtonPortC.Value) && _link == null)
            {
                _link      = ThreadManager.CreateThread(link => AskValues());
                _link.Name = "Ports numériques " + _board.ToString();
                _link.StartInfiniteLoop(50);
            }

            if (!switchButtonPortA.Value & !switchButtonPortB.Value & !switchButtonPortC.Value & _link != null)
            {
                _link.Cancel();
                _link.WaitEnd();
                _link = null;
            }
        }
예제 #9
0
 private void btnOnOff_ValueChanged(object sender, bool value)
 {
     if (value)
     {
         ledState.Color = Robots.MainRobot.ReadSensorOnOff(_sensor) ? Color.LimeGreen : Color.Red;
         _linkPolling   = ThreadManager.CreateThread(link => PollingSensor());
         _linkPolling.RegisterName(nameof(PollingSensor) + " " + lblName.Text);
         _linkPolling.StartInfiniteLoop(50);
     }
     else
     {
         _linkPolling.Cancel();
         _linkPolling.WaitEnd();
         _linkPolling   = null;
         ledState.Color = Color.Gray;
     }
 }
예제 #10
0
        protected override bool StartLoop()
        {
            bool ok;

            if (_manager.CreateChannelUDP())
            {
                _feedLink      = ThreadManager.CreateThread(link => FeedWatchDog());
                _feedLink.Name = "R2000 Watchdog";
                _feedLink.StartInfiniteLoop(1000);
                ok = true;
            }
            else
            {
                ok = false;
            }

            return(ok);
        }
예제 #11
0
        private void boxTorque_ValueChanged(object sender, bool value)
        {
            if (value)
            {
                _linkPolling = ThreadManager.CreateThread(link => GetServoInfos());
                _linkPolling.StartInfiniteLoop(new TimeSpan(0, 0, 0, 0, 20));

                _linkDrawing = ThreadManager.CreateThread(link => DrawTorqueCurve());
                _linkDrawing.StartInfiniteLoop(new TimeSpan(0, 0, 0, 0, 100));
            }
            else
            {
                _linkPolling.Cancel();
                _linkDrawing.Cancel();

                _linkPolling.WaitEnd();
                _linkDrawing.WaitEnd();

                _linkPolling = null;
                _linkDrawing = null;
            }
        }
예제 #12
0
        private void btnDown_Click(object sender, EventArgs e)
        {
            if (_linkAnimation != null)
            {
                _linkAnimation.Cancel();
                _linkAnimation.WaitEnd();
            }

            List <Color> colors = _isOnLeft ? _leftStorage : _rightStorage;
            int          index  = 0;

            if (colors[2] != Color.Transparent)
            {
                _verticalPosition = 450 - 290;
                index             = 2;
            }
            else if (colors[1] != Color.Transparent)
            {
                _verticalPosition = 450 - 220;
                index             = 1;
            }
            else if (colors[0] != Color.Transparent)
            {
                _verticalPosition = 450 - 150;
                index             = 0;
            }

            btnSpawnGreen.Visible = false;
            btnSpawnRed.Visible   = false;

            _onGround     = colors[index];
            colors[index] = Color.Transparent;

            _linkAnimation = ThreadManager.CreateThread(link => ThreadVertical(-4));
            _linkAnimation.StartInfiniteLoop(10);

            picStorage.Focus();
        }
예제 #13
0
        private void switchBouton_ValueChanged(object sender, bool value)
        {
            if (value)
            {
                _linkPolling      = ThreadManager.CreateThread(link => AskValues());
                _linkPolling.Name = "Ports analogiques " + Carte.ToString();
                _linkPolling.StartInfiniteLoop(50);

                _linkDraw      = ThreadManager.CreateThread(link => ctrlGraphique.DrawCurves());
                _linkDraw.Name = "Graph ports analogiques " + Carte.ToString();
                _linkDraw.StartInfiniteLoop(100);
            }
            else
            {
                _linkPolling.Cancel();
                _linkPolling.WaitEnd();
                _linkPolling = null;

                _linkDraw.Cancel();
                _linkDraw.WaitEnd();
                _linkDraw = null;
            }
        }
예제 #14
0
        private void PagePanda_Load(object sender, EventArgs e)
        {
            if (!Execution.DesignMode)
            {
                Connections.AllConnections.ForEach(c => c.ConnectionChecker.ConnectionStatusChange += ConnectionChecker_ConnectionStatusChange);
                AllDevices.LidarAvoid.ConnectionChecker.ConnectionStatusChange += LidarAvoid_ConnectionStatusChange;

                SetPicImage(picLidar, Devices.AllDevices.LidarAvoid.ConnectionChecker.Connected);
                SetPicImage(picIO, Connections.ConnectionIO.ConnectionChecker.Connected);
                SetPicImage(picMove, Connections.ConnectionMove.ConnectionChecker.Connected);
                SetPicImage(picCAN, Connections.ConnectionCanBridge.ConnectionChecker.Connected);
                SetPicImage(picServo1, Connections.ConnectionsCan[Communications.CAN.CanBoard.CanServo1].ConnectionChecker.Connected);
                SetPicImage(picServo2, Connections.ConnectionsCan[Communications.CAN.CanBoard.CanServo2].ConnectionChecker.Connected);
                SetPicImage(picServo3, Connections.ConnectionsCan[Communications.CAN.CanBoard.CanServo3].ConnectionChecker.Connected);
                SetPicImage(picServo4, Connections.ConnectionsCan[Communications.CAN.CanBoard.CanServo4].ConnectionChecker.Connected);
                SetPicImage(picServo5, Connections.ConnectionsCan[Communications.CAN.CanBoard.CanServo5].ConnectionChecker.Connected);
                SetPicImage(picServo6, Connections.ConnectionsCan[Communications.CAN.CanBoard.CanServo6].ConnectionChecker.Connected);

                _linkBattery = ThreadManager.CreateThread(link => UpdateBatteryIcon());
                _linkBattery.StartInfiniteLoop(1000);

                pagePandaMatch.CalibrationDone += PagePandaMatch_CalibrationDone;
            }
        }
예제 #15
0
파일: Connections.cs 프로젝트: Omybot/GoBot
        /// <summary>
        /// Initialise toutes les connexions
        /// </summary>
        public static void Init()
        {
            _connectionsCan = new Dictionary <CanBoard, CanSubConnection>();

            EnableConnection   = new Dictionary <Board, bool>();
            UDPBoardConnection = new Dictionary <Board, Connection>();
            AllConnections     = new List <Connection>();

            ConnectionIO      = AddUDPConnection(Board.RecIO, IPAddress.Parse("10.1.0.14"), 12324, 12314);
            ConnectionIO.Name = Board.RecIO.ToString();

            ConnectionMove      = AddUDPConnection(Board.RecMove, IPAddress.Parse("10.1.0.11"), 12321, 12311);
            ConnectionMove.Name = Board.RecMove.ToString();

            ConnectionCanBridge      = AddUDPConnection(Board.RecCan, IPAddress.Parse("10.1.0.15"), 12325, 12315);
            ConnectionCanBridge.Name = Board.RecCan.ToString();

            ConnectionCan = new CanConnection(Board.RecCan);

            _connectionsCan.Add(CanBoard.CanServo1, new CanSubConnection(ConnectionCan, CanBoard.CanServo1));
            _connectionsCan.Add(CanBoard.CanServo2, new CanSubConnection(ConnectionCan, CanBoard.CanServo2));
            _connectionsCan.Add(CanBoard.CanServo3, new CanSubConnection(ConnectionCan, CanBoard.CanServo3));
            _connectionsCan.Add(CanBoard.CanServo4, new CanSubConnection(ConnectionCan, CanBoard.CanServo4));
            _connectionsCan.Add(CanBoard.CanServo5, new CanSubConnection(ConnectionCan, CanBoard.CanServo5));
            _connectionsCan.Add(CanBoard.CanServo6, new CanSubConnection(ConnectionCan, CanBoard.CanServo6));

            ConnectionCanAlim = new CanSubConnection(ConnectionCan, CanBoard.CanAlim);
            _connectionsCan.Add(CanBoard.CanAlim, ConnectionCanAlim);

            _connectionsCan.Values.ToList().ForEach(o => AllConnections.Add(o));

            // En remplacement des tests de connexion des ConnexionCheck, pour les syncroniser
            _linkTestConnections      = ThreadManager.CreateThread(link => TestConnections());
            _linkTestConnections.Name = "Tests de connexion";
            _linkTestConnections.StartInfiniteLoop();
        }
예제 #16
0
파일: GameBoard.cs 프로젝트: Omybot/GoBot
 public static void StartMatch()
 {
     _linkStartZone = ThreadManager.CreateThread(link => CheckStartZonePresence());
     _linkStartZone.StartInfiniteLoop(1000);
     _linkStartZone.Name = "Check zone départ";
 }