Работа с serial портом

vetatto
Offline
Зарегистрирован: 14.01.2013

Привет всем. Возникла проблема с передачей данных через serial порт. Скорость стоит 38400.

Требуется передать последовательность 81 10 F1 81 03, но по какой-то непонятной причине ардуина передает  81 F1 10 81 03 8F 10 07. Как я понимаю 8F 10 07 - это что-то типа переноса строки. Как его убрать?

Отправляю данные так

char bytes[]= {129,241,16,129,03};
Serial.write(bytes);

 

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

А как вы принимаете ?

vetatto
Offline
Зарегистрирован: 14.01.2013

Пока принимаю программой Advanced Serial Port Monitor. 

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

Попробуйте в массив bytes добавить цифирь 0, в конце. А вообще наверное стоит посмотреть как в библиотеке реализована отправка. Мне, например, не ясно как подпрограмма отправки определяет размер массива. А вы как считаете, как она это делает ?

ites
Offline
Зарегистрирован: 26.12.2013

vetatto пишет:

Привет всем. Возникла проблема с передачей данных через serial порт. Скорость стоит 38400.

Требуется передать последовательность 81 10 F1 81 03, но по какой-то непонятной причине ардуина передает  81 F1 10 81 03 8F 10 07. Как я понимаю 8F 10 07 - это что-то типа переноса строки. Как его убрать?

Отправляю данные так

char bytes[]= {129,241,16,129,03};
Serial.write(bytes);

 

char bytes[]= {0x81,0x10,0xf1,0x81,0x03};
Serial.write(bytes, 5);

 

vetatto
Offline
Зарегистрирован: 14.01.2013

brokly пишет:

Попробуйте в массив bytes добавить цифирь 0, в конце. А вообще наверное стоит посмотреть как в библиотеке реализована отправка. Мне, например, не ясно как подпрограмма отправки определяет размер массива. А вы как считаете, как она это делает ?

Спасибо. Сработало добавление 0 в конце массива. 

 

Пробовал жестко указывать длинну массива - ардуина дописывала CD 02 04 A0.

vetatto
Offline
Зарегистрирован: 14.01.2013

ites пишет:

vetatto пишет:

Привет всем. Возникла проблема с передачей данных через serial порт. Скорость стоит 38400.

Требуется передать последовательность 81 10 F1 81 03, но по какой-то непонятной причине ардуина передает  81 F1 10 81 03 8F 10 07. Как я понимаю 8F 10 07 - это что-то типа переноса строки. Как его убрать?

Отправляю данные так

char bytes[]= {129,241,16,129,03};
Serial.write(bytes);

 

char bytes[]= {0x81,0x10,0xf1,0x81,0x03};
Serial.write(bytes, 5);

 

 

Ваш вариант дает результат 81 F1 10 81 03 DC 02 04 AF

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

Не понял... получилось или нет ?

Смотрите тут http://arduino.cc/en/Serial/write

Вам нужно вызывать функцию так Serial.write(buf, len). А вы вызываете функцию передав ей массив как стринг, а стринг обязан оканчиваться 0 и не иметь некоторых символов внутри.

 

 

ites
Offline
Зарегистрирован: 26.12.2013

vetatto пишет:

Ваш вариант дает результат 81 F1 10 81 03 DC 02 04 AF

Чудеса. Я для надёжности посмотрел в код Print.cpp из библиотеки ардуино.

vetatto
Offline
Зарегистрирован: 14.01.2013

brokly пишет:

Не понял... получилось или нет ?

Смотрите тут http://arduino.cc/en/Serial/write

Вам нужно вызывать функцию так Serial.write(buf, len). А вы вызываете функцию передав ей массив как стринг, а стринг обязан оканчиваться 0 и не иметь некоторых символов внутри.

 

 

 

ДА да получилось. Не точно выразился в предыдущем посте