я - новичок, так что не судите строго. Я разрабатываю приложение на Java под Android. Я связываюсь с Arduino через блютуз модуль HC-06.Код - рабочий, сторонний поток создан, информацию с Arduino я получаю, Но, каждый раз, когда приходит бит, он уникален (отображается на экране уникально) в виде [B@xxxxxxx где xxxxxxx- рандомные числа/ буквы пример : [B@a102825, [B@9592827 итд. Но Ардуино все время посылает одно и то же число - 0.
Мой код Android приложения
MainActivity.java
public class MainActivity extends AppCompatActivity {
//Сокет, с помощью которого мы будем отправлять данные на Arduino
BluetoothSocket clientSocket;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//Включаем bluetooth. Если он уже включен, то ничего не произойдет
String enableBT = BluetoothAdapter.ACTION_REQUEST_ENABLE;
startActivityForResult(new Intent(enableBT), 0);
BluetoothAdapter bluetooth = BluetoothAdapter.getDefaultAdapter();
try{
//Устройство с данным адресом - наш Bluetooth Bee
//Адрес опредеяется следующим образом: установите соединение
//между ПК и модулем (пин: 1234), а затем посмотрите в настройках
//соединения адрес модуля. Скорее всего он будет аналогичным.
BluetoothDevice device = bluetooth.getRemoteDevice("98:D3:31:FB:B3:10");
//Инициируем соединение с устройством
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
protected void onStart() {
super.onStart();
MYAsync myAsync=new MYAsync();
myAsync.execute();
}
class MYAsync extends AsyncTask<Void, String, Void> {
@Override
protected Void doInBackground(Void... voids) {
final InputStream mmInStream;
InputStream tmpIn = null;
try {
tmpIn = clientSocket.getInputStream();
} catch (IOException e) {
e.printStackTrace();
}
mmInStream = tmpIn;
byte[] buffer = new byte[1024];
int bytes ;// bytes returned from read()
while (true){
buffer= new byte[1];
try {
bytes= mmInStream.read(buffer);
} catch (IOException e) {
e.printStackTrace();
}
String str = buffer.toString();
publishProgress(str);
}
}
@Override
protected void onProgressUpdate(String... values) {
super.onProgressUpdate(values);
TextView text = (TextView) findViewById(R.id.textView1);
text.setText(values[0]);
}
}
}
Код Ардуино
int BUPin=7;
void setup() {
//Устанавливаем скорость UART
Serial.begin(9600);
pinMode(BUPin, INPUT);
}
void loop() {
//Если кнопка не нажата
if (digitalRead(BUPin)==0) {
Serial.print(0);
}
else{
Serial.print(1);
}
delay(1000);
}
P.S Я начинающий, и могу не до конца понимать, как передается битовая информация и что с ней происходит и как ее прочитать, так что я думаю, что вся загвоздка кроется в методике прочтения и вывода на экран. Что я получаю на сериал порт с ПК (что посылается Ардуинкой по блютуз).
Решил проблему так.
byte[] buffer = new byte[1024];
int bytes = 0;// bytes returned from read()
StringBuilder sb = new StringBuilder();
while (true){
buffer= new byte[5];
try {
bytes= mmInStream.read(buffer);
} catch (IOException e) {
e.printStackTrace();
}
if(bytes==5){
String strIncom = new String(buffer, 0, bytes);
sb.append(strIncom);
publishProgress(strIncom );
sb.delete(0,5);
}
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
У меня есть задача, нужно сделать фильтры для стримов с разными типами объектов
Пытаюсь сделать тест, имитация работы 2х пользователей над док-мИспользую библиотеки RestAssured и JerseyTest
Подскажите, пожалуйста, как правильно написать взаимодействие между двумя контроллерами
Я столкнулся с тем, что не понимаю, как обычно реализуется фронт для Java-приложенияУ меня есть несколько предположений о том, как это может...