Android в Arduino через Bluetooth. Приложение не отправляет строку

Я нашел в Интернете какой-то код и изменил его. Пытаюсь отправить короткую строку по Bluetooth. Я использую Bluetooth-модуль HC-05.

Я могу подключить свое устройство Android к модулю, но не могу отправить строку на свой Arduino. У меня есть: 1 EditText, чтобы ввести мою строку.

2 кнопки:

-1 для отправки

-2 для подключения

Не могли бы вы просмотреть мой код? Спасибо:)

Код Android ...

    private BluetoothDevice device;
    private BluetoothSocket socket;
    private OutputStream outputStream;


    String command;//string variable that will store value to be transmitted to the bluetooth module

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button BtSend = findViewById(R.id.BtSend);
        Button BtVerbinden = findViewById(R.id.BtVerbinden);
        final EditText EtEingabe = findViewById(R.id.EtEingabe);
        BtSend.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                command = EtEingabe.getText().toString();
                try {
                    outputStream.write(command.getBytes());
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

        });


        //Button that connects the device to the bluetooth module when pressed
        BtVerbinden.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                if (BTinit()) {
                    BTconnect();
                }

            }
        });
    }

    public boolean BTinit() {
        boolean found = false;

        BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();

        if (bluetoothAdapter == null) //Checks if the device supports bluetooth
        {
            Toast.makeText(getApplicationContext(), "Device doesn't support bluetooth", Toast.LENGTH_SHORT).show();
        }

        if (!bluetoothAdapter.isEnabled())
        {
            Intent enableAdapter = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
            startActivityForResult(enableAdapter, 0);

            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }

        Set<BluetoothDevice> bondedDevices = bluetoothAdapter.getBondedDevices();

        if (bondedDevices.isEmpty())
        {
            Toast.makeText(getApplicationContext(), "Please pair the device first", Toast.LENGTH_SHORT).show();
        } else {
            for (BluetoothDevice iterator : bondedDevices) {
                if (iterator.getAddress().equals(DEVICE_ADDRESS)) {
                    device = iterator;
                    found = true;
                    break;
                }
            }
        }

        return found;
    }

    public boolean BTconnect() {
        boolean connected = true;

        try {
            socket = device.createRfcommSocketToServiceRecord(PORT_UUID); //Creates a socket to handle the outgoing connection
            socket.connect();

            Toast.makeText(getApplicationContext(),
                    "Connection to bluetooth device successful", Toast.LENGTH_LONG).show();
        } catch (IOException e) {
            e.printStackTrace();
            connected = false;
        }

        if (connected) {
            try {
                outputStream = socket.getOutputStream(); //gets the output stream of the socket
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        if (outputStream == null) {
            try {
                outputStream = socket.getOutputStream();
            } catch (IOException e) {
            }
        }
        return connected;
    }

    @Override
    protected void onStart() {
        super.onStart();
    }

}

Android XML ...

<?xml version = "1.0" encoding = "utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android = "http://schemas.android.com/apk/res/android"
    xmlns:app = "http://schemas.android.com/apk/res-auto"
    xmlns:tools = "http://schemas.android.com/tools"
    android:layout_width = "match_parent"
    android:layout_height = "match_parent"
    tools:context = "com.example.swini.gimbalarduino.MainActivity">

    <Button
        android:id = "@+id/BtSend"
        android:layout_width = "wrap_content"
        android:layout_height = "wrap_content"
        android:layout_marginBottom = "184dp"
        android:layout_marginEnd = "8dp"
        android:layout_marginStart = "8dp"
        android:text = "Send"
        app:layout_constraintBottom_toBottomOf = "parent"
        app:layout_constraintEnd_toEndOf = "parent"
        app:layout_constraintStart_toStartOf = "parent" />

    <EditText
        android:id = "@+id/EtEingabe"
        android:layout_width = "wrap_content"
        android:layout_height = "wrap_content"
        android:layout_marginEnd = "8dp"
        android:layout_marginStart = "8dp"
        android:layout_marginTop = "220dp"
        android:ems = "10"
        android:hint = "Hoi"
        android:inputType = "textPersonName"
        android:text = "Text"
        app:layout_constraintEnd_toEndOf = "parent"
        app:layout_constraintHorizontal_bias = "0.503"
        app:layout_constraintStart_toStartOf = "parent"
        app:layout_constraintTop_toTopOf = "parent" />

    <Button
        android:id = "@+id/BtVerbinden"
        android:layout_width = "wrap_content"
        android:layout_height = "wrap_content"
        android:layout_marginEnd = "8dp"
        android:layout_marginStart = "8dp"
        android:layout_marginTop = "8dp"
        android:text = "Connect"
        app:layout_constraintEnd_toEndOf = "parent"
        app:layout_constraintStart_toStartOf = "parent"
        app:layout_constraintTop_toTopOf = "parent" />

</android.support.constraint.ConstraintLayout>

Какую именно ошибку вы получаете, в какой строке и каковы значения переменных в этой строке?

LordWilmore 03.04.2018 16:57

Я не получаю ошибок. У меня нет ввода String на моем Arduino, поэтому я думаю, что он не отправляет.

Michael Schwingshackl 03.04.2018 16:58

Мой Arduino CodeString myString = "0"; int iDelay = 0; void setup() { pinMode(13, OUTPUT); Serial.begin(300); } void loop() { while (Serial.available()) { myString = Serial.readString(); } iDelay = myString.toInt(); if (myString! = "0") { digitalWrite(13, HIGH); delay(iDelay * 1000); digitalWrite(13, LOW); delay(iDelay*1000); } }

Michael Schwingshackl 03.04.2018 17:02

Ваше приложение подключено к модулю Bluetooth HC-05 или нет? Если он подключен, я предоставлю вам рабочий код, который вам нужен.

Rishabh Rawat 03.04.2018 18:11

Да, это. Значит, модуль мигает после подключения к смартфону. Но светодиод не мигает.

Michael Schwingshackl 03.04.2018 18:42
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
5
1 477
2

Ответы 2

Попробуйте использовать этот код, но этот код работает в Фрагмент, поэтому внимательно измените Код в соответствии с вашей деятельностью.

  package com.example.rishabhrawat.tablayoutapp;
  import android.app.Fragment;
  import android.app.ProgressDialog;
  import android.bluetooth.BluetoothAdapter;
  import android.bluetooth.BluetoothDevice;
  import android.bluetooth.BluetoothSocket;
  import android.content.ActivityNotFoundException;
  import android.content.BroadcastReceiver;
  import android.content.Context;
  import android.content.Intent;
  import android.media.Image;
  import android.os.AsyncTask;
  import android.os.Bundle;
  import android.speech.RecognizerIntent;
  import android.support.annotation.Nullable;
  import android.view.LayoutInflater;
  import android.view.View;
  import android.view.ViewGroup;
  import android.widget.AdapterView;
  import android.widget.ArrayAdapter;
  import android.widget.Button;
  import android.widget.ImageView;
  import android.widget.ListView;
  import android.widget.TextView;
  import android.widget.Toast;
  import java.io.IOException;
  import java.util.ArrayList;
  import java.util.Locale;
  import java.util.Set;
  import java.util.UUID;

  import static android.app.Activity.RESULT_OK;

/**
* Created by Rishabh Rawat on 6/18/2017.
*/

public class OfflineVideo extends android.support.v4.app.Fragment {


Button f,r,l,b,s,dis;
ListView listView;
ImageView mic;
BluetoothAdapter adapter;
private Set<BluetoothDevice> paireddevices;
private String address;

BluetoothSocket btSocket = null;
private boolean isBtConnected = false;
private ProgressDialog progress;

private final int REQ_CODE_SPEECH_INPUT = 100;

static final UUID myUUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");


@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {

    View view=inflater.inflate(R.layout.offlinevideo,container,false);

    f=(Button)view.findViewById(R.id.forward);
    r=(Button)view.findViewById(R.id.right);
    l=(Button)view.findViewById(R.id.left);
    b=(Button)view.findViewById(R.id.backward);
    s=(Button)view.findViewById(R.id.stop);
    dis=(Button)view.findViewById(R.id.discover);
    mic=(ImageView)view.findViewById(R.id.mic);
    listView=(ListView)view.findViewById(R.id.listview);

    f.setEnabled(false);
    r.setEnabled(false);
    l.setEnabled(false);
    b.setEnabled(false);
    s.setEnabled(false);
    mic.setEnabled(false);


   adapter=BluetoothAdapter.getDefaultAdapter();


    dis.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
         ShowPairedDevices();
        }
    });

    f.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            forward();
        }
    });

    r.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            right();
        }
    });

    l.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            left();
        }
    });

    b.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            backward();
        }
    });

    s.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            stop();
        }
    });

    mic.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
          VoiceInput();
        }
    });

    return view;
}

