Exemple #1
0
    public bool CheckAnswerAllBox(Arah arah)
    {
        bool isTrue           = false;
        List <GameObject> box = new List <GameObject>();

        box.Add(this.gameObject);
        switch (arah)
        {
        case Arah.Vertical:
            isTrue = (nextVertical != null ? nextVertical.CheckAnswerAllBox(arah, ref box, true):true) && (prevVertical != null ? prevVertical.CheckAnswerAllBox(arah, ref box, false):true) && _currentAnswer == boxAnswer;
            break;

        case Arah.Horizontal:
            isTrue = (nextHorizontal != null ? nextHorizontal.CheckAnswerAllBox(arah, ref box, true) : true) && (prevHorizontal != null ? prevHorizontal.CheckAnswerAllBox(arah, ref box, false) : true) && _currentAnswer == boxAnswer;
            break;
        }
        Debug.Log("Answer is : " + isTrue);
        if (isTrue)
        {
            foreach (GameObject b in box)
            {
                b.GetComponent <BoxTTS>().wasAnswer = true;
            }
        }
        return(isTrue);
    }
Exemple #2
0
    public bool CheckAnswerAllBox(Arah arah, ref List <GameObject> box, bool toNext)
    {
        bool isTrue = false;

        box.Add(this.gameObject);
        switch (arah)
        {
        case Arah.Vertical:
            if (toNext)
            {
                isTrue = (nextVertical != null ? nextVertical.CheckAnswerAllBox(arah, ref box, true) : true) && _currentAnswer == boxAnswer;
            }
            else
            {
                isTrue = (prevVertical != null ? prevVertical.CheckAnswerAllBox(arah, ref box, false) : true) && _currentAnswer == boxAnswer;
            }

            break;

        case Arah.Horizontal:
            if (toNext)
            {
                isTrue = (nextHorizontal != null ? nextHorizontal.CheckAnswerAllBox(arah, ref box, true) : true) && _currentAnswer == boxAnswer;
            }
            else
            {
                isTrue = (prevHorizontal != null ? prevHorizontal.CheckAnswerAllBox(arah, ref box, false) : true) && _currentAnswer == boxAnswer;
            }
            break;
        }

        return(isTrue);
    }
Exemple #3
0
    public void activateSelected(Arah arah, bool toNext, ref List <GameObject> allBoxObj, ref BoxTTS prior)
    {
        allBoxObj.Add(this.gameObject);
        backCol.gameObject.SetActive(true);

        if (_currentAnswer == "")
        {
            prior = this;
        }

        switch (arah)
        {
        case Arah.Horizontal:

            if (toNext)
            {
                if (nextHorizontal != null)
                {
                    nextHorizontal.activateSelected(Arah.Horizontal, true, ref allBoxObj, ref prior);
                }
                else
                {
                    prior = this;
                }
            }
            else
            {
                if (prevHorizontal != null)
                {
                    prevHorizontal.activateSelected(Arah.Horizontal, false, ref allBoxObj, ref prior);
                }
            }
            break;

        case Arah.Vertical:

            if (toNext)
            {
                if (nextVertical != null)
                {
                    nextVertical.activateSelected(Arah.Vertical, true, ref allBoxObj, ref prior);
                }
                else
                {
                    prior = this;
                }
            }
            else
            {
                if (prevVertical != null)
                {
                    prevVertical.activateSelected(Arah.Vertical, false, ref allBoxObj, ref prior);
                }
            }
            break;
        }
    }
        static void client_MqttMsgPublishReceived(object sender, MqttMsgPublishEventArgs e)
        {
            string Message = new string(Encoding.UTF8.GetChars(e.Message));

            if (Message.IndexOf(":") < 1)
            {
                return;
            }
            // handle message received
            Debug.Print("Message Received = " + Message);
            string[] CmdStr = Message.Split(':');
            if (CmdStr[0] == "MOVE")
            {
                switch (CmdStr[1])
                {
                case "Forward":
                    jalan = Arah.Maju;
                    break;

                case "Backward":
                    jalan = Arah.Mundur;
                    break;

                case "Left":
                    jalan = Arah.Kiri;
                    break;

                case "Right":
                    jalan = Arah.Kanan;
                    break;

                case "Stop":
                    jalan = Arah.Berhenti;
                    break;
                }
                if (lastDirection == jalan)
                {
                    if (Speed == 0)
                    {
                        Speed = HalfSpeed;
                    }
                    else
                    {
                        Speed = FullSpeed;
                    }
                }
                else
                {
                    Speed = HalfSpeed;
                }
                PublishMessage("/robot/status", "Robot Status:" + CmdStr[1]);
            }
            else if (CmdStr[0] == "REQUEST" && CmdStr[1] == "STATUS")
            {
                PublishMessage("/robot/state", "ONLINE");
            }
        }
