【代码】树莓派小车蓝牙键盘遥控方向行驶

连接蓝牙键盘,实现像遥控小车一样的效果

环境:安装pynput库

使用方法:运行程序,按键WASD,实现前进左右后退

# coding:utf-8
import RPi.GPIO as gpio
import time, sys
from pynput import keyboard

# 定义引脚
in1 = 12
in2 = 16
in3 = 18
in4 = 22

# 设置GPIO口为BOARD编号规范
gpio.setmode(gpio.BOARD)

# 设置GPIO口为输出
gpio.setup(in1, gpio.OUT)
gpio.setup(in2, gpio.OUT)
gpio.setup(in3, gpio.OUT)
gpio.setup(in4, gpio.OUT)

# 设置PWM波,频率为500Hz
pwm1 = gpio.PWM(in1, 500)
pwm2 = gpio.PWM(in2, 500)
pwm3 = gpio.PWM(in3, 500)
pwm4 = gpio.PWM(in4, 500)
pwm1.start(0)
pwm2.start(0)
pwm3.start(0)
pwm4.start(0)


# 定义向前
def go():
    pwm1.ChangeDutyCycle(50)
    pwm2.ChangeDutyCycle(0)
    pwm3.ChangeDutyCycle(50)
    pwm4.ChangeDutyCycle(0)
    # gpio.output(in1, gpio.HIGH)
    # gpio.output(in2, gpio.LOW)
    # gpio.output(in3, gpio.HIGH)
    # gpio.output(in4, gpio.LOW)


# 定义向右
def right():
    pwm1.ChangeDutyCycle(50)
    pwm2.ChangeDutyCycle(0)
    pwm3.ChangeDutyCycle(30)
    pwm4.ChangeDutyCycle(0)
    # gpio.output(in1, gpio.HIGH)
    # gpio.output(in2, gpio.LOW)
    # gpio.output(in3, gpio.LOW)
    # gpio.output(in4, gpio.HIGH)


# 定义向左
def left():
    pwm1.ChangeDutyCycle(30)
    pwm2.ChangeDutyCycle(0)
    pwm3.ChangeDutyCycle(50)
    pwm4.ChangeDutyCycle(0)
    # gpio.output(in1, gpio.LOW)
    # gpio.output(in2, gpio.HIGH)
    # gpio.output(in3, gpio.HIGH)
    # gpio.output(in4, gpio.LOW)


# 定义向后
def back():
    pwm1.ChangeDutyCycle(0)
    pwm2.ChangeDutyCycle(50)
    pwm3.ChangeDutyCycle(0)
    pwm4.ChangeDutyCycle(50)
    # gpio.output(in1, gpio.LOW)
    # gpio.output(in2, gpio.HIGH)
    # gpio.output(in3, gpio.LOW)
    # gpio.output(in4, gpio.HIGH)


# 定义停止
def stop():
    pwm1.ChangeDutyCycle(0)
    pwm2.ChangeDutyCycle(0)
    pwm3.ChangeDutyCycle(0)
    pwm4.ChangeDutyCycle(0)
    # gpio.output(in1, gpio.LOW)
    # gpio.output(in2, gpio.LOW)
    # gpio.output(in3, gpio.LOW)
    # gpio.output(in4, gpio.LOW)


def on_press(key):
    try:
        if key.char == 'w':
            go()
        if key.char == 'a':
            left()
        if key.char == 's':
            back()
        if key.char == 'd':
            right()
    except AttributeError:
        print('special key {0} pressed'.format(key))


def on_release(key):
    stop()
    if key == keyboard.Key.esc:
        return False

# 键盘监听
while True:
    with keyboard.Listener(
            on_press=on_press, on_release=on_release) as listener:
        listener.join()

pwm1.stop()
pwm2.stop()
pwm3.stop()
pwm4.stop()
gpio.cleanup()
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yzy_1996

买杯咖啡,再接再厉

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值