简体   繁体   English

让电机向前行驶一段时间? 树莓派

[英]Getting a motor to move forward for a time duration? Raspberry Pi

I have recently purchase the Pi2go lite by 4tronix. 我最近购买了4tronix的Pi2go lite。 As part of the provided library, you can move forward and back, but this takes place forever, I want, on a keyboard press for that to happen, then when the button is no longer pressed no action occurs. 作为提供的库的一部分,您可以向前和向后移动,但是这要永远发生,我想在键盘上按下该键,然后不再按下按钮时就不执行任何操作。 Having done some research this does not see to be a well known process or can be done at all, however my solution would be on a key press, the operation to only occur for half a second, to imitate the process of holding a key. 做过一些研究后,这似乎不是一个众所周知的过程,或者根本无法完成,但是我的解决方案是在按键上进行,该操作只发生半秒钟,以模仿按住按键的过程。 How could this be achieved? 如何做到这一点? Thank you in advanced. 在此先感谢您。 Below is the code supplied by the raspberry Pi Guy in GitHub, however once the 'W' key is pressed it is hard to control as it doesn't stop when you let go of the key. 以下是GitHub上的覆盆子Pi Guy提供的代码,但是一旦按下“ W”键,就很难控制,因为放开它并不会停止。

import pi2go, time

# Reading a button press from your keyboard, don't worry about this too much!
import sys
import tty
import termios

UP = 0
DOWN = 1
RIGHT = 2
LEFT = 3

def readchar():
fd = sys.stdin.fileno()
old_settings = termios.tcgetattr(fd)
try:
    tty.setraw(sys.stdin.fileno())
    ch = sys.stdin.read(1)
finally:
    termios.tcsetattr(fd, termios.TCSADRAIN, old_settings)
if ch == '0x03':
    raise KeyboardInterrupt
return ch

def readkey(getchar_fn=None):
getchar = getchar_fn or readchar
c1 = getchar()
if ord(c1) != 0x1b:
    return c1
c2 = getchar()
if ord(c2) != 0x5b:
    return c1
c3 = getchar()
return ord(c3) - 65  # 0=Up, 1=Down, 2=Right, 3=Left arrows


speed = 30

pi2go.init()

try:
while True:
    keyp = readkey()
    if keyp == 'w' or keyp == UP:
        pi2go.forward(speed)
        print 'Forward', speed
    elif keyp == 's' or keyp == DOWN:
        pi2go.reverse(speed)
        print 'Backward', speed
    elif keyp == 'd' or keyp == RIGHT:
        pi2go.spinRight(speed)
        print 'Spin Right', speed
    elif keyp == 'a' or keyp == LEFT:
        pi2go.spinLeft(speed)
        print 'Spin Left', speed

    elif keyp == '.' or keyp == '>':
        speed = min(100, speed+10)
        print 'Speed+', speed
    elif keyp == ',' or keyp == '<':
        speed = max (0, speed-10)
        print 'Speed-', speed

    elif keyp == ' ':
        pi2go.stop()
        print 'Stop'
    elif ord(keyp) == 3:
        break


except KeyboardInterrupt:
   pi2go.cleanup()

The easiest way is to make a simple python program with a Gtk gui that detects keypress 最简单的方法是使用可检测按键的Gtk GUI创建一个简单的python程序

import gtk

class DK:
    def __init__(self):
        window = gtk.Window()
        window.add_events(gtk.gdk.KEY_PRESS_MASK)
        window.connect("key-press-event", self.forward)
        window.show()
    def forward(self, widget, event):
        if event.keyval == 119: #W key
            print "do what you want with this"
            forward(100)
        else:
            stop()

DK()
gtk.main()

我有从同一个站点购买的启动项,您可以在pi2go.py中的pi2go.forward(speed)下方的行上添加time.sleep(0.5)半秒,或者在pi2go.py中添加实际的前进功能

This is my code. 这是我的代码。

elif key == 'w':
        speed = min(100, speed+10)
        pi2go.forward(speed)
        print 'Forward', speed
        time.sleep(.100)
    pi2go.stop()
elif key == 's':
    speed = min(100, speed+10)
        pi2go.reverse(speed)
        print 'Reverse', speed
        time.sleep(.100)
    pi2go.stop()
elif key == 'd':
    speed = min(100, speed+10)
        pi2go.spinRight(speed)
        print 'Spin Right', speed
        time.sleep(.100)
    pi2go.stop()
elif key == 'a':
    speed = min(100, speed+10)
        pi2go.spinLeft(speed)
        print 'Spin Left', speed
    time.sleep(.100)
    pi2go.stop()
    elif key == 'b':
        speed = min(100, speed+10)
        print 'Speed+', speed
    elif key == 'v':
        speed = max (0, speed-10)
        print 'Speed-', speed
    elif key == ' ':
        pi2go.stop()
        print 'Stop'
    elif ord(key) == 3:
    break

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM