読者です 読者をやめる 読者になる 読者になる

WELCOME TO EASTWORLD

Eastworld でドロイド遊び Rapiro が主人公 ラズパイが好物

番外編 蛇の道、一里塚の巻

Rapiro Raspberry Pi Python PS4 コントローラー Pi Camera はてなブログ HTML

今までのコードをプチ修正の上、これまでの足跡としてブログに貼り付けたかったが、はてブにコードをコピペするとインデントが崩れて面倒だった。

そこで、はてブにはHTML編集モードがあるので、一旦、オンラインのHTMLエディターでHTMLコードに変換してから貼り付けてみた。

白黒、色気なしのソースそばって感じだが、とりあえずOKでしょう。色気はそのうち醸し出すということで。

ブログサイト活用も初めてだし、色々と勉強ですな~

 

以下、一里塚の記念碑に:

 

import picamera
camera = picamera.PiCamera()
camera.hflip = True
camera.vflip = True
from time import time
from datetime import datetime
cammode = 1   # Camera mode 1:Picture, 2:Movie
import sys

import serial
ser = serial.Serial('/dev/ttyS0', 57600, timeout = 10)

import pygame
pygame.init()
pygame.joystick.init()
joystick = pygame.joystick.Joystick(0)
joystick.init()
buttons = joystick.get_numbuttons()
axes = joystick.get_numaxes()

done = False

while done==False:
    try:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                done=True

            if event.type == pygame.JOYBUTTONDOWN:
                #print("Joystick button pressed.")

                 for i in range( buttons ):
                    button = joystick.get_button( i )
                    if button == 1:
                        if i == 0:              # Square
                            ser.write("#M8")
                        elif i == 1:            # X
                            ser.write("#M0")
                        elif i == 2:            # Circle
                            ser.write("#M6")
                        elif i == 3:            # Triangle
                            ser.write("#M5")
                        elif i == 9:            # OPTIONS
                            cammode *= -1
                            if cammode == 1:
                                print("Picture mode")
                                raise Exception
                            else:
                                print("Movie mode")
                                raise Exception
                        elif i == 10:           # Left Stick push
                            t = str(datetime.now())
                            if cammode == 1:
                                picn = "rapiro_pic_" + t + ".jpg"
                                camera.capture(picn)
                                print("Snapshot " + picn + " taken")
                            else:
                                vidn = "rapiro_vid_" + t + ".h264"
                                try:
                                    camera.start_recording(vidn)
                                    print("Started video recording " + vidn)
                                except Exception as e:
                                    sys.exc_clear()   #or print(e)
                        elif i == 12:
                            print("PS button pressed. Goodbye!")
                            ser.write("#M0")
                            done=True

            elif event.type == pygame.JOYBUTTONUP:
                #print("Joystick button released.")

                try:
                    if joystick.get_button( 10 ) < 1:
                        camera.stop_recording()
                        print("Stopped recording video")
                except Exception as e:
                    sys.exc_clear()   #or print(e)

            elif event.type == pygame.JOYAXISMOTION:

                for i in range( axes ):
                    axis = joystick.get_axis(i)
                    if axis < -0.9:
                        if i == 0:           # Axis 0: Left Joystick horizontal
                            print("Left")
                            ser.write("#M3")
                        elif i == 1:         # Axis 1: Left Joystick vertical
                            print("Forward")
                            ser.write("#M1")
                    elif axis > 0.9:
                        if i == 0:
                            print("Right")
                            ser.write("#M4")
                        elif i == 1:
                            print("Backward")
                            ser.write("#M2")

            elif event.type == pygame.JOYHATMOTION:
                #print("Hat motion detected")
                hat = joystick.get_hat( 0 )

                if hat == ( -1, 0 ):
                    print("Hat Left")
                    ser.write("#PS05A050T005")
                elif hat == ( 0, -1 ):
                    print("Hat Down")
                    ser.write("#PS05A180S02A000T005")
                elif hat == ( 1, 0 ):
                    print("Hat Right")
                    ser.write("#PS02A130T005")
                elif hat == ( 0, 1 ):
                    print("Hat Up")
                    ser.write("#PS06A100S05A030S03A070S02A150T005")
    except Exception:
        pass

pygame.quit ()

 

<メモ>

・動画が尻切れになっていた。25秒ほどの撮影で、Stick をリリースした時点で Stopped recording... と表示されていたが、動画を見てみると 8秒ほどの時点で切れてしまっていた。

何故だろう?

まあ、いずれにせよ、ラズパイも PiCamera もほぼ未開拓なので、先は長いね、お兄さん!