public void ShowPairedDevices()
{
    paireddevices=adapter.getBondedDevices();
    ArrayList list = new ArrayList();
    if (paireddevices.size()>0)
    {
        for(BluetoothDevice bt : paireddevices)
        {
            list.add(bt.getName() + "\n" + bt.getAddress());
        }
    }
    else
    {
        Toast.makeText(getContext(), "No Paired Bluetooth Devices Found.", Toast.LENGTH_LONG).show();
    }
    final ArrayAdapter adapter=new ArrayAdapter(getActivity(), android.R.layout.simple_list_item_1, list);
    listView.setAdapter(adapter);
    listView.setOnItemClickListener(myclicklistner);
}


private AdapterView.OnItemClickListener myclicklistner= new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> av, View v, int pos, long id) {
        String info = ((TextView) v).getText().toString();
        address = info.substring(info.length() - 17);
        new  connectbt().execute();

    }
};


private class connectbt extends AsyncTask<Void, Void, Void>  // UI thread
{
    private boolean ConnectSuccess = true; //if it's here, it's almost connected

    @Override
    protected void onPreExecute()
    {
        progress = ProgressDialog.show(getActivity(), "Connecting...", "Please wait!!!");  //show a progress dialog
    }

    @Override
    protected Void doInBackground(Void... devices) //while the progress dialog is shown, the connection is done in background
    {
        try
        {
            if (btSocket == null || !isBtConnected)
            {
                adapter = BluetoothAdapter.getDefaultAdapter();//get the mobile bluetooth device
                BluetoothDevice dispositivo = adapter.getRemoteDevice(address);//connects to the device's address and checks if it's available
                btSocket = dispositivo.createInsecureRfcommSocketToServiceRecord(myUUID);//create a RFCOMM (SPP) connection
                BluetoothAdapter.getDefaultAdapter().cancelDiscovery();
                btSocket.connect();//start connection
            }
        }
        catch (IOException e)
        {
            ConnectSuccess = false;//if the try failed, you can check the exception here
        }
        return null;
    }
    @Override
    protected void onPostExecute(Void result) //after the doInBackground, it checks if everything went fine
    {
        super.onPostExecute(result);

        if (!ConnectSuccess)
        {
           Toast.makeText(getActivity().getApplicationContext(),"Connection Failed Please Try again later",Toast.LENGTH_SHORT).show();
        }
        else
        {
            Toast.makeText(getActivity().getApplicationContext(), "Successfully Connected ", Toast.LENGTH_SHORT).show();
            f.setEnabled(true);
            r.setEnabled(true);
            l.setEnabled(true);
            b.setEnabled(true);
            s.setEnabled(true);
            mic.setEnabled(true);
            isBtConnected = true;
        }
        progress.dismiss();
    }
}