Exemple #5
0
 public Setting()
 {
     Width    = 0;
     Height   = 0;
     Score    = 0;
     Speed    = 0;
     Points   = 0;
     GameOver = false;
     arah     = Arah.Down;
 }
Exemple #6
0
 public BoxTTS getPrevBox(Arah arah)
 {
     if (arah == Arah.Horizontal)
     {
         return(prevHorizontal != null ? prevHorizontal : this);
     }
     else
     {
         return(prevVertical != null ? prevVertical : this);
     }
 }
Exemple #7
0
    public void activateSelected(Arah arah, bool toNext, ref List <GameObject> allBoxObj)
    {
        allBoxObj.Add(this.gameObject);
        backCol.gameObject.SetActive(true);
        setToSelected();

        switch (arah)
        {
        case Arah.Horizontal:
            if (toNext)
            {
                if (nextHorizontal != null)
                {
                    nextHorizontal.activateSelected(Arah.Horizontal, true, ref allBoxObj);
                }
            }
            else
            {
                if (prevHorizontal != null)
                {
                    prevHorizontal.activateSelected(Arah.Horizontal, false, ref allBoxObj);
                }
            }


            break;

        case Arah.Vertical:
            if (toNext)
            {
                if (nextVertical != null)
                {
                    nextVertical.activateSelected(Arah.Vertical, true, ref allBoxObj);
                }
            }
            else
            {
                if (prevVertical != null)
                {
                    prevVertical.activateSelected(Arah.Vertical, false, ref allBoxObj);
                }
            }
            break;
        }
    }
Exemple #8
0
    public BoxTTS ClearAll(Arah arah, bool toNext)
    {
        if (wasAnswer)
        {
            Debug.Log("Tidak Dapat Dihapus");
            setToSelected();
        }
        else
        {
            currentAnswer = "";
        }

        if (arah == Arah.Vertical)
        {
            if (nextVertical != null && toNext)
            {
                nextVertical.ClearAll(arah, true);
            }
            if (prevVertical != null && !toNext)
            {
                return(prevVertical.ClearAll(arah, false));
            }
            else if (!toNext)
            {
                return(this);
            }
        }
        else
        {
            if (nextHorizontal != null && toNext)
            {
                nextHorizontal.ClearAll(arah, true);
            }
            if (prevHorizontal != null && !toNext)
            {
                return(prevHorizontal.ClearAll(arah, false));
            }
            else if (!toNext)
            {
                return(this);
            }
        }
        return(null);
    }
Exemple #9
0
    public BoxTTS getNextBox(Arah arah)
    {
        if (arah == Arah.Horizontal)
        {
            if (nextHorizontal != null && nextHorizontal.currentAnswer != "")
            {
                return(nextHorizontal.getNextBox(arah));
            }

            return(nextHorizontal != null?nextHorizontal:this);
        }
        else
        {
            if (nextVertical != null && nextVertical.currentAnswer != "")
            {
                return(nextVertical.getNextBox(arah));
            }
            return(nextVertical != null ? nextVertical : this);
        }
    }
