【智控万物】Microbit USB控制赛车游戏
本帖最后由 云天 于 2021-2-15 17:35 编辑【项目目的】
该项目使您可以使用micro:bit作为游戏控制器来控制PC游戏。
【项目准备】
为了使代码正常工作,您需要在Mind+的Python模式下安装几个额外的Python模块:Pynput,“监视和控制用户输入设备”。 PinPong库,“允许您在PC / Mac / Linux / Raspberry Pi上的Python并直接与micro:bit交互”。
【代码解析】
from pinpong.board import Board,MSensor,MScreen我们需要导入模块以供以后使用。我们将使用3个模块;用于控制和读取micro:bit数据的pinpong模块,用于等待特定时间步长的time模块和用于控制键盘的pynput模块(当然还有游戏)。
Board("microbit").begin()#初始化,选择板型和端口号,不输入端口号则进行自动识别
#Board("microbit","COM36").begin() #windows下指定端口初始化
#Board("microbit","/dev/ttyACM0").begin() #linux下指定端口初始化
#Board("microbit","/dev/cu.usbmodem14101").begin() #mac下指定端口初始化
micro = MSensor() #Microbit板载传感器
microbit = MScreen()#Microbit屏幕
accelerometer_values=
previous_values=初始化
def changeKeyState(key, value):
global keyboard_keys
#Change Only Neccessary
if value!=keyboard_keys.get(key, False):
if value:
keyboard.press(key)
else:
keyboard.release(key)
keyboard_keys = valuechangeKeyState 是一项功能,它将帮助我们控制键盘键-例如,如果车把向左移动,它将按向左箭头键。
micro.cal_compass() #校准电子罗盘
keyboard = Controller()
#Set Accelerometer Values
previous_values = micro.get_accelerometer_X()
previous_values = micro.get_accelerometer_Y()
previous_values = micro.get_accelerometer_Z()
keyboard_keys = {}校准电子罗盘,获取加速度计的X,Y,Z值。
while 1:
#Blink
microbit.show_shape("heart")
time.sleep(0.5)
microbit.hide_all_lights()
#Start the Program if a Button is Pressed
if micro.buttonA_is_pressed() or micro.buttonB_is_pressed():
break
time.sleep(0.5)
这是第一个循环。它将一直闪烁,直到用户按下A或B按钮。按下按钮后,控制器将开始运行。
while 1:
#Get Accelerometer Values
accelerometer_values = micro.get_accelerometer_X()
accelerometer_values = micro.get_accelerometer_Y()
accelerometer_values = micro.get_accelerometer_Z()
x = micro.get_accelerometer_X()
y = micro.get_accelerometer_Y()
z = micro.get_accelerometer_Z()
#Calculate Avarege Motion in X,Y,Z Directions
motion = sum(map(lambda i:abs(accelerometer_values-previous_values),range(3)))/3
这是主循环。我们将从获取所需的值并计算运动开始。
changeKeyState(Key.up, y>400)
changeKeyState(Key.right, x>60)
changeKeyState(Key.left, x<-60)
changeKeyState(Key.shift, motion>500)
previous_values = accelerometer_values
然后,我们将使用之前获得的信息来控制游戏。当Microbit向右或向左旋转高于特定值时,将触发键盘键。
【演示视频】
https://v.youku.com/v_show/id_XNTEwNDI0Nzc4MA==.html
【完整代码】
import time
from pinpong.board import Board,MSensor,MScreen
from pynput.keyboard import Key, Controller
Board("microbit").begin()#初始化,选择板型和端口号,不输入端口号则进行自动识别
#Board("microbit","COM36").begin() #windows下指定端口初始化
#Board("microbit","/dev/ttyACM0").begin() #linux下指定端口初始化
#Board("microbit","/dev/cu.usbmodem14101").begin() #mac下指定端口初始化
micro = MSensor()
microbit = MScreen()
accelerometer_values=
previous_values=
def changeKeyState(key, value):
global keyboard_keys
#Change Only Neccessary
if value!=keyboard_keys.get(key, False):
if value:
keyboard.press(key)
else:
keyboard.release(key)
keyboard_keys = value
#changeKeyState 是一项功能,它将帮助我们控制键盘键-例如,如果车把向左移动,它将按向左箭头键。
micro.cal_compass() #校准电子罗盘
keyboard = Controller()
#Set Accelerometer Values
previous_values = micro.get_accelerometer_X()
previous_values = micro.get_accelerometer_Y()
previous_values = micro.get_accelerometer_Z()
keyboard_keys = {}
while 1:
#Blink
microbit.show_shape("heart")
time.sleep(0.5)
microbit.hide_all_lights()
#Start the Program if a Button is Pressed
if micro.buttonA_is_pressed() or micro.buttonB_is_pressed():
break
time.sleep(0.5)
#这是第一个循环。它将一直闪烁,直到用户按下A或B按钮。按下按钮后,控制器将开始运行。
#Start the Loop
while 1:
#Get Accelerometer Values
accelerometer_values = micro.get_accelerometer_X()
accelerometer_values = micro.get_accelerometer_Y()
accelerometer_values = micro.get_accelerometer_Z()
x = micro.get_accelerometer_X()
y = micro.get_accelerometer_Y()
z = micro.get_accelerometer_Z()
#Calculate Avarege Motion in X,Y,Z Directions
motion = sum(map(lambda i:abs(accelerometer_values-previous_values),range(3)))/3
#Change Direction
changeKeyState(Key.up, y>400)
changeKeyState(Key.right, x>60)
changeKeyState(Key.left, x<-60)
changeKeyState(Key.shift, motion>500)
#Set Current Accelerometer Values to Previous
previous_values = accelerometer_values
完美漂移!童年回忆( 图形化编程可以做这个效果吗?Python代码还不会 w-l 发表于 2022-7-8 17:18
图形化编程可以做这个效果吗?Python代码还不会
暂时,我只能用Python实现 Traceback (most recent call last):
File "D:\编程\ptthon\shouping.py", line 3, in <module>
from pinpong.board import Board,MSensor,MScreen
ImportError: cannot import name 'MSensor'
>>>
还的影子 发表于 2022-11-12 06:47
Traceback (most recent call last):
File "D:\编程\ptthon\shouping.py", line 3, in
from pinpong ...
老师我运行报这个错误
页:
[1]