目录:

目录

目录:

前言:

心路历程:

编程部分:

第一部分:

第二部分:


前言:

书接上回啊,上回不是说到,我想通过用操作游戏的方式来操作这个小车。那么这个编程部分呢,就分为两部分,第1部分就是怎么通过我键盘上的操作来执行所对应的程序,第2部分就是这个程序所对应到那块树莓派扩展板上,是怎么让小车达到前进与后退的目地的。通过介绍这两部分呢,我也想给大家介绍,不能说介绍,有可能是因为我太菜了,不如说是分享一下,我是怎么通过一步步的学习与搜索来达到我所想要让这个小车所实现的功能。

心路历程:

经过我的大致搜索,网上现存教程分为两种方法控制小车,第一种为写一个网页,通过JavaScript来定义几个按钮进而操控,由于我暂时没有学习过网页,所以这种方法被我放弃了,第二种方法为使用Python GUI编程(Tkinter)

action_up = ttk.Button(win, text="up", command=up)
action_up.pack()
action_back=ttk.Button(win, text="down", command=back)
action_back.pack()
action_side_right = ttk.Button(win, text="side_right", command=side_right)
action_side_right.pack()
action_side_lift=ttk.Button(win, text="side_lift", command=side_lift)
action_side_lift.pack()
action_stop=ttk.Button(win, text="stop",command=turnOffMotors)
action_stop.pack()
#win.mainloop()      # 当调用mainloop()时,窗口才会显示出来

但存在一些问题,由于我功能的定义,当我按下前进,小车会前进,但是会一直前进不会停下,这样我不得不再设置一个按钮功能是刹车,这样虽也能实现功能,但少了许多操作的乐趣。

在这之后我还从网上查找了许多办法,但都没有能成功实现或者达到我的目的。由于曾经有使用点灯制作声控开灯项目的经历,我也尝试使用点灯app,但由于我所熟悉使用的Python对于点灯来说没有相对应的文档,或者说它的文档现在制作的不是很全面,所以导致我没有成功实现。而官方所推荐使用的node.JavaScript我并不是很会使用,所以也没有考虑这个方案,最后在我不知道该用什么方法的时候,我环顾了一下哔喱哔喱上面的Python教程,发现有一个课程是讲关于游戏控制的。让我眼前一亮。

编程部分:

第一部分:

一般我们从网上购买回来板子,卖家都会带样例程序

myMotor = mh.getMotor(1)
#实例化一个轮子对象
myMotor.setSpeed(150)
#pwm调速,(0~255)
myMotor.run(Adafruit_MotorHAT.FORWARD);
#正转
myMotor.run(Adafruit_MotorHAT.RELEASE);
#反转

经过实际测试,四个轮子的正转反转与实际不符,所以我们要根据实际来自定义函数确定前进后退。

def myMotor_A_up():myMotor_A.run(Adafruit_MotorHAT.FORWARD)
def myMotor_B_up():myMotor_B.run(Adafruit_MotorHAT.FORWARD)
def myMotor_C_up():myMotor_C.run(Adafruit_MotorHAT.BACKWARD)
def myMotor_D_up():myMotor_D.run(Adafruit_MotorHAT.BACKWARD)def myMotor_A_down():myMotor_A.run(Adafruit_MotorHAT.BACKWARD)
def myMotor_B_down():myMotor_B.run(Adafruit_MotorHAT.BACKWARD)
def myMotor_C_down():myMotor_C.run(Adafruit_MotorHAT.FORWARD)
def myMotor_D_down():myMotor_D.run(Adafruit_MotorHAT.FORWARD)

这一步很重要,因为我们都知道麦轮是可以横向移动的,如果我们不再前期定义好方向的话,后期定义各种功能如斜向45°前进时,我们就无法确定轮子该前进还是后退,进而导致功能无法实现,我前期为了偷懒就没有先定义,后来花了几倍的时间才实现麦轮的特殊功能

下一步根据项目需要定义具体功能:

def up():myMotor_A_up()myMotor_B_up()myMotor_C_up()myMotor_D_up()
def back():myMotor_A_down()myMotor_B_down()myMotor_C_down()myMotor_D_down()
def side_right():myMotor_A_up()myMotor_B_up()myMotor_C_down()myMotor_D_down()
def side_lift():myMotor_A_down()myMotor_B_down()myMotor_C_up()myMotor_D_up()

第二部分:

while True:#print("stop")for event in pygame.event.get():if event.type == pygame.KEYDOWN:if event.key == pygame.K_w:print("w_down")up()if event.key == pygame.K_s:print("s_down")back()if event.key == pygame.K_a:print("a_down")side_lift()if event.key == pygame.K_d:print("d_down")side_right()if event.type == pygame.KEYUP:turnOffMotors()

