2015年7月14日 星期二

My MotoRun 鍵盤控制 遠端版本

之前的版本是使用pygame的函式去控制的,缺點是需要視窗化界面的環境.
有人會問說,那為啥在shell mode下執行是可行的.
這需要解釋一下,因為目前Raspberry Pi所提供的OS,看是文字模式,但左上角有出現四顆樹莓吧.且畫面解析度跟螢幕有關.其實這是圖形化界面的sheel mode.也就是俗稱的Frame Buffer.因此上一版的程式會在Frame Buffer下建立一個視窗,但沒有寫結束關閉視窗的控制,所以會有無法離開程式的窘境.這部分未來是可以優化的.
不過當使用putty進行telent 登入後.這時就很殘酷了.那美美的字型跟樹莓圖案都看不到了.
那之前寫的code怎麼辦.的確.在純文字介面下.pygame會無用武之地
因此需要使用curses的函式來取代pygame
定義上 前後左右方向的設定是一樣的 但停車就需要定義按鍵了 在此定義為p

#!/usr/bin/python
import RPi.GPIO as GPIO
import time
import curses

# Use physical pin numbers
GPIO.cleanup()
GPIO.setmode(GPIO.BOARD)

# Set up header 4 GPIO pin as an input
PinIN1 = 31 # GPIO6 as IN1
PinIN2 = 33 # GPIO13 as IN2
PinIN3 = 35 # GPIO19 as IN3
PinIN4 = 37 # GPIO26 as IN4
GPIO.setup(PinIN1, GPIO.OUT)
GPIO.setup(PinIN2, GPIO.OUT)
GPIO.setup(PinIN3, GPIO.OUT)
GPIO.setup(PinIN4, GPIO.OUT)

def InitialMoto():
    GPIO.output(PinIN1, False)
    GPIO.output(PinIN2, False)
    GPIO.output(PinIN3, False)
    GPIO.output(PinIN4, False)

def TurnRight():
    GPIO.output(PinIN1, False)
    GPIO.output(PinIN2, True)
    GPIO.output(PinIN3, False)
    GPIO.output(PinIN4, True)

def TurnLeft():
    GPIO.output(PinIN1, True)
    GPIO.output(PinIN2, False)
    GPIO.output(PinIN3, True)
    GPIO.output(PinIN4, False)

def Backward():
    GPIO.output(PinIN1, False)
    GPIO.output(PinIN2, True)
    GPIO.output(PinIN3, True)
    GPIO.output(PinIN4, False)

def Fordward():
    GPIO.output(PinIN1, True)
    GPIO.output(PinIN2, False)
    GPIO.output(PinIN3, False)
    GPIO.output(PinIN4, True)

def StopMoving():
    GPIO.output(PinIN1, False)
    GPIO.output(PinIN2, False)
    GPIO.output(PinIN3, False)
    GPIO.output(PinIN4, False)

print('Start Test')

stdscr = curses.initscr()
stdscr.keypad(1)
stdscr.addstr(0,10,"Hit 'q' to quit")
stdscr.refresh()
key = ''

InitialMoto()

while key != ord('q'):

    key = stdscr.getch()
    stdscr.addch(20,25,key)
    stdscr.refresh()
    if key == curses.KEY_DOWN: # Backward
       stdscr.addstr(3, 20, "Down") 
       Backward()
       print('Down')
    elif key == curses.KEY_UP: # Fordward
       stdscr.addstr(2, 20, "Up") 
       Fordward()
       print('Up')
    elif key == curses.KEY_RIGHT:  # Turn Right
       stdscr.addstr(3, 25, "Right")
       TurnRight()
       print('Right')
    elif key == curses.KEY_LEFT:  # Turn Left
       stdscr.addstr(3, 15, "Left")
       TurnLeft()
       print('Left')
    elif key == ord('p'):
       StopMoving()
        
    
curses.endwin()
#    clock.tick(20)

沒有留言:

張貼留言

2024東京迪士尼,愛與夢想的樂園行

疫情的關係, 很多年沒有出國旅遊了.這回計畫出遊日本.歷經磨難的挑選.最後勝出的行程是五福旅行社的"銀色雪東京五日-戲雪,和服體驗,迪士尼"這標題簡單的標註出此行的目的. 上回去東京是20年前了.可以參考一下過去 2004年的Blog紀錄 心中的願景是能看到前...