среда, 10 сентября 2014 г.

[Android] Sphero SDK часть 1. Быстрый старт






       Привет! Сегодня мы начнем с простого - подключение Sphero к телефону и попробуем поиграть с LED и ускорением. Для начала скачаем Sphero SDK с github, всю основную и дополнительную информацию можно найти на официальном сайте и блоге.




      И так создадим свой проект, смотря кто в чем работает Eclipse или Android Studio. В папке с SDK находим папку library, в ней папка lib, содержащая необходимые нам библиотеки.


    Добавляем их в проект. Добавить поддержку Sphero довольно просто и даже не приходиться ничего менять в старом проекте, если вы интегрируете его в уже существующий. Открываем наш главный layout.xml и добавляем новый блок SpheroConnectionView. Я еще добавил кнопку, в дальнейшем она нам понадобиться, что бы заставить шар двигаться. 
  

 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="ru.nuclominus.numerology.SpheroFragment">

    <orbotix.view.connection.SpheroConnectionView
        android:id="@+id/sphero_connection_view"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:background="#FFF" />

    <Button
        android:id="@+id/button_move"
        android:layout_width="80dp"
        android:layout_height="40dp">
    </Button>

 </FrameLayout>



    Дальше переходим конкретно к коду :).

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Я использовал фрагмент для примера
        View viewInflater = inflater.inflate(R.layout.fragment_sphero, container, false);

        // объявляем объект нашего окна конекта со Sphero
        mSpheroConnectionView = (SpheroConnectionView) viewInflater.findViewById(R.id.sphero_connection_view);
        button_move = (Button)viewInflater.findViewById(R.id.button_move);

        // Создаем слушателя, который сообщит нам о удачном соединении или нет с устройством
        ConnectionListener mConnectionListener = new ConnectionListener() {

            // Если мы подсоединились
            @Override
            public void onConnected(Robot sphero) {
                // скрываем окно соединения
                mSpheroConnectionView.setVisibility(View.INVISIBLE);
                mSphero = (Sphero) sphero;

                // ставим подсветку на максимум и делаем ее синей
                mSphero.setBackLEDBrightness(1.0f);
                mSphero.setColor(0, 0, 255);
            }

            // Если не удалось подсоединиться. Тут уже по желанию, можно скрыть окно и вывести алерт
            @Override
            public void onConnectionFailed(Robot sphero) {
            }

            // Если мы сбросили соединение, выключили блютус или закрыли приложение
            @Override
            public void onDisconnected(Robot sphero) {
                // мы начинаем заново искать робота
                mSpheroConnectionView.startDiscovery();
            }
        };

        // Назначаем слушателя вьюшке
        mSpheroConnectionView.addConnectionListener(mConnectionListener);
        button_move.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                move();
            }
        });

        return viewInflater;
    }

    Теперь не забудем в манифест добавить две строчки для доступа к блютусу.

    <uses-permission android:name="android.permission.BLUETOOTH" />
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />

   Запустив приложение увидим сообщение о том, что не включен блютус, если он еще не включен.


   Включив блютус, запускаем еще раз и включаем сам Sphero и видим на экране появилось поле выбора подключения, как в стандартном списке блютус когда мы его запускам. Выбираем наш девайс и через мгновение вьюшка исчезает, а наш шар светиться синим).




   Есть еще пару моментов, которые нельзя пропускать мимо ушей. После того как вы свернули приложение, настоятельно рекомендуется выключать поиск Sphero-устройств, если он был запущен, т.к. он значительно потребляет батарею. Для этого в нам понадобиться несколько манипуляций в методе onPause().

    @Override
    protected void onPause() {
        super.onPause();
        //выключить поиск блютусом устройств
        BluetoothAdapter.getDefaultAdapter().cancelDiscovery();
        if (mSphero != null) {
            // если мы подключились к Sphero - выключаем его
            mSphero.disconnect();
        }
    }
   
    И еще момент - если мы возвращаемся в приложение, свернутое в бэкграунде. Все очень просто, мы восстанавливаем соединение.  

    @Override
    protected void onResume() {
        super.onResume();
        mSpheroConnectionView.startDiscovery();
    }
   
    Хорошо, к шарику мы подсоединились, давайте заставим его двигаться. Объявим новую функцию.

    private void move() {
        if(mSphero != null) {
            // посылаем команду шару - двигаться на полной скорости вперед.
            mSphero.drive(0.0f, 1.0f);
            final Handler handler = new Handler();
            handler.postDelayed(new Runnable() {

                @Override
                public void run() {
                    // через две секунды останавливаем его.
                    mSphero.stop();
                }
            }, 2000);

        }
    }
     
   Привязываем функцию к кнопке, запускаем приложение, соединяемся со Sphero и нажимаем на кнопку - шар резко начинает газовать и через две секунды останавливается). 




    Что же, сегодня мы разобрали как подсоединиться и заставить робота двигаться, ну и менять цвет. Это базовые функции и разобраться с ними не так трудно, главное веселье впереди. Шар, сам по себе - контроллер, как плата имеет внутреннюю память, в которой хранятся все данные профиля заложенного в него. В дальнейшем мы рассмотрим макросы, способы их написания и интерпретации, ачивки(да их тоже можно вложить в робота;) ) и многое другое. А пока, всем легкого кода и не пыльных проектов.




Комментариев нет :

Отправить комментарий