树莓派小车

下面给出完整代码,亲测可用。

from Adafruit_MotorHAT import Adafruit_MotorHAT, Adafruit_DCMotorimport time
import atexit
import tkinter as tk
from tkinter import ttk
import cv2
import numpy
import pygamecap = cv2.VideoCapture(0)win = tk.Tk()
win.title("Python GUI")    # 添加标题# create a default object, no changes to I2C address or frequency
mh = Adafruit_MotorHAT(addr=0x60)# recommended for auto-disabling motors on shutdown!
def turnOffMotors():mh.getMotor(1).run(Adafruit_MotorHAT.RELEASE)mh.getMotor(2).run(Adafruit_MotorHAT.RELEASE)mh.getMotor(3).run(Adafruit_MotorHAT.RELEASE)mh.getMotor(4).run(Adafruit_MotorHAT.RELEASE)atexit.register(turnOffMotors)
################################# DC motor test!
myMotor_A = mh.getMotor(1)
myMotor_B = mh.getMotor(2)
myMotor_C = mh.getMotor(3)
myMotor_D = mh.getMotor(4)
speed=255
myMotor_A.setSpeed(speed)
myMotor_B.setSpeed(speed)
myMotor_C.setSpeed(speed)
myMotor_D.setSpeed(speed)
def myMotor_A_up():myMotor_A.run(Adafruit_MotorHAT.FORWARD)
def myMotor_B_up():myMotor_B.run(Adafruit_MotorHAT.FORWARD)
def myMotor_C_up():myMotor_C.run(Adafruit_MotorHAT.BACKWARD)
def myMotor_D_up():myMotor_D.run(Adafruit_MotorHAT.BACKWARD)def myMotor_A_down():myMotor_A.run(Adafruit_MotorHAT.BACKWARD)
def myMotor_B_down():myMotor_B.run(Adafruit_MotorHAT.BACKWARD)
def myMotor_C_down():myMotor_C.run(Adafruit_MotorHAT.FORWARD)
def myMotor_D_down():myMotor_D.run(Adafruit_MotorHAT.FORWARD)
def up():myMotor_A_up()myMotor_B_up()myMotor_C_up()myMotor_D_up()
def back():myMotor_A_down()myMotor_B_down()myMotor_C_down()myMotor_D_down()
def side_right():myMotor_A_up()myMotor_B_up()myMotor_C_down()myMotor_D_down()
def side_lift():myMotor_A_down()myMotor_B_down()myMotor_C_up()myMotor_D_up()
action_up = ttk.Button(win, text="up", command=up)     # 创建一个按钮, text:显示按钮上面显示的文字, command:当这个按钮被点击之后会调用command函数
action_up.pack()
action_back=ttk.Button(win, text="down", command=back)
action_back.pack()
action_side_right = ttk.Button(win, text="side_right", command=side_right)     # 创建一个按钮, text:显示按钮上面显示的文字, command:当这个按钮被点击之后会调用command函数
action_side_right.pack()
action_side_lift=ttk.Button(win, text="side_lift", command=side_lift)
action_side_lift.pack()
action_stop=ttk.Button(win, text="stop",command=turnOffMotors)
action_stop.pack()
#win.mainloop()      # 当调用mainloop()时,窗口才会显示出来
pygame.init()
size = width, height = 800, 600
screen = pygame.display.set_mode(size)
while True:#print("stop")for event in pygame.event.get():if event.type == pygame.KEYDOWN:if event.key == pygame.K_w:print("w_down")up()if event.key == pygame.K_s:print("s_down")back()if event.key == pygame.K_a:print("a_down")side_lift()if event.key == pygame.K_d:print("d_down")side_right()if event.type == pygame.KEYUP:turnOffMotors()

