【智控万物】Microbit控制PC射击游戏
本帖最后由 云天 于 2021-2-17 23:28 编辑【项目目的】
该项目使您可以使用micro:bit作为游戏控制器来控制PC射击游戏。
【项目准备】
使用pynput库中mouse库控制电脑鼠标
为了使代码正常工作,您需要在Mind+的Python模式下安装几个额外的Python模块:Pynput,“监视和控制用户输入设备”。 PinPong库,“允许您在PC / Mac / Linux / Raspberry Pi上的Python并直接与micro:bit交互”。
【代码解析】
import time
from pinpong.board import Board,MSensor,MScreen,Pin
from pynput.mouse import Controller,Button我们需要导入模块以供以后使用。我们将使用3个模块;用于控制和读取micro:bit数据的pinpong模块,用于等待特定时间步长的time模块和用于控制键盘的pynput模块(当然还有PC射击游戏——使用网页版小游戏)。
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=
btn = Pin(Pin.P0, Pin.IN)
mouse = Controller()程序初始化,按钮接在Microbit的P0引脚上。
def btn_rising_handler(pin):#中断事件回调函数
mouse.click(Button.left,1)
btn.irq(trigger=Pin.IRQ_RISING, handler=btn_rising_handler) #设置中断模式为上升沿触发,及回调函数使用中断,按钮触发中断模拟鼠标点击左键
micro.cal_compass() #校准电子罗盘
#Set Accelerometer Values
previous_values = micro.get_accelerometer_X()
previous_values = micro.get_accelerometer_Y()
x=previous_values
y=previous_values
校准电子罗盘,获取加速度计X,Y值
while 1:
#Get Accelerometer Values
tem=0
for i in range(40):
tem=tem+micro.get_accelerometer_X()
tem=int(tem/40) #使用平均值,滤掉干扰值,X轴
accelerometer_values = tem
tem=0
for i in range(40):
tem=tem+micro.get_accelerometer_Y()
tem=int(tem/40) #使用平均值,滤掉干扰值,Y轴
accelerometer_values = tem
#position=format(mouse.position)
#print(position)
if abs(accelerometer_values-previous_values)>8:#去除小抖动,X轴
x = accelerometer_values
previous_values = accelerometer_values
if abs(accelerometer_values-previous_values)>8:#去除小抖动,Y轴
y = accelerometer_values
previous_values = accelerometer_values
if x<-700:
x=-700
if x>700:
x=700
if y<-400:
y=-400
if y>400:
y=400
xcord=int(((1366-0)/ (700 - (-700))) * (x - (-700)) + 0)#映射到屏幕大小,X轴
ycord=int(((768-0) / (-400 - 400)) * (y-400 ) + 0) #映射到屏幕大小,Y轴
mouse.position=(xcord, ycord)#移动鼠标指针
主程序【演示视频】https://v.youku.com/v_show/id_XNTEwNTM4Nzc1Mg==.html【完整代码】
# -*- coding: utf-8 -*-
import time
from pinpong.board import Board,MSensor,MScreen,Pin
from pynput.mouse import Controller,Button
import math
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=
btn = Pin(Pin.P0, Pin.IN)
mouse = Controller()
def btn_rising_handler(pin):#中断事件回调函数
mouse.click(Button.left,1)
btn.irq(trigger=Pin.IRQ_RISING, handler=btn_rising_handler) #设置中断模式为上升沿触发,及回调函数
micro.cal_compass() #校准电子罗盘
#Set Accelerometer Values
previous_values = micro.get_accelerometer_X()
previous_values = micro.get_accelerometer_Y()
x=previous_values
y=previous_values
#Start the Loop
while 1:
#Get Accelerometer Values
tem=0
for i in range(40):
tem=tem+micro.get_accelerometer_X()
tem=int(tem/40)
accelerometer_values = tem
tem=0
for i in range(40):
tem=tem+micro.get_accelerometer_Y()
tem=int(tem/40)
accelerometer_values = tem
#position=format(mouse.position)
#print(position)
if abs(accelerometer_values-previous_values)>8:
x = accelerometer_values
previous_values = accelerometer_values
if abs(accelerometer_values-previous_values)>8:
y = accelerometer_values
previous_values = accelerometer_values
if x<-700:
x=-700
if x>700:
x=700
if y<-400:
y=-400
if y>400:
y=400
xcord=int(((1366-0)/ (700 - (-700))) * (x - (-700)) + 0)
ycord=int(((768-0) / (-400 - 400)) * (y-400 ) + 0)
mouse.position=(xcord, ycord)
这枪做的真gun
页:
[1]