Android\Arduino bluetooth

Ответить
Dsystems
Сообщения: 3
Зарегистрирован: 29 июл 2013, 14:30

Android\Arduino bluetooth

Сообщение Dsystems » 20 ноя 2013, 19:56

Всем привет :)
Пытаюсь сделать робота, который будет управляться с помощью ардуино, по блютусу приконнекченым к планшету на андроиде)
В общем код MainActivity.java таков :

Код: Выделить всё

package ru.amperka.arduinobtled;
 
import java.io.IOException;
import java.io.OutputStream;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
 
import android.app.Activity;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothSocket;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Toast;
import android.widget.ToggleButton;
 
public class MainActivity extends Activity implements View.OnClickListener{
 
    //Экземпляры классов наших кнопок
    ToggleButton redButton;
    ToggleButton greenButton;
 
    //Сокет, с помощью которого мы будем отправлять данные на Arduino
    BluetoothSocket clientSocket;
 
    //Эта функция запускается автоматически при запуске приложения
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        //"Соединям" вид кнопки в окне приложения с реализацией
        redButton = (ToggleButton) findViewById(R.id.toggleRedLed);
        greenButton = (ToggleButton) findViewById(R.id.toggleGreenLed);
 
        //Добавлем "слушатель нажатий" к кнопке
        redButton.setOnClickListener(this);
        greenButton.setOnClickListener(this);
 
        //Включаем bluetooth. Если он уже включен, то ничего не произойдет
        String enableBT = BluetoothAdapter.ACTION_REQUEST_ENABLE;
        startActivityForResult(new Intent(enableBT), 0);
 
        //Мы хотим использовать тот bluetooth-адаптер, который задается по умолчанию
        BluetoothAdapter bluetooth = BluetoothAdapter.getDefaultAdapter();
 
        //Пытаемся проделать эти действия
        try{
            //Устройство с данным адресом - наш Bluetooth Bee
            //Адрес опредеяется следующим образом: установите соединение
            //между ПК и модулем (пин: 1234), а затем посмотрите в настройках
            //соединения адрес модуля. Скорее всего он будет аналогичным.
            BluetoothDevice device = bluetooth.getRemoteDevice("00:13:02:01:00:09"); 
 
            //Инициируем соединение с устройством
            Method m = device.getClass().getMethod(
                    "createRfcommSocket", new Class[] {int.class});
 
            clientSocket = (BluetoothSocket) m.invoke(device, 1);
            clientSocket.connect();
 
            //В случае появления любых ошибок, выводим в лог сообщение
        } catch (IOException e) {
            Log.d("BLUETOOTH", e.getMessage());
        } catch (SecurityException e) {
            Log.d("BLUETOOTH", e.getMessage());
        } catch (NoSuchMethodException e) {
            Log.d("BLUETOOTH", e.getMessage());
        } catch (IllegalArgumentException e) {
            Log.d("BLUETOOTH", e.getMessage());
        } catch (IllegalAccessException e) {
            Log.d("BLUETOOTH", e.getMessage());
        } catch (InvocationTargetException e) {
            Log.d("BLUETOOTH", e.getMessage());
        }
 
        //Выводим сообщение об успешном подключении
        Toast.makeText(getApplicationContext(), "CONNECTED", Toast.LENGTH_LONG).show();
 
    }
 
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
 
 
    //Как раз эта функция и будет вызываться 
 
    @Override
    public void onClick(View v) {
 
        //Пытаемся послать данные
        try {
            //Получаем выходной поток для передачи данных
            OutputStream outStream = clientSocket.getOutputStream();
 
            int value = 0;
 
            //В зависимости от того, какая кнопка была нажата, 
            //изменяем данные для посылки
            if (v == redButton) {
                value = (redButton.isChecked() ? 1 : 0) + 60;
            } else if (v == greenButton) {
                value = (greenButton.isChecked() ? 1 : 0) + 70;
            }
 
            //Пишем данные в выходной поток
            outStream.write(value);
 
        } catch (IOException e) { 
            //Если есть ошибки, выводим их в лог
            Log.d("BLUETOOTH", e.getMessage());
        }
    }
}
Код и все остальное я взял с сайта амперка ру http://u.to/vwIRBQ