public void toast(String message)
{
    Toast.makeText(getActivity().getApplicationContext(), message, Toast.LENGTH_SHORT).show();
}
private void forward()
{
    if (btSocket!=null)
    {
        try
        {
            btSocket.getOutputStream().write("F".toString().getBytes());
        }
        catch (IOException e)
        {
            toast("Error");
        }
    }
}

private void left()
{
    if (btSocket!=null)
    {
        try
        {
            btSocket.getOutputStream().write("L".toString().getBytes());
        }
        catch (IOException e)
        {
            toast("Error");
        }
    }
}

private void right()
{
    if (btSocket!=null)
    {
        try
        {
            btSocket.getOutputStream().write("R".toString().getBytes());
        }
        catch (IOException e)
        {
            toast("Error");
        }
    }
}
private void backward()
{
    if (btSocket!=null)
    {
        try
        {
            btSocket.getOutputStream().write("B".toString().getBytes());
        }
        catch (IOException e)
        {
            toast("Error");
        }
    }
}
private void stop()
{
    if (btSocket!=null)
    {
        try
        {
            btSocket.getOutputStream().write("S".toString().getBytes());
        }
        catch (IOException e)
        {
            toast("Error");
        }
    }
}


public void VoiceInput()
{

    Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
    intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
            RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
    intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, Locale.getDefault());
    intent.putExtra(RecognizerIntent.EXTRA_PROMPT,
            "Speak Command for Robot");
    try {
        startActivityForResult(intent, REQ_CODE_SPEECH_INPUT);
    } catch (ActivityNotFoundException a) {

    }
}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode==REQ_CODE_SPEECH_INPUT)
    {
        if (resultCode==RESULT_OK)
        {
            ArrayList<String> result = data
                    .getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
            if (result.get(0).equals("forward"))
            {
                forward();
            }
            else if (result.get(0).equals("backward"))
            {
                backward();
            }
            else if (result.get(0).equals("stop"))
            {
                stop();
            }
            else if (result.get(0).equals("left"))
            {
                left();
            }
            else if (result.get(0).equals("right"))
            {
                right();
            }
            else
            {
                Toast.makeText(getActivity(), result.get(0), Toast.LENGTH_SHORT).show();
            }
        }
    }
}
}

Файл макета

