Передача сериала из Raspberry в Arduino USB HID - PullRequest
0 голосов
/ 23 марта 2019

Я пытаюсь передать данные из приложения tkinter на RPi в Arduino Leonardo, настроенный как устройство HID USB, затем на компьютер из arduino, используя keyboard.write(), но не все данные заканчиваютсяна принимающем компьютере.

На Пи запущено приложение tkinter, и Пи подключен к ячейкам загрузки и ультразвуковым датчикам, которые регистрируют вес и размеры посылок.Значения размещаются в виде дерева tkinter.Это все работает нормально.Я подключил Pi к Arduino Leonardo через последовательный порт (GPIO), arduino настроен как USB HID-устройство.Я хочу, чтобы значения из древовидного представления на pi передавались в arduino, а затем передавались (USB HID) на подключенный компьютер.Я почти получил это работает, но не все данные передаются, он остановится через несколько символов.Мне нужно передать TAB и INSERT на принимающий компьютер, поэтому я посылаю строки «T» и «I» из Raspberry, а затем «конвертирую» их в значения HEX на Arduino.

И последовательный, иUSB HID является новым для меня, поэтому я не уверен, правильно ли я его настроил ... Есть идеи?

Это код, выполняемый на Raspberry Pi:

x = kolliTree.get_children()
    if x:
       count = len(x) 
       for i in x:
           a = str(kolliTree.item(i)["values"][0])
           dX = str(kolliTree.item(i)["values"][1])
           dY = str(kolliTree.item(i)["values"][2])
           dZ = str(kolliTree.item(i)["values"][3])
           w = str(kolliTree.item(i)["values"][4])
           kolli = ["T", a, "T", dX, "T", dY, "T", dZ, "T", w, "T", "I"]
           for i in kolli:
               leonardo.write(i.encode("latin1"))

Это цикл на Arduino:

void loop() {

  if (Serial1.available() > 0) {
    byte inChar = Serial1.read();
    if (inChar == 84) {
      Keyboard.write(0xB3);
    }
    else if (inChar == 73) {
      Keyboard.write(0xD1);
    }
    else {
      Keyboard.write(inChar);
    }
    delay(10);

1 Ответ

0 голосов
/ 25 марта 2019

Попробуйте отправить несколько символов ASCII на Pi, чтобы сэкономить время на вкладке и вводить команды.Arduino и большинство языков имеют встроенные функции для преобразования числовых значений в символы ASCII.Вы можете назначить постоянное целое число на основе ссылки ниже и вызвать ее, как во второй ссылке ниже.

Если некоторые данные проходят, но не все, дважды проверьте скорость передачи данных.Также проверьте, не передаются ли значения с заполнением вокруг них, например, пробелами на переднем или заднем конце.Может быть полезно попытаться принудительно преобразовать тип данных на принимающей стороне, чтобы убедиться, что вы не получаете int, когда ожидаете строку (например).

Надеюсь, это поможет!

http://www.asciitable.com/

https://www.instructables.com/id/Converting-integer-to-character/

...