用玩游戏的方式操控树莓派小车之[代码部分].2相关推荐

  1. 智能计算机怎么玩游戏,用手机操控电脑 智能手机还能这样玩

    游戏达人们一直都走在潮流的前端,不停的追逐着更新更炫的游戏玩法.而我们的厂商也在不断加快技术升级的步伐.游戏一直朝着给玩家提供更真实的游戏体验的目标发展,相信每一个玩家都希望有一天能真正的体验到&qu ...

  2. 厉害了!寓教于乐,用玩游戏的方式学习 Git!

    作者 | mozlingyu 来源 | 少数派 用游戏的方式来学习,是一种有趣而高效的方式. 从刚接触电脑时的打字练习软件 金山打字通,到程序猿写代码的利器 Vim 都有小游戏(金山打字通游戏.VIM ...

  3. 树莓派小车python代码_【树莓派】树莓派小车(二)树莓派、小车和红外线模块连接...

    上一篇文章介绍了小车底盘以及驱动板的安装,这一次来讲一讲树莓派与驱动板以及红外线模块的安装. 树莓派的GPIO引脚定义: 树莓派的GPIO引脚共分为两种类型,一种是PHYSICAL NUMBERING ...

  4. 室友在宿舍玩游戏我学java_在宿舍写代码总被一个室友认为在装逼,该怎么办?...

    我也跟题主有同感,我以前学过点,以为能进地狱副本,跟室友并肩作战,建功立业, 没想到,直接被分到新手村里了. 在寝室里,我永远是起的最早,睡的最晚那位.我也是,每天都在做算法题,张口闭口二叉树,图啊, ...

  5. 树莓派小车————全部代码

    #coding=utf-8 import RPi.GPIO as GPIO import time from Tkinter import * from PIL import Image,ImageT ...

  6. 刺激战场模拟器过检测的被封号了怎么办?电脑控制手机玩游戏了解一下

    最近腾讯又搞大事情了,封禁了一大批模拟器用户,准确地说是用模拟器过检测匹配手机的玩家,但是很多正常的模拟器玩家也被误判封禁了,让很多人愤愤不平,纷纷转战刺激战场国际服. 其实除了可以用模拟器在电脑上玩 ...

  7. 利用Python实现键盘操控小车、通过树莓派GPIO使用python操控小车(树莓派小车、树莓派+Python+LN298操控小车)

    (树莓派小车.树莓派+Python+LN298操控小车) 一.Python代码获取键盘实时键位 二.树莓派自带GPIO控制电机 大功告成!编写不易,大家成功后点个关注or赞谢谢~~ 一.Python代 ...

  8. rust 局域网联机_腐蚀怎么进行局域网联机方式 酷跑加速器和你畅玩游戏世界

    到现在,还是有人在玩腐蚀这个游戏,玩的人还很多,小编就是其中一个,那如果要进行搭建rust的局域网联机方式要怎么办呢,大家是不是觉得有点意思呢,接下来就一起看看这个rust局域网的联机方式且腐蚀怎么进 ...

  9. 树莓派可以玩linux游戏吗,如何在树莓派上玩经典PC游戏

    Raspberry Pi提供了令人难以置信的游戏和其他软件库.您可能知道它为模拟其他平台奠定了良好的基础,但是您知道它可以运行复古的PC软件吗? 在Windows之前,就有MS-DOS.可以通过几种不 ...

最新文章

  1. 移动端制作公共样式reset
  2. UVA10943简单递推
  3. VS cmake远程调试ubuntu项目生成报错:“Does not match the generator used previously: Ninja“(删除.vs隐藏文件夹)
  4. 1044 火星数字 (20 分)(c++)
  5. 微服务架构师的职责——《微服务设计读书笔记》
  6. DeepMind提出训练网络新方法,快速找到最佳超参数和模型
  7. 什么是RUTP协议?RUDP协议在视频会议系统中的应用
  8. matplotlib条形图
  9. conda常用命令和基础知识整理
  10. PingCAP,中国第一只开源独角兽总融资达3.4亿美元,不能错过的开源深度解析
  11. STM32F103系列控制的OLED IIC 4针
  12. HTML-坐标的含义,以及变换的使用
  13. 组学生信| Front Immunol |基于血清蛋白质组早期诊断标志筛选的简单套路
  14. Python关键字keyword
  15. vs2019下载安装
  16. 获取U盘 VID,PID
  17. redis:CLUSTER cluster is down 解决方法
  18. 服务器运行时间设置,服务器的时间同步设置方法
  19. 计算机硬件找不到网络适配器,图文学习网络适配器不见了 【操作教程】 的恢复方法_...
  20. 活捉那只抢算力的谷歌员工!挤占计算资源?博弈论或可破解数据中心“囚徒困境”...

热门文章

  1. getResource()函数的路径问题
  2. L1-049 天梯赛座位分配 (20 分)
  3. 【程序设计】字符串题单
  4. 光伏企业“走出去”:创新合作方式 避免无序竞争
  5. 古典密码(部分合集)
  6. 《Linux网络管理应用 大学笔记 》- 初学者 - 用户和组的管理
  7. 用 telnet 访问网站发送 HTTP 请求
  8. Python实效编程04 --100以内加减乘除自动生成
  9. 阿里旺旺信息发送器(一键发送,教程V)
  10. 产品分析|网易云音乐-音乐社区的未来