Exemple #10
0
    public void SetObjSelected(BoxTTS box, Arah arah)
    {
        SoundBase.MAIN.PlaySound("Klik");

        if (Mathf.Abs(RightSoal.localPosition.x) < 1)
        {
            ShowRight();
        }

        int count = boxSelectedParent.childCount;

        for (int i = 0; i < count; i++)
        {
            boxSelectedParent.GetChild(0).GetComponent <BoxTTS>().setToSelected();
            boxSelectedParent.GetChild(0).GetChild(1).gameObject.SetActive(false);
            boxSelectedParent.GetChild(0).SetParent(boxNotSelectedParent);
        }

        List <GameObject> allObj = new List <GameObject>();

        box.activateSelected(ref allObj, ref currentArah, ref currentBtts, arah);


        if (currentBtts == null)
        {
            Debug.Log("BTTS NULL");
            return;
        }


        foreach (GameObject obj in allObj)
        {
            obj.transform.SetParent(boxSelectedParent);
        }
        currentBtts.setToFocus();

        cameraTarget    = currentBtts.transform.position;
        cameraTarget.z  = -10;
        cameraTarget.y -= 3;
        movingCamera    = true;
    }
        private static Block TransposisiBackward(Block b)
        {
            Block result = new Block();
            int   row, col, i;

            int N = (int)(Math.Floor(Math.Sqrt(b.Count - 1)) + 1);   // Ukuran grid NxN dari block yang disusun 2 dimensi

            // Menyediakan grid kosong
            int[][] grid = new int[N][];
            for (row = 0; row < N; row++)
            {
                grid[row] = new int[N];
                for (col = 0; col < N; col++)
                {
                    grid[row][col] = -1;
                }
            }
            // Menyediakan grid kosong untuk hasil transposisi
            int[][] grid2 = new int[N][];
            for (row = 0; row < N; row++)
            {
                grid2[row] = new int[N];
                for (col = 0; col < N; col++)
                {
                    grid2[row][col] = -1;
                }
            }

            // Mengisi grid dengan block
            row = 0;
            col = 0;
            i   = 0;
            while (i < b.Count)
            {
                grid[row][col] = b[i];

                col++;
                if (col >= N)
                {
                    col = 0;
                    row++;
                }
                i++;
            }

            //Console.WriteLine("Before:");
            //for (row = 0; row < N; row++)
            //{
            //    for (col = 0; col < N; col++)
            //    {
            //        Console.Write(String.Format("{0:D3} ", grid[row][col]));
            //    }
            //    Console.WriteLine();
            //}

            // Menggeser grid dengan aturan ant sebanyak -1 shift
            row = 0;
            col = 0;
            int  passed    = 2; // Cell yang telah dilewati
            Arah arah      = Arah.Kanan;
            int  rowToFill = 0;
            int  colToFill = 0;

            while (passed <= N * N)
            {
                // Geser cell dan tentukan arah gerakan berikutnya
                switch (arah)
                {
                case Arah.Atas:
                    row--;
                    if (row == 0)
                    {
                        arah = Arah.Kanan;       // Setelah ke atas pasti ke kanan
                    }
                    break;

                case Arah.Kanan:
                    col++;
                    if (row == 0)                // Ke bawah jika di row ke-0
                    {
                        arah = Arah.Bawah;
                    }
                    else if (grid2[row - 1][col] == -1)       // Sebaliknya, ke atas
                    {
                        arah = Arah.Atas;
                    }
                    break;

                case Arah.Bawah:
                    row++;
                    if (col == 0)                // Ke kanan jika di col ke-0
                    {
                        arah = Arah.Kanan;
                    }
                    else if (grid2[row][col - 1] == -1)      // Sebaliknya, ke kiri
                    {
                        arah = Arah.Kiri;
                    }
                    break;

                case Arah.Kiri:
                    col--;
                    if (col == 0)
                    {
                        arah = Arah.Bawah;       // Setelah ke kiri pasti ke bawah
                    }
                    break;
                }
                // Isi cell baru dengan toFill jika cell baru tidak kosong, persiapkan toFill berikutnya
                if (grid[row][col] != -1)
                {
                    grid2[rowToFill][colToFill] = grid[row][col];
                    rowToFill = row;
                    colToFill = col;
                }
                else
                {
                    grid2[row][col] = -2;   // Tandai dengan -2 (sudah pernah dikunjungi, namun tidak ada isinya
                }

                passed++;
            }
            // Isi cell awal dengan toFill yang terakhir
            grid2[rowToFill][colToFill] = grid[0][0];

            //Console.WriteLine("After:");
            //for (row = 0; row < N; row++)
            //{
            //    for (col = 0; col < N; col++)
            //    {
            //        Console.Write(String.Format("{0:D3} ", grid2[row][col]));
            //    }
            //    Console.WriteLine();
            //}

            // Mengisi hasil transposisi ke result
            for (row = 0; row < N; row++)
            {
                for (col = 0; col < N; col++)
                {
                    if (grid2[row][col] != -2)
                    {
                        result.Add((byte)grid2[row][col]);
                    }
                }
            }

            return(result);
        }
