Обработка -> Arduino -> Unity связь через порты - PullRequest
0 голосов
/ 13 июня 2018

Что я пытаюсь сделать: Обработка 3 получает своего рода QR-код через мою веб-камеру -> она считывает значение и отправляет его на мою Arduino, Arduino успешно получает его и теперь может делать вещис этим.Теперь я хочу добавить еще один канал связи, Unity.Я хочу, чтобы Arduino отправлял значение из Обработки в Unity.Между Arduino и Unity легко общаться, но мне нужно для обработки значения веб-камеры.

Проблема: Обработка 3 и Unity используют один и тот же порт (COM4, ​​9600),Это приведет к исключению ввода-вывода в Unity, сообщающем, что «Доступ запрещен», за которым следуют ошибки последовательного порта, не открыты.

Обработка 3 кода

...
 //Open port
  String portName = Serial.list()[0];
  myPort = new Serial(this, portName, 9600);
  myPort.write(1);
...

код Arduino

void setup() {
  // put your setup code here, to run once:
   ...
   Serial.begin(9600); // Start serial communication at 9600 bps
   ...
}

void loop() {
  if (Serial.available()) { // If data is available to read,
    val = Serial.read(); // read it and store it in val
  }
  //val contains now the data that was sent from Processing 3
  //Send this data to Unity:
  Serial.flush();
  Serial.println(val);
}

код Unity

...
SerialPort stream = new SerialPort ("COM4", 9600); //We obviously can't open this port since its already in use by Processing 3. How to fix this?
...
// Use this for initialization
    void Start () {
        stream.Open(); //Throws IO exception: Access Denied error
    }
    // Update is called once per frame
    void Update () {
        string value = stream.ReadLine();
        val = int.Parse(value);
        if (val == 1) {
            //Links van arduino
            goLeft();
        }else if (val == 2) {
            //Rechts van arduino
            goRight();
        }

    }

Мы, очевидно, не можем открыть порт в Unity, поскольку он уже используется процессингом3. Как это исправить? Поток связи:

Processing 3 --> Arduino --> Unity

В конце концов Unity необходимо знать, нужно ли вам идти влево или вправо на основе QR-кода, введенного на веб-камере.

Ответы [ 2 ]

0 голосов
/ 13 июня 2018

Для людей, которые хотели бы знать, как решить эту проблему.Ты не можешьМы должны думать по-другому.Возможные варианты:

  1. Закрыть порт во время обработки, а затем открыть порт в Unity (это было непрактично, поскольку нам нужен постоянный поток инструкций)
  2. Оставить Arduino и обмениваться данными между обработкойи Unity (также не практично, так как в этом случае нам нужен Arduino для мигалок)
  3. Найдите другую форму связи между Arduino / Processing и Unity без каких-либо портов.(Спасибо @kaj)

Я реализовал последнюю опцию

  • Результаты обработки вывода в файл "data.txt"
  • Открывается Unityэтот файл в C # с ReadAccess FileStream и читает выходные данные и использует это

Таким образом, мы все еще можем использовать Arduino, а Unity непосредственно читает выходные данные из Processing без посредников.

0 голосов
/ 13 июня 2018

Вы не можете использовать один и тот же последовательный порт в двух параллельных приложениях (почему вы вообще хотите использовать Arduino?). Решение состоит в том, чтобы установить связь между приложениями.Сетевое соединение, использующее петлевое соединение 127.0.0.1, является проверенным и проверенным способом создания этой ссылки.

Что касается протоколов, у вас есть бесконечные варианты, я лично предпочитаю использовать OSC - обе обработки(через OSCP5) и Unity (различные плагины, в том числе и мои, которые я должен действительно обнародовать в какой-то момент) имеют приличную поддержку обмена сообщениями, но вы можете использовать многие другие типы ссылок (например, веб-сокеты)

...