Проблемы с отправкой данных из Android в Arduino через Bluetooth - PullRequest
1 голос
/ 18 февраля 2020

Я пытаюсь настроить систему, в которой приложение android подключается к Arduino через Bluetooth и говорит ему либо включать, либо выключать светодиод. Я просмотрел множество страниц и исходный код и увидел, что многие люди делали это, как я, но почему-то мой код не работает, и я не могу определить, почему.

Вот весь мой код Arduino, на самом деле просто и кратко.

#include <SoftwareSerial.h> 

SoftwareSerial Blue(0,1); // rx tx 

int LED = 13; // Led connected
char data;

char state = 0;


void setup()
{
pinMode(LED, OUTPUT); 
digitalWrite(LED, LOW);
Serial.begin(9600);
Blue.begin(9600);

}

void loop()
{
  while(Blue.available()==0);
  if(Blue.available()>0){    // read from android via bluetooth
    data = Blue.read();
    Serial.println(data);
  } 



if (data == '1') // If data is 1, turn ON the LED
{

  digitalWrite(LED,HIGH);
  Serial.println("LED ON ");
  }

if( data == '2') // if data is 2, turn OFF the LED
  {
  digitalWrite(LED,LOW);
  Serial.println("LED OFF");
  }
}

А вот фрагмент моего android кода, который отправляет данные в Arduino для управления светодиодом

switchLight.setOnClickListener(new View.OnClickListener() {  // button that will switch LED on and off
            @Override
            public void onClick(View v) {
                Log.i("[BLUETOOTH]", "Attempting to send data");
                if (mmSocket.isConnected() && btt != null) { //if we have connection to the bluetoothmodule
                    if (!lightflag) {
                        try{
                            mmSocket.getOutputStream().write("1".toString().getBytes());
                            showToast("on");
                        }catch (IOException e) {
                            showToast("Error");
                            // TODO Auto-generated catch block
                            e.printStackTrace();

                        }


                        //btt.write(sendtxt.getBytes());
                        lightflag = true;

                    } else {
                        try{
                            mmSocket.getOutputStream().write("2".toString().getBytes());
                            showToast("off");
                        }catch (IOException e) {
                            showToast("Error");
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }


                        //btt.write(sendtxt.getBytes());
                        lightflag = false;

                    }
                } 
                else {
                    Toast.makeText(MainActivity.this, "Something went wrong", Toast.LENGTH_LONG).show();
                }
            }
        });

Это часть кода, которая подключается к Модуль Arduino Bluetooth. Опять же, довольно простые вещи и его единственная цель - подключиться к модулю.

BluetoothAdapter bta;                 //bluetooth stuff
BluetoothSocket mmSocket;             //bluetooth stuff
BluetoothDevice mmDevice;             //bluetooth stuff

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Log.i("[BLUETOOTH]", "Creating listeners");
        final TextView response = findViewById(R.id.response);
        Button switchLight = findViewById(R.id.switchlight);
        Button connectBT = findViewById(R.id.connectBT);

        connectBT.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                BluetoothSocket tmp = null;
                mmDevice = bta.getRemoteDevice(MODULE_MAC);
                Log.i("[BLUETOOTH]", "Attempting to send data");

                try {
                    tmp = mmDevice.createRfcommSocketToServiceRecord(MY_UUID);
                    mmSocket = tmp;
                    mmSocket.connect();
                    Log.i("[BLUETOOTH]","Connected to: "+mmDevice.getName());
                    showToast("Connected to: " + mmDevice.getName());
                }catch(IOException e){
                    try {mmSocket.close();
                    }catch(IOException c){return;}
                }
            }
        });

Когда я подключаю android к Arduino и отслеживаю последовательный монитор в Arduino IDE, вместо чтения 1 или 2, он читает что-то похожее на это:

enter image description here

Это производится с использованием Serial. Функция println в моем коде Arduino, и я уверен, что он должен отображать 1 или 2, но, как вы можете видеть, это не так. Я пробовал несколько обходных путей, например, объявив его как int или char et c. Если вы можете определить какой-либо вопрос, я буду очень признателен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...