Я пробую это уже неделю ... Я просто не понимаю, что происходит.Итак, вот чего я пытаюсь достичь.
Я хочу отправить свои данные 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 и другие, но этопросто для целей тестирования ... так что будьте проще. Пожалуйста, дайте мне знать вашу мысль.