使用EV3主机上的按键控制小车还是比较麻烦,能不能通过遥控来控制小车呢?
当然可以!
乐高提供了一个红外线传感器和遥控器:
但是红外遥控器需要很强的方向性,而且那个遥控器太简陋了,连个摇杆都没有。
还有一种方式是使用蓝牙手柄,这样我们就可以找一个游戏手柄直接通过蓝牙控制小车,太方便了有木有!
我找了一个任天堂的游戏手柄:
理论上支持蓝牙的游戏手柄都是可用的,标准游戏手柄按键如下:
┌──────┐ ┌──────┐
┌┴─────┐│ ┌┴─────┐│
┌─┴──────┴┴──────────────────┴──────┴┴─┐
│ ┌─┐ ┌─┐ ┌─┐ │
│ ┌─┐ └─┘ └─┘ ┌─┐│X│ │
│ ┌─┘ └─┐ - + │Y│└─┘┌─┐ │
│ └─┐ ┌─┘ ┌─┐ ┌─┐ └─┘┌─┐│A│ │
│ └─┘ └─┘ └─┘ │B│└─┘ │
│ ┌─┐ S H ┌─┐ └─┘ │
│ ┌─┘ └─┐ ┌─┘ └─┐ │
│ └─┐ ┌─┘ └─┐ ┌─┘ │
│ └─┘ └─┘ │
│ ──────────────────────── │
│ / \ │
│ / \ │
└────/ \────┘
把游戏手柄和EV3主机用蓝牙连起来很简单,但是怎么用Python程序读取手柄的输入?
一般来说,从外部设备读取输入时,应用程序并不直接与外设打交道,而是由操作系统通过驱动程序连接外设,然后,通过操作系统提供的API读取输入。Windows程序可以通过DirectX访问外设,运行在网页的JavaScript程序可以通过浏览器提供的Gamepad API。
EV3主机运行的是Debian Linux,那么Python程序如何在Linux下读取手柄的输入?
在Linux中,系统把每个外设都映射为文件,每个设备的输入也被映射为文件。/proc目录挂载的就是Linux的虚拟文件系统,映射Linux的进程信息和设备信息。我们登录到EV3,查看/proc/bus/input/devices文件:
$ cat /proc/bus/input/devices
I: Bus=0000 Vendor=0000 Product=0000 Version=0000
N: Name="LEGO MINDSTORMS EV3 Speaker"
P: Phys=