В общем все работает, но есть одно но
Изображение

Сейчас светодиод горит при нажатии на кнопку, и выключается при повторном нажатии на эту же кнопку

Собственно вопрос: как сделать так, что бы лампочка горела при нажатии, и погасала при "отжатии" кнопки?

Я понимаю реализацию так: пока кнопка нажата, на ардуино посылаются единички, а когда отжата - нолики

Сам я только начинаю вникать во все это, гугл по этому вопросу молчит :(

Аватара пользователя
trew
Сообщения: 450
Зарегистрирован: 28 сен 2013, 17:34

Re: Android\Arduino bluetooth

Сообщение trew » 20 ноя 2013, 20:24

Могу посоветовать пройти все уроки, на этом сайте, от 1-го до 102-го.
Или от 102 до 1-го.
Урок 102. Touch – обработка касания
Последний раз редактировалось trew 20 ноя 2013, 21:03, всего редактировалось 1 раз.
Когда выкладываете код на форум - код оформляйте. Редактор - поищите слова Geshi Syntax -Java. (или xml)
Свои сообщения можно редактировать - кнопка edit.

Аватара пользователя
trew
Сообщения: 450
Зарегистрирован: 28 сен 2013, 17:34

Re: Android\Arduino bluetooth

Сообщение trew » 20 ноя 2013, 21:01

[syntax=java]if (v == redButton) {
value = (redButton.isChecked() ? 1 : 0) + 60;
} else if (v == greenButton) {
value = (greenButton.isChecked() ? 1 : 0) + 70;
} [/syntax]
Эти условия означают следующее:
если нажата кнопка значит =1, если отжата значит =0. и к этому значению прибавляют 60.
т.е. 60 и 61 - это все значения для первой кнопки.
70 и 71 - это значения для второй кнопки.
Когда выкладываете код на форум - код оформляйте. Редактор - поищите слова Geshi Syntax -Java. (или xml)
Свои сообщения можно редактировать - кнопка edit.

Dsystems
Сообщения: 3
Зарегистрирован: 29 июл 2013, 14:30

Re: Android\Arduino bluetooth

Сообщение Dsystems » 20 ноя 2013, 22:29

trew писал(а):[syntax=java]if (v == redButton) {
value = (redButton.isChecked() ? 1 : 0) + 60;
} else if (v == greenButton) {
value = (greenButton.isChecked() ? 1 : 0) + 70;
} [/syntax]
Эти условия означают следующее:
если нажата кнопка значит =1, если отжата значит =0. и к этому значению прибавляют 60.
т.е. 60 и 61 - это все значения для первой кнопки.
70 и 71 - это значения для второй кнопки.
оооо
102 урок как раз об этом)
я изучил первые 18 уроков, буду двигаться дальше : )
только вот не понятно, для чего прибавляют 60? и почему именно эти числа?

Аватара пользователя
trew
Сообщения: 450
Зарегистрирован: 28 сен 2013, 17:34

Re: Android\Arduino bluetooth

Сообщение trew » 20 ноя 2013, 22:52

Вы комментарий читали, для файла bluetooth.ino ?
Когда выкладываете код на форум - код оформляйте. Редактор - поищите слова Geshi Syntax -Java. (или xml)
Свои сообщения можно редактировать - кнопка edit.

Dsystems
Сообщения: 3
Зарегистрирован: 29 июл 2013, 14:30

Re: Android\Arduino bluetooth

Сообщение Dsystems » 20 ноя 2013, 22:57

trew писал(а):Вы комментарий читали, для файла bluetooth.ino ?
аааа
Все, дико извиняюсь за невнимательность : )

Ответить