Exemple #1
0
        /// <summary>
        /// Testing method for RelayX1 module (function never returns)
        /// </summary>
        static void TestRelay()
        {
            var relay = new RelayX1(FEZRaptor.Socket18.Pin5);

            while (true)
            {
                relay.TurnOn();
                Thread.Sleep(2000);
                relay.TurnOff();
                Thread.Sleep(2000);
            }
        }
Exemple #2
0
        public etatBR allerEn(double x, double y, sens s, int speed = 10, int speedAngle = 300)
        {
            int erreur = 0;
            int distanceConsigne = 0, distanceReelle = 0, distanceReelle_tm1 = 0;
            int alphaConsigne = 0, alphaReel = 0, alphaReel_tm1 = 0;
            int delta        = 0;
            int dureeBlocage = 0;



            alphaConsigne = (int)(System.Math.Atan2((y - m_posBR.y), (x - m_posBR.x)) * 180 / System.Math.PI) - m_posBR.alpha;  //angle en degre
            if (s == sens.reculer)
            {
                alphaConsigne = (int)(alphaConsigne + 180);
            }
            alphaConsigne = recallerAngle(alphaConsigne);
            //   m_status= tourner(alphaConsigne);
            m_status = 0;
            m_kangaroo.tourner(alphaConsigne, speedAngle);
            //attente d'être arrive ou bloque ou stoppe
            do
            {
                alphaReel_tm1 = alphaReel;
                //  Thread.Sleep(1000);
                erreur = getAngleTourne(ref alphaReel);
                if (erreur == 0xE3)
                {
                    alphaReel = alphaReel_tm1;
                    m_status  = etatBR.bloque;
                    relai.TurnOn();
                    Thread.Sleep(1000);
                    relai.TurnOff();
                    Thread.Sleep(1000);
                    m_kangaroo.init();
                }
                else
                {
                    delta = System.Math.Abs(alphaConsigne - alphaReel);
                    if (delta < 2)
                    {
                        m_status = etatBR.arrive;
                        Thread.Sleep(300);
                        getAngleTourne(ref alphaReel);
                    }
                }
            } while (m_status != etatBR.arrive && m_status != etatBR.bloque && m_status != etatBR.stope);
            delta            = 0;
            m_status         = 0;
            distanceConsigne = (int)s * (int)System.Math.Sqrt(System.Math.Pow((x - m_posBR.x), 2) + System.Math.Pow((y - m_posBR.y), 2));

            m_kangaroo.allerEn(distanceConsigne, speed, unite.mm);
            int ij = 0;

            //attente d'être arrive ou bloque ou stoppe
            do
            {
                distanceReelle_tm1 = distanceReelle;
                erreur             = getDistanceParcourue(ref distanceReelle);
                if (distanceReelle_tm1 == distanceReelle)
                {
                    ij++;
                }
                else
                {
                    ij = 0;
                }
                if (ij == 5)
                {
                    break;
                }
                if (distanceReelle == 0)
                {
                    dureeBlocage++;

                    if (dureeBlocage >= 10)
                    {
                        distanceReelle = distanceReelle_tm1;
                        m_status       = etatBR.bloque;
                        m_kangaroo.start(mode.drive);
                    }
                }
                else
                {
                    dureeBlocage = 0;
                }

                delta = System.Math.Abs(distanceConsigne - distanceReelle);
                if (delta < 5)//5
                {
                    m_status = etatBR.arrive;
                    Thread.Sleep(300);//500
                    erreur = getDistanceParcourue(ref distanceReelle);
                }

                if (erreur == 0xE3)
                {
                    distanceReelle = distanceReelle_tm1;
                    m_status       = etatBR.bloque;
                    relai.TurnOn();
                    Thread.Sleep(1000);
                    relai.TurnOff();
                    Thread.Sleep(1000);
                    m_kangaroo.init();
                }
            } while (m_status != etatBR.arrive && m_status != etatBR.bloque && m_status != etatBR.stope);

            m_posBR.alpha = m_posBR.alpha + alphaReel;
            m_posBR.x     = m_posBR.x + (int)(-distanceReelle * System.Math.Cos(m_posBR.alpha * System.Math.PI / 180));
            m_posBR.y     = m_posBR.y + (int)(-distanceReelle * System.Math.Sin(m_posBR.alpha * System.Math.PI / 180));
            Debug.Print("position_x " + m_posBR.x + " position_y" + m_posBR.y);

            /*  m_kangaroo.powerdown(mode.drive);
             * m_kangaroo.powerdown(mode.turn);
             * m_kangaroo.init();*/
            return(m_status);
        }
 public void TurnOff()
 {
     relayX1.TurnOff();
 }