Exemple #12
0
    public void activateSelected(ref List <GameObject> allBoxObj, ref Arah currArah, ref BoxTTS prior, Arah arah)
    {
        allBoxObj.Add(this.gameObject);
        backCol.gameObject.SetActive(true);
        setToSelected();

        if (_currentAnswer == "")
        {
            prior = this;
        }


        if (arah == Arah.Horizontal)
        {
            currArah = Arah.Horizontal;
            if (nextHorizontal != null && _currentAnswer != "")
            {
                nextHorizontal.activateSelected(Arah.Horizontal, true, ref allBoxObj, ref prior);
            }
            else if (nextHorizontal != null)
            {
                nextHorizontal.activateSelected(Arah.Horizontal, true, ref allBoxObj);
            }
            else
            {
                prior = this;
            }


            if (prevHorizontal != null && _currentAnswer == "")
            {
                prevHorizontal.activateSelected(Arah.Horizontal, false, ref allBoxObj, ref prior);
            }
            else if (prevHorizontal != null)
            {
                prevHorizontal.activateSelected(Arah.Horizontal, false, ref allBoxObj);
            }
        }
        else if (arah == Arah.Vertical)
        {
            currArah = Arah.Vertical;
            if (nextVertical != null && _currentAnswer != "")
            {
                nextVertical.activateSelected(Arah.Vertical, true, ref allBoxObj, ref prior);
            }
            else if (nextVertical != null)
            {
                nextVertical.activateSelected(Arah.Vertical, true, ref allBoxObj);
            }
            else
            {
                prior = this;
            }



            if (prevVertical != null && _currentAnswer == "")
            {
                prevVertical.activateSelected(Arah.Vertical, false, ref allBoxObj, ref prior);
            }
            else if (prevVertical != null)
            {
                prevVertical.activateSelected(Arah.Vertical, false, ref allBoxObj);
            }
        }
    }
