コード例 #1
0
ファイル: Follower.cs プロジェクト: KiLMaN/LPIE_Robot_Color
        void _AutomateComm_OnNewTrameArduinoReceived(object sender, NewTrameArduinoReceveidEventArgs e)
        {
            byte IDRobot = e.Source.id;

            ArduinoBotIA Rob;

            if (_ListArduino.Exists(ArduinoBotIA.ById(IDRobot)))
            {
                Rob = _ListArduino.Find(ArduinoBotIA.ById(IDRobot));
            }
            else
            {
                Rob = new ArduinoBotIA(IDRobot);
                _ListArduino.Add(Rob);
            }
            switch (e.Message.headerMess)
            {
            case (byte)EMBtoPCmessHeads.ASK_CONN:
                // Rien de spécial sur la demande de connexion
                break;

            case (byte)EMBtoPCmessHeads.AUTO_MODE_OFF:
                // Fin de mode auto / le robot doit avoir pris le cube
                if (Rob.LastAction == ActionRobot.ROBOT_AUTONOME)
                {
                    Rob.LastAction = ActionRobot.ROBOT_ARRET;
                    Rob.Saisie     = true;
                    Rob.SetTrace(null);
                    // Une fois le cube saisie
                }
                else
                {
                    Logger.GlobalLogger.error("Fin de mode autnome qui n'as pas été lancé par le serveur !" + Rob.ID);
                }
                break;

            case (byte)EMBtoPCmessHeads.RESP_SENSOR:
                Logger.GlobalLogger.info("Réponse de capteur ? : : " + e.Message.ToString());
                break;

            default:
                Logger.GlobalLogger.error("Message reçu qui ne devrais pas être remonter dans L'IA : " + e.Message.ToString());
                break;
            }
            tickIA();
        }
コード例 #2
0
        private void _ThreadCheckMessageRecus()
        {
            while (true)
            {
                /* Traitement des trames entrantes */
                if (_SerialXbee.TrameRecusDisponible())
                {
                    TrameProtocole trame = _SerialXbee.PopTrameRecus();
                    // Si traitement par l'application (données capteur ou autre )
                    // Les Ack et autre sont gerrer ici
                    if (TraiteTrameRecue(trame))
                    {
                        // Envoi au couches supérrieures
                        if (OnNewTrameArduinoReceived != null)
                        {
                            MessageProtocol message = _SerialXbee.DecodeTrame(trame);
                            ArduinoBotComm  robot   = ArduinoManager.getArduinoBotById(trame.src);

                            NewTrameArduinoReceveidEventArgs arg = new NewTrameArduinoReceveidEventArgs(message, robot);
                            OnNewTrameArduinoReceived(this, arg);
                        }
                    }
                }


                /* Verification message en attente envoi */

                /*if (_MessagesEnAttenteEnvoi.Count > 0)
                 * {
                 *
                 *  int count = _MessagesEnAttenteEnvoi.Count;
                 *  for(int i=0 ; i< count;i++)
                 *  {
                 *      if (_MessagesEnAttenteEnvoi[i].robot.stateComm == StateArduinoComm.STATE_COMM_NONE)
                 *      {
                 *          Logger.GlobalLogger.debug("Envoi d'un message en attente au robot :" + _MessagesEnAttenteEnvoi[i].robot + " Messsage : " + _MessagesEnAttenteEnvoi[i].message.GetType().ToString(),1);
                 *          // L'arduino est libre, on peut envoyer
                 *          SendMessageToArduino(_MessagesEnAttenteEnvoi[i].message, _MessagesEnAttenteEnvoi[i].robot);
                 *      }
                 *  }
                 *
                 * }*/
                Thread.Sleep(_ThreadMessageRecuDelay);
            }
        }
コード例 #3
0
        void _OnNewTrameArduinoReceived(object sender, NewTrameArduinoReceveidEventArgs e)
        {
            Logger.GlobalLogger.debug("Nouvelle trame recus ! :" + e.Message.ToString());
            if (e.Source.Connected)
            {
                if (!_listeArduinoConn.Items.Contains(e.Source.id))
                {
                    Invoke(new d_addBotToList(addBotToList), "" + e.Source.id);
                }
                //_listeArduinoConn.Items.Add(e.Source.id);
            }

            if (e.Source.id == _CurrentArduinoId)
            {
                Invoke(new d_updateStateRobot(updateStateRobot), e.Source.Connected);
            }

            if (e.Message.headerMess == (byte)EMBtoPCmessHeads.RESP_SENSOR)
            {
                EMBtoPCMessageRespSensor mess = ((EMBtoPCMessageRespSensor)e.Message);
                // Met a jour la valeur des capteur sur L'IHM
                Invoke(new d_updateStateCapteur(updateStateCapteur), new object[] { mess.idSensor, mess.valueSensor });
            }
        }