Пытаюсь сделать робота, который будет управляться с помощью ардуино, по блютусу приконнекченым к планшету на андроиде)
В общем код 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());
}
}
}
В общем все работает, но есть одно но
Сейчас светодиод горит при нажатии на кнопку, и выключается при повторном нажатии на эту же кнопку
Собственно вопрос: как сделать так, что бы лампочка горела при нажатии, и погасала при "отжатии" кнопки?
Я понимаю реализацию так: пока кнопка нажата, на ардуино посылаются единички, а когда отжата - нолики
Сам я только начинаю вникать во все это, гугл по этому вопросу молчит