Exemple #13
0
    public void activateSelected(ref List <GameObject> allBoxObj, ref Arah currArah, ref BoxTTS prior)
    {
        // Jika dia adalah persimpangan
        if ((nextHorizontal != null || prevHorizontal != null) && (nextVertical != null || prevVertical != null))
        {
            this.gameObject.name = "persimpangan";
            Debug.Log("Persimpangan");
            return;
        }

        allBoxObj.Add(this.gameObject);
        backCol.gameObject.SetActive(true);
        setToSelected();

        if (_currentAnswer == "")
        {
            prior = this;
        }


        if (nextHorizontal != null || prevHorizontal != null)
        {
            currArah = Arah.Horizontal;
            if (nextHorizontal != null && _currentAnswer != "")
            {
                nextHorizontal.activateSelected(Arah.Horizontal, true, ref allBoxObj, ref prior);
            }
            else if (nextHorizontal != null)
            {
                nextHorizontal.activateSelected(Arah.Horizontal, true, ref allBoxObj);
            }
            else
            {
                prior = this;
            }


            if (prevHorizontal != null && _currentAnswer == "")
            {
                prevHorizontal.activateSelected(Arah.Horizontal, false, ref allBoxObj, ref prior);
            }
            else if (prevHorizontal != null)
            {
                prevHorizontal.activateSelected(Arah.Horizontal, false, ref allBoxObj);
            }
        }
        else if (nextVertical != null || prevVertical != null)
        {
            currArah = Arah.Vertical;
            if (nextVertical != null && _currentAnswer != "")
            {
                nextVertical.activateSelected(Arah.Vertical, true, ref allBoxObj, ref prior);
            }
            else if (nextVertical != null)
            {
                nextVertical.activateSelected(Arah.Vertical, true, ref allBoxObj);
            }
            else
            {
                prior = this;
            }



            if (prevVertical != null && _currentAnswer == "")
            {
                prevVertical.activateSelected(Arah.Vertical, false, ref allBoxObj, ref prior);
            }
            else if (prevVertical != null)
            {
                prevVertical.activateSelected(Arah.Vertical, false, ref allBoxObj);
            }
        }
    }
        public static void Main()
        {
            //distance sensor
            //triger (12), echo (13), 5V + G
            HC_SR04 sensor = new HC_SR04(Pins.GPIO_PIN_D12, Pins.GPIO_PIN_D13);
            //buzzer
            OutputPort Klakson = new OutputPort(Pins.GPIO_PIN_D0, false);
            //motor driver
            HBridge MotorDriver = new HBridge(SecretLabs.NETMF.Hardware.Netduino.PWMChannels.PWM_PIN_D5, Pins.GPIO_PIN_D4, SecretLabs.NETMF.Hardware.Netduino.PWMChannels.PWM_PIN_D6, Pins.GPIO_PIN_D7);
            //led indicator if there is an object in the front of robot
            OutputPort WarningLed = new OutputPort(Pins.GPIO_PIN_D1, false);
            OutputPort GoLed      = new OutputPort(Pins.GPIO_PIN_D2, false);

            //waiting till connect...
            if (!Microsoft.SPOT.Net.NetworkInformation.NetworkInterface.GetAllNetworkInterfaces()[0].IsDhcpEnabled)
            {
                // using static IP
                while (!System.Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable())
                {
                    ;                                                                             // wait for network connectivity
                }
            }
            else
            {
                // using DHCP
                while (IPAddress.GetDefaultLocalAddress() == IPAddress.Any)
                {
                    ;                                                         // wait for DHCP-allocated IP address
                }
            }
            //Debug print our IP address
            Debug.Print("Device IP: " + Microsoft.SPOT.Net.NetworkInformation.NetworkInterface.GetAllNetworkInterfaces()[0].IPAddress);

            // create mqtt client instance
            client = new MqttClient(IPAddress.Parse(MQTT_BROKER_ADDRESS));
            string clientId = Guid.NewGuid().ToString();

            client.Connect(clientId);
            SubscribeMessage();
            PublishMessage("/robot/state", "ONLINE");
            while (true)
            {
                long ticks = sensor.Ping();
                if (ticks > 0L)
                {
                    double inches = sensor.TicksToInches(ticks);
                    Debug.Print("jarak ke object :" + inches);

                    if (inches < 4)
                    {
                        jalan = Arah.Berhenti;
                        Klakson.Write(true);
                        WarningLed.Write(true);
                        GoLed.Write(false);
                        PublishMessage("/robot/status", "Watchout there is an object in the front of robot!");
                    }
                    else
                    {
                        Klakson.Write(false);
                        WarningLed.Write(false);
                        GoLed.Write(true);
                    }
                }
                //stop first before change direction or turn
                if (lastDirection != jalan)
                {
                    //stop before start new direction
                    MotorDriver.SetState(HBridge.Motors.Motor1, 0);
                    MotorDriver.SetState(HBridge.Motors.Motor2, 0);
                }

                switch (jalan)
                {
                case Arah.Maju:
                    MotorDriver.SetState(HBridge.Motors.Motor1, Speed);
                    MotorDriver.SetState(HBridge.Motors.Motor2, Speed);
                    break;

                case Arah.Mundur:
                    MotorDriver.SetState(HBridge.Motors.Motor1, (sbyte)(-Speed));
                    MotorDriver.SetState(HBridge.Motors.Motor2, (sbyte)(-Speed));
                    break;

                case Arah.Kiri:
                    MotorDriver.SetState(HBridge.Motors.Motor1, -50);
                    MotorDriver.SetState(HBridge.Motors.Motor2, 50);
                    break;

                case Arah.Kanan:
                    MotorDriver.SetState(HBridge.Motors.Motor1, 50);
                    MotorDriver.SetState(HBridge.Motors.Motor2, -50);
                    break;

                case Arah.Berhenti:
                    MotorDriver.SetState(HBridge.Motors.Motor1, 0);
                    MotorDriver.SetState(HBridge.Motors.Motor2, 0);
                    break;
                }
                lastDirection = jalan;
            }
        }
        public static void Main()
        {
            //distance sensor
            //triger (12), echo (13), 5V + G
            HC_SR04 sensor = new HC_SR04(Pins.GPIO_PIN_D12, Pins.GPIO_PIN_D13);
            //buzzer
            OutputPort Klakson = new OutputPort(Pins.GPIO_PIN_D0, false);
            //motor driver
            HBridge MotorDriver = new HBridge(SecretLabs.NETMF.Hardware.Netduino.PWMChannels.PWM_PIN_D5, Pins.GPIO_PIN_D4, SecretLabs.NETMF.Hardware.Netduino.PWMChannels.PWM_PIN_D6, Pins.GPIO_PIN_D7);
            //led indicator if there is an object in the front of robot
            OutputPort WarningLed = new OutputPort(Pins.GPIO_PIN_D1, false);
            OutputPort GoLed = new OutputPort(Pins.GPIO_PIN_D2, false);
   
            //waiting till connect...
            if (!Microsoft.SPOT.Net.NetworkInformation.NetworkInterface.GetAllNetworkInterfaces()[0].IsDhcpEnabled)
            {
                // using static IP
                while (!System.Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable()) ; // wait for network connectivity
            }
            else
            {
                // using DHCP
                while (IPAddress.GetDefaultLocalAddress() == IPAddress.Any) ; // wait for DHCP-allocated IP address
            }
            //Debug print our IP address
            Debug.Print("Device IP: " + Microsoft.SPOT.Net.NetworkInformation.NetworkInterface.GetAllNetworkInterfaces()[0].IPAddress);

            // create mqtt client instance 
            client = new MqttClient(IPAddress.Parse(MQTT_BROKER_ADDRESS));
            string clientId = Guid.NewGuid().ToString();
            client.Connect(clientId);
            SubscribeMessage();
            PublishMessage("/robot/state", "ONLINE");
            while (true)
            {
                long ticks = sensor.Ping();
                if (ticks > 0L)
                {
                    double inches = sensor.TicksToInches(ticks);
                    Debug.Print("jarak ke object :" + inches);

                    if (inches < 4)
                    {
                        jalan = Arah.Berhenti;
                        Klakson.Write(true);
                        WarningLed.Write(true);
                        GoLed.Write(false);
                        PublishMessage("/robot/status", "Watchout there is an object in the front of robot!");
                    }
                    else
                    {
                        Klakson.Write(false);
                        WarningLed.Write(false);
                        GoLed.Write(true);
                    }
                }
                //stop first before change direction or turn
                if (lastDirection != jalan)
                {
                    //stop before start new direction
                    MotorDriver.SetState(HBridge.Motors.Motor1, 0);
                    MotorDriver.SetState(HBridge.Motors.Motor2, 0);
                }
              
                switch (jalan)
                {
                    case Arah.Maju:
                        MotorDriver.SetState(HBridge.Motors.Motor1, Speed);
                        MotorDriver.SetState(HBridge.Motors.Motor2, Speed);
                        break;
                    case Arah.Mundur:
                        MotorDriver.SetState(HBridge.Motors.Motor1,(sbyte)(-Speed));
                        MotorDriver.SetState(HBridge.Motors.Motor2, (sbyte)(-Speed));
                        break;
                    case Arah.Kiri:
                        MotorDriver.SetState(HBridge.Motors.Motor1, -50);
                        MotorDriver.SetState(HBridge.Motors.Motor2, 50);
                        break;
                    case Arah.Kanan:
                        MotorDriver.SetState(HBridge.Motors.Motor1, 50);
                        MotorDriver.SetState(HBridge.Motors.Motor2, -50);
                        break;
                    case Arah.Berhenti:
                        MotorDriver.SetState(HBridge.Motors.Motor1, 0);
                        MotorDriver.SetState(HBridge.Motors.Motor2, 0);
                        break;
                }
                lastDirection = jalan;
            }

        }
        static void client_MqttMsgPublishReceived(object sender, MqttMsgPublishEventArgs e)
        {
            string Message = new string(Encoding.UTF8.GetChars(e.Message));
            if (Message.IndexOf(":") < 1) return;
            // handle message received 
            Debug.Print("Message Received = " + Message);
            string[] CmdStr = Message.Split(':');
            if (CmdStr[0] == "MOVE")
            {
                switch (CmdStr[1])
                {
                    case "Forward":
                        jalan = Arah.Maju;
                        break;
                    case "Backward":
                        jalan = Arah.Mundur;
                        break;
                    case "Left":
                        jalan = Arah.Kiri;
                        break;
                    case "Right":
                        jalan = Arah.Kanan;
                        break;
                    case "Stop":
                        jalan = Arah.Berhenti;
                        break;
                }
                if (lastDirection == jalan)
                {
                    if (Speed == 0) Speed = HalfSpeed;
                    else Speed = FullSpeed;
                }
                else
                {
                    Speed = HalfSpeed;
                }
                PublishMessage("/robot/status", "Robot Status:" + CmdStr[1]);

            }
            else if(CmdStr[0]=="REQUEST" && CmdStr[1]=="STATUS")
            {
                PublishMessage("/robot/state", "ONLINE");
            }
        }