Qt отправляет полный байт на последовательный порт

У меня есть этот простой код, который использует QtSerialPort:

char foo[] = {130,50,'\0'};
serial->write(foo);

Результат моего сериала {2, 50}. Я думаю, что самое большое число, которое я могу послать, — 128 (символ идет от -128 до 128). Где способ отправки номера от 0 до 255? Я пытаюсь использовать unsigned char, но метод «write» не работает с ним. Та же проблема возникает и с QByteArray.

Спасибо вам всем.

1

Решение

Интерфейс QIODevice имеет символ по умолчанию для отправки, который может зависеть от компилятора. Смотрите документацию для деталей.

qint64 QIODevice :: write (const char * data, qint64 maxSize)

Записывает не более maxSize байтов данных из данных на устройство. Возвращает количество байтов, которые были фактически записаны, или -1, если произошла ошибка.

Тем не менее, вы не должны беспокоиться, если вы принимаете данные правильно с другой стороны. вы все равно можете отправить более 128 значений как подписанные, но они будут выглядеть как отрицательные значения, например 0xFF будет -1.

Если вы принимаете ту же логику в обратном порядке на принимающей стороне, проблем не должно быть.

Тем не менее, это не относится к вашей проблеме, потому что вы не получите соответствующее отрицательное значение для 130, но вы получите его на 7 бит. Убедитесь, что ваше соединение 8 бит данных.

Вы можете установить это явно после открытия порта следующим кодом:

QSerialPort serialPort;
QString serialPortName = "foo";
serialPort.setPortName(serialPortName);

if (!serialPort.open(QIODevice::WriteOnly)) {
standardOutput << QObject::tr("Failed to open port %1, error: %2").arg(serialPortName).arg(serialPort.errorString()) << endl;
return 1;
}

if (!serialPort.setDataBits(QSerialPort::Data8)) {
standardOutput << QObject::tr("Failed to set 8 data bits for port %1, error: %2").arg(serialPortName).arg(serialPort.errorString()) << endl;
return 1;
}

// Other setup code here

char foo[] = {130,50,'\0'};
serialPort.write(foo);
1

Другие решения

Убедитесь, что вы установили последовательный порт для отправки 8 бит, используя QSerialPort :: бит данных

Тот факт, что «130» следует как «2», означает, что самый значимый бит усекается.

1

По вопросам рекламы [email protected]