На моем ноутбуке работает программа Python, которая считывает данные с джойстика и отправляет команду скорости на Arduino, который, в свою очередь, управляет двигателем игрушечной машинки. Для этого программа преобразует целое число со значениями от 0 до 255 в один байт без знака, который отправляет через последовательное соединение на Arduino.
Этот код работает для этого:
if event.axis == axis:
speed = int((event.value + 1.0) / 2.0 * 255.0)
speedCommand = bytearray(b'\x00')
speedCommand[0] = speed
speedCommand = bytes(speedCommand)
ser.write(speedCommand)
print(speed, speedCommand)
Хотя этот код работает, он не очень элегантный. Я хотел бы найти однострочную инструкцию, которая делает то же самое, что и три строки, начинающиеся с speedCommand. Я пробовал это, например:
speedCommand = chr(speed).encode()
Но это работает только для значений от 0 до 127. Любое число выше 127 кодируется двумя байтами [, поскольку символ рассматривается как байт со знаком, а значения выше 127 являются отрицательными].
ОТРЕДАКТИРОВАНО ДЛЯ ДОБАВЛЕНИЯ: Мое предположение о том, что символ рассматривается как подписанный байт со значениями выше 127, являющимися отрицательными, может быть неверным.
speed = chr(speed).encode('latin1')
решит вашу проблему с кодировкой. Кодировка по умолчаниюutf8
в противном случае - person Mark Tolonen   schedule 11.04.2021chr(speed).encode('latin1')
решение действительно работает в моей программе. Хорошо знать. - person Daanii   schedule 11.04.2021