Как поменять иконку на микро: битовая светодиодная матрица с входом из последовательного порта - PullRequest
0 голосов
/ 11 апреля 2020

Прежде всего, я вообще не разработчик, просто пытаюсь заставить вещи работать так, как я хочу. Не могу понять это:

С одной стороны, это мой python скрипт на Ubuntu P C, который отправляет входы кнопок с джойстика Playstation 4 на последовательный порт micro: bit (джойстик подключен к Ubuntu через Bluetooth ):

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()

С другой стороны, это простой код micro python, который я высветил в micro: bit из редактора Mu и ожидал, что он будет работать, но это не так: 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)

В консоли REPL редактора Mu я вижу, что связь идет хорошо, то есть, пока я держу нажатой какую-то кнопку или перемещенную ось джойстика, я получаю REPL с соответствующим номером:

  • 1 для кнопки джойстика 7 (R2)
  • 2 для кнопки джойстика 6 (L2)
  • 3 для оси джойстика 0 в левом положении (левый аналог на джойстике)
  • 3 для оси джойстика 0 правое положение (левый аналог на джойстике)
  • 5, если ничего не нажимается / не перемещается

Но значки на светодиодной матрице никогда не появляются.

До сих пор у меня была возможность отображать значок, только я f Я добавляю еще один оператор «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)

enter image description here

Заранее большое спасибо, я был бы рад предоставить любую дополнительную необходимую информацию.

1 Ответ

0 голосов
/ 14 апреля 2020

Я получил ответ на другом сайте: https://forum.micropython.org/viewtopic.php?f=2&t=8153, поэтому я хотел бы опубликовать его здесь, может быть, это будет полезно для других людей с таким же сомнением. Все кредиты идут на @jimmo на форуме micropyhton, спасибо также @Iyassou, который попытался помочь.

Ниже приведен код mycro python для micro: bit, который изменит значки на светодиодной матрице (стрелки в моем случае) в соответствии с входом из серийного. Конечно, вам нужно как-то отправить эти входные данные, я отправляю их с помощью скрипта 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...