0

首先,我根本不是开发人员,只是想让事情按我的意愿工作。无法理解这一点:

从一方面来看,这是我在 Ubuntu PC 上的 python 脚本,它将按钮输入从 Playstation 4 操纵杆发送到 micro:bit 的串行端口(操纵杆通过蓝牙连接到 Ubuntu):

import serial
import pygame

pygame.init()
pygame.joystick.init()

joystick = pygame.joystick.Joystick(0)
joystick.init()

screen = pygame.display.set_mode((100,100))

device = serial.Serial('/dev/ttyACM0', 115200)

try:
    while True:
        events = pygame.event.get()
        for event in events:
            if event.type == pygame.JOYBUTTONDOWN:
                if event.button == 7:
                    device.write(b"1\r\n")
                elif event.button == 6:
                    device.write(b"2\r\n")
            elif event.type == pygame.JOYBUTTONUP:
                if joystick.get_button(7) == 1:
                    device.write(b"1\r\n")
                elif joystick.get_button(6) == 1:
                    device.write(b"2\r\n")
                elif joystick.get_axis(0) < 0:
                    device.write(b"3\r\n")
                elif joystick.get_axis(0) > 0:
                    device.write(b"4\r\n")
                else:
                    device.write(b"5\r\n")
            if event.type == pygame.JOYAXISMOTION:
                if event.axis == 0:
                    if event.value < 0:
                        device.write(b"3\r\n")
                    elif event.value > 0:
                        device.write(b"4\r\n")
                    elif event.value == 0:
                        if joystick.get_button(7) == 1:
                            device.write(b"1\r\n")
                        elif joystick.get_button(6) == 1:
                            device.write(b"2\r\n")
                        else:
                            device.write(b"5\r\n")
except KeyboardInterrupt:
    print("EXITING NOW")
    joystick.quit()
device.close()

从另一面来看,这是我从 Mu 编辑器闪到 micro:bit 的简单 micropython 代码,并希望它可以工作,但它没有 :lol:

from microbit import *

uart.init(baudrate=115200)

while True:
    joyinput = uart.read()
    if joyinput == "1":
        display.show(Image.ARROW_N)
    elif joyinput == "2":
        display.show(Image.ARROW_S)
    elif joyinput == "3":
        display.show(Image.ARROW_W)
    elif joyinput == "4":
        display.show(Image.ARROW_E)
    elif joyinput == "5":
        display.show(Image.HAPPY)

在 Mu 编辑器的 REPL 控制台中,我可以看到通信进展顺利,即只要我按住某个按钮或操纵杆轴移动,我就会得到具有适当编号的 REPL:

  • 1 用于操纵杆按钮 7 (R2)
  • 2 用于操纵杆按钮 6 (L2)
  • 3 用于操纵杆轴 0 左侧位置(操纵杆上的左侧模拟)
  • 3 用于操纵杆轴 0 右侧位置(操纵杆上的左侧模拟)
  • 5 如果没有按下/移动任何内容

但是 LED 矩阵上的图标永远不会出现。

到目前为止,只有在脚本末尾添加一个“else”语句时,我才有可能显示一些图标,但这是正常的,因为它是“else”。例如下面的最后两行:

from microbit import *

uart.init(baudrate=115200)

while True:
    joyinput = uart.read()
    if joyinput == "1":
        display.show(Image.ARROW_N)
    elif joyinput == "2":
        display.show(Image.ARROW_S)
    elif joyinput == "3":
        display.show(Image.ARROW_W)
    elif joyinput == "4":
        display.show(Image.ARROW_E)
    elif joyinput == "5":
        display.show(Image.HAPPY)
    else:
        display.show(Image.HAPPY)

在此处输入图像描述

非常感谢,我很乐意提供所需的任何其他信息。

4

1 回答 1

1

我在另一个网站上得到了答案:https ://forum.micropython.org/viewtopic.php?f=2&t=8153 ,所以我想在这里发布它,也许它会对其他有同样疑问的人有所帮助。所有学分都归于 micropyhton 论坛上的 @jimmo,还要感谢试图提供帮助的 @Iyassou。

下面是 micro:bit 的 mycropython 代码,它将根据串行输入更改 LED 矩阵上的图标(在我的情况下为箭头)。当然,您需要以某种方式发送这些输入,我在上面的帖子中使用 python 脚本和 PS4 操纵杆发送它。

from microbit import *

uart.init(baudrate=115200)

while True:
    joyinput = uart.readline()
    if not joyinput:
        continue
    joyinput = str(joyinput.strip(), 'utf-8')
    if joyinput == "1":
        display.show(Image.ARROW_N)
    elif joyinput == "2":
        display.show(Image.ARROW_S)
    elif joyinput == "3":
        display.show(Image.ARROW_W)
    elif joyinput == "4":
        display.show(Image.ARROW_E)
    elif joyinput == "5":
        display.show(Image.HAPPY)
于 2020-04-14T06:29:28.813 回答