将序列号从Raspberry传递到Arduino USB HID

2024-09-20 06:42:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图将数据从RPi上的tkinter应用程序传递到Arduino Leonardo设置为USB HID设备,然后使用keyboard.write()从Arduino传递到计算机,但并非所有数据都最终到达接收计算机。你知道吗

我让tkinter应用程序在Pi上运行,Pi连接到称重传感器和超声波传感器上,这些传感器记录包裹的重量和尺寸。这些值放置在tkinter树视图中。 一切正常。我已经通过串行(GPIO)将Pi连接到Arduino Leonardo,Arduino被设置为USB HID设备。我想把pi上树视图中的值传递给arduino,然后再传递(usbhid)到连接的计算机上。我已经几乎让这个工作,但不是所有的数据都通过,它会停止后几个字符。我需要将TAB和INSERT传递给接收计算机,所以我从Raspberry发送“T”和“I”字符串,然后将其“转换”为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);

Tags: 数据iftkinter计算机pi传感器itemarduino
1条回答
网友
1楼 · 发布于 2024-09-20 06:42:16

尝试向Pi发送一些ASCII字符,用tab和insert命令为自己节省一个步骤。Arduino和大多数语言都内置了将数值转换为ASCII字符的函数。您可以根据下面的链接分配一个常量整数并调用它,如下面的第二个链接所示。你知道吗

如果有些数据通过,但不是全部,请仔细检查波特率。还要检查这些值是否在传递时有任何填充,比如在前端或后端有空格。尝试在接收端强制进行数据类型转换,以确保在需要字符串时没有接收到int(例如)。你知道吗

希望这有帮助!你知道吗

http://www.asciitable.com/

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

相关问题 更多 >