<?xml version = "1.0" encoding = "utf-8"?>
<RelativeLayout xmlns:android = "http://schemas.android.com/apk/res/android"
xmlns:app = "http://schemas.android.com/apk/res-auto"
android:orientation = "vertical" android:layout_width = "match_parent"
android:layout_height = "match_parent">

<Button
    android:id = "@+id/forward"
    android:layout_width = "wrap_content"
    android:layout_height = "wrap_content"
    android:text = "Forward"
    android:background = "#00bfff"
    android:textColor = "#fff"
    android:layout_above = "@+id/stop"
    android:layout_alignStart = "@+id/stop"
    android:layout_marginBottom = "27dp" />

<Button
    android:id = "@+id/backward"
    android:background = "#00bfff"
    android:textColor = "#fff"
    android:layout_width = "wrap_content"
    android:layout_height = "wrap_content"
    android:layout_alignStart = "@+id/forward"
    android:layout_centerVertical = "true"
    android:text = "Backward"
    />

<Button
    android:id = "@+id/left"
    android:layout_width = "wrap_content"
    android:layout_height = "wrap_content"
    android:layout_marginBottom = "24dp"
    android:layout_marginEnd = "14dp"
    android:text = "Left"
    android:background = "#00bfff"
    android:textColor = "#fff"
    android:layout_above = "@+id/backward"
    android:layout_alignParentEnd = "true" />

<Button
    android:id = "@+id/right"
    android:layout_width = "wrap_content"
    android:layout_height = "wrap_content"
    android:layout_alignParentStart = "true"
    android:background = "#00bfff"
    android:textColor = "#fff"
    android:layout_alignTop = "@+id/left"
    android:layout_marginStart = "17dp"
    android:text = "Right" />

<Button
    android:id = "@+id/stop"
    android:layout_width = "wrap_content"
    android:layout_height = "wrap_content"
    android:text = "STOP"
    android:background = "#d22d2d"
    android:textColor = "#fff"
    android:layout_alignBaseline = "@+id/right"
    android:layout_alignBottom = "@+id/right"
    android:layout_centerHorizontal = "true" />

<ListView
    android:layout_width = "match_parent"
    android:layout_height = "match_parent"
    android:layout_below = "@+id/backward"
    android:divider = "#52f202"
    android:dividerHeight = "1dp"
    android:id = "@+id/listview"
    android:layout_centerHorizontal = "true"
    android:layout_marginTop = "48dp" />

<Button
    android:id = "@+id/discover"
    android:background = "#80ff00"
    android:textSize = "25dp"
    android:textColor = "#000099"
    android:layout_width = "match_parent"
    android:layout_height = "wrap_content"
    android:layout_alignParentStart = "true"
    android:layout_alignParentTop = "true"
    android:fontFamily = "sans-serif-smallcaps"
    android:text = "Discovery"
    android:textAppearance = "@style/TextAppearance.AppCompat.Light.Widget.PopupMenu.Large" />

<ImageView
    android:id = "@+id/mic"
    android:layout_width = "wrap_content"
    android:layout_height = "wrap_content"
    android:layout_alignParentStart = "true"
    android:layout_below = "@+id/discover"
    app:srcCompat = "@drawable/microphone" />
 </RelativeLayout>

Код Arduino

char myserial;
void setup()
{
  pinMode(11,OUTPUT);
  pinMode(10,OUTPUT);
  pinMode(9,OUTPUT);
  pinMode(8,OUTPUT);
  Serial.begin(9600);
}
void loop()
{
  myserial=Serial.read();
  switch(myserial)
{
  case 'S':
  digitalWrite(11,LOW);
  digitalWrite(10,LOW);
  digitalWrite(9,LOW);
  digitalWrite(8,LOW);
  break;


  case 'B':
  digitalWrite(11,HIGH);
  digitalWrite(10,LOW);
  digitalWrite(9,HIGH);
  digitalWrite(8,LOW);
  break;


  case 'F':
  digitalWrite(11,LOW);
  digitalWrite(10,HIGH);
  digitalWrite(9,LOW);
  digitalWrite(8,HIGH);
  break;

  case 'L':
  digitalWrite(11,HIGH);
  digitalWrite(10,LOW);
  digitalWrite(9,LOW);
  digitalWrite(8,HIGH);
  break;


  case 'R':
  digitalWrite(11,LOW);
  digitalWrite(10,HIGH);
  digitalWrite(9,HIGH);
  digitalWrite(8,LOW);
  break;

 }
 }
btSocket.getOutputStream().write(sendText.getText().toString().getBytes());

.

Привет, добро пожаловать в Stack Overflow! Попробуйте добавить еще несколько объяснений, чтобы будущие посетители лучше поняли ваш ответ.

duper51 16.06.2019 01:43

Другие вопросы по теме