Во-первых, у вас есть два параллельных цикла, и в каждом цикле вы читаете данные с одного и того же последовательного порта. Чтение данных из порта удаляет их из буфера последовательного ввода, поэтому каждый символ, поступающий в буфер, будет считываться только одним или другим циклом, а не обоими. Между циклами нет никакой синхронизации, поэтому будет случайным, какой персонаж куда пойдет. Каждый цикл большую часть времени будет считывать неполное сообщение, поэтому ваш код не сможет декодировать его в число, поэтому он возвращает ноль.
Во-вторых, как объясняется в мом ответе на ваш последний вопрос, не t используйте Bytes at Port
, используйте настройку символа завершения чтения при настройке порта. Таким образом, каждый Serial Read
будет возвращать одно полное сообщение. Если вы сделаете это, вам не понадобится функция ожидания в цикле — она будет работать настолько быстро, насколько это необходимо, чтобы не отставать от входящих данных.
Здесь здесь говорится, что Serial.println
отправляет возврат каретки, а затем новую строку в конце данных. , поэтому вы хотите использовать новую строку (десятичное число 10) в качестве символа завершения. В любом случае это значение по умолчанию, поэтому, как только вы удалите повторяющийся цикл и Bytes at Port
, он, вероятно, начнет работать.
В вашем примере кода я не вижу причин для двух параллельных циклов, но если вам действительно нужно сделать данные из Arduino доступными в двух разных циклах в LabVIEW, используйте метод связи, такой как очередь или уведомитель, чтобы передать его от одного к другому. В LabVIEW есть примеры и помощь по ним.
Кстати, первые два кадра структуры последовательности в вашем цикле не нужны - код все равно будет выполняться в этой последовательности из-за потока данных.
person
nekomatic
schedule
26.04.2017