有人會問說,那為啥在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)
沒有留言:
張貼留言