Приложение Arduino + HC-05 + AndroidVR (с использованием картона Google Unity) - PullRequest
0 голосов
/ 24 января 2019

Я пробую это уже неделю ... Я просто не понимаю, что происходит.Итак, вот чего я пытаюсь достичь.

Я хочу отправить свои данные MPU_6050 в приложение AndroidVR через классический модуль Bluetooth HC-05, чтобы я мог вращать куб.

Во-первых, все благодаря связи хорошо подключены и работают, потому что я использовал в Terminal App.

Я выполнил то же самое, используя Serial Port with Desktop, он работает как шарм ... Iпросто нужно распечатать данные последовательно как

1.01,22.1,35.1,

с использованием Serial.print ();

и на стороне единицы я могу получить значение в строковом массиве и могу что-то использовать для функции split ()вот так

string[] output_array = sp.ReadLine().Split(',');

здесь sp это объект класса serial.но я не могу использовать последовательный порт в Android. Могу ли я?

поэтому я использую этот плагин Bluetooth: https://assetstore.unity.com/packages/tools/input-management/android-microcontrollers-bluetooth-16467

Теперь проблема, с которой я сталкиваюсь, сначала в Arduino ... так как я использую

Serial.write ();

  • , поэтому я не получу точный результат, например: 0,36 будет 0
  • секунда, если значение равно -14,3, т.е.отрицательно, поэтому было бы 255-14, было бы отправлено 241

Теперь в Unity я не знаю, как мне разбить данные ... и получить значение из списка.преобразование его в строку в Unity даст значение ASCII, которое мне не нужно.

Ниже приведен простой код ..., пожалуйста, помогите мне с этим.

Код Arduino:

#include <Wire.h>
#define SEPARATOR 255
void setup()
{      
  Serial.begin(115200);
  Wire.begin();

  calibrate_sensors();  
  set_last_read_angle_data(millis(), 0, 0, 0, 0, 0, 0);
}
 void loop()
{ 
  /* Every thing above work well and all calculation are Performed
  I'm using Complimentary Filter for MPU6050 */

  byte buf[]={angle_x ,angle_y, angle_z,SEPARATOR}; 
  //here first three values are x,y,z angle and a separator(255 as per ASCII) 

  Serial.write(buf,sizeof(buf));//sending the data(byte array) via HC-05. 
}

Unity C # код:

using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using TechTweaking.Bluetooth;

public class JoystickHandler : MonoBehaviour
{
    private BluetoothDevice device;
    public Text statusText;
    public Text logsOnScreen;

    public Transform cube;


    public float speed = 1.0f;

    void Awake()
    {
        statusText.text = "Status : ...";

        BluetoothAdapter.enableBluetooth();
        device = new BluetoothDevice();
        device.Name = "HC-05";
        //device.MacAddress = "XX:XX:XX:XX:XX:XX";

        device.setEndByte(255);

        device.ReadingCoroutine = ManageConnection;


    }

    public void connect()
    {
        device.connect();
    }

    public void disconnect()
    {
        device.close();
    }

    IEnumerator ManageConnection(BluetoothDevice device)
    {
        statusText.text = "Status : Connected & Can read";
        while (device.IsConnected && device.IsReading)
        {
            byte[] packets = device.read();

            if (packets != null)
            {
                statusText.text = "so we got some data";
                int val1 = packets[0];
                int val2 = packets[1];
                int val3 = packets[2];

                logsOnScreen.text = val1+" , "+val2+","+val3;

                cube.Rotate(val1,val2,val3);
            }
            yield return null;
        }
        statusText.text = "Status : Done Reading";

    }
}

Я знаю, я знаю, что это не самый красивый код ... но просто пытаюсь достичь цели, и я знаю, что я должен был использовать Vector3 и другие, но этопросто для целей тестирования ... так что будьте проще. Пожалуйста, дайте мне знать вашу мысль.

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