Привет! Сегодня мы начнем с простого - подключение Sphero к телефону и попробуем поиграть с LED и ускорением. Для начала скачаем Sphero SDK с github, всю основную и дополнительную информацию можно найти на официальном сайте и блоге.
И так создадим свой проект, смотря кто в чем работает Eclipse или Android Studio. В папке с SDK находим папку library, в ней папка lib, содержащая необходимые нам библиотеки.
<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-устройств, если он был запущен, т.к. он значительно потребляет батарею. Для этого в нам понадобиться несколько манипуляций в методе 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 и нажимаем на кнопку - шар резко начинает газовать и через две секунды останавливается).
Что же, сегодня мы разобрали как подсоединиться и заставить робота двигаться, ну и менять цвет. Это базовые функции и разобраться с ними не так трудно, главное веселье впереди. Шар, сам по себе - контроллер, как плата имеет внутреннюю память, в которой хранятся все данные профиля заложенного в него. В дальнейшем мы рассмотрим макросы, способы их написания и интерпретации, ачивки(да их тоже можно вложить в робота;) ) и многое другое. А пока, всем легкого кода и не пыльных проектов.
Комментариев нет :
Отправить комментарий