加速度センサー¶
このオブジェクトでボード上の加速度センサーにアクセスできます。加速度センサーはジェスチャーを検出するのにも使えます。認識できるジェスチャーとしては up
, down
, left
, right
, face up
, face down
, freefall
, 3g
, 6g
, 8g
, shake
があります。
関数¶
-
microbit.accelerometer.
get_x
()¶ x
軸の加速度を得ます。方向に応じて正または負の整数値になります。
-
microbit.accelerometer.
get_y
()¶ y
軸の加速度を得ます。方向に応じて正または負の整数値になります。
-
microbit.accelerometer.
get_z
()¶ z
軸の加速度を得ます。方向に応じて正または負の整数値になります。
-
microbit.accelerometer.
get_values
()¶ すべての軸の加速度を得ます。X, Y, Z の順番の3要素の整数値のタプルが返ります。
-
microbit.accelerometer.
current_gesture
()¶ 現在のジェスチャーの名前を返します。
注釈
MicroPython は次の名前のジェスチャーを認識します: "up"
, "down"
, "left"
, "right"
, "face up"
, "face down"
, "freefall"
, "3g"
, "6g"
, "8g"
, "shake"
。ジェスチャーは常に文字列で表されます。
-
microbit.accelerometer.
is_gesture
(name)¶ 指定した名前のジェスチャーが認識されているかにより True または False を返します。
-
microbit.accelerometer.
was_gesture
(name)¶ 前回の呼出し以降に指定した名前のジェスチャーが認識されたかにより True または False を返します。
-
microbit.accelerometer.
get_gestures
()¶ ジェスチャーの履歴をタプルで返します。タプルは古い順に並び、最新のものが最後の要素になります。この呼出しを行うとジェスチャーの履歴はクリアされます。
サンプルコード¶
マジック8ボール占いです。質問の後にデバイスを振ってください。
# マジック8ボール占い 作成者:Nicholas Tollervey 2016年2月。
#
# 質問の後にデバイスを振ってください。
#
# このプログラムはパブリックドメインで公開します。
from microbit import *
import random
answers = [
"It is certain",
"It is decidedly so",
"Without a doubt",
"Yes, definitely",
"You may rely on it",
"As I see it, yes",
"Most likely",
"Outlook good",
"Yes",
"Signs point to yes",
"Reply hazy try again",
"Ask again later",
"Better not tell you now",
"Cannot predict now",
"Concentrate and ask again",
"Don't count on it",
"My reply is no",
"My sources say no",
"Outlook not so good",
"Very doubtful",
]
while True:
display.show('8')
if accelerometer.was_gesture('shake'):
display.clear()
sleep(1000)
display.scroll(random.choice(answers))
sleep(10)
単純なスラロームです。デバイスを動かして障害物を避けてください。
# 単純なスラローム 作成者:Larry Hastings 2015年9月。
#
# このプログラムはパブリックドメインで公開します。
import microbit as m
import random
p = m.display.show
min_x = -1024
max_x = 1024
range_x = max_x - min_x
wall_min_speed = 400
player_min_speed = 200
wall_max_speed = 100
player_max_speed = 50
speed_max = 12
while True:
i = m.Image('00000:'*5)
s = i.set_pixel
player_x = 2
wall_y = -1
hole = 0
score = 0
handled_this_wall = False
wall_speed = wall_min_speed
player_speed = player_min_speed
wall_next = 0
player_next = 0
while True:
t = m.running_time()
player_update = t >= player_next
wall_update = t >= wall_next
if not (player_update or wall_update):
next_event = min(wall_next, player_next)
delta = next_event - t
m.sleep(delta)
continue
if wall_update:
# 新しいスピードを計算
speed = min(score, speed_max)
wall_speed = wall_min_speed + int((wall_max_speed - wall_min_speed) * speed / speed_max)
player_speed = player_min_speed + int((player_max_speed - player_min_speed) * speed / speed_max)
wall_next = t + wall_speed
if wall_y < 5:
# erase old wall
use_wall_y = max(wall_y, 0)
for wall_x in range(5):
if wall_x != hole:
s(wall_x, use_wall_y, 0)
wall_reached_player = (wall_y == 4)
if player_update:
player_next = t + player_speed
# 新しい X 座標を得る
x = m.accelerometer.get_x()
x = min(max(min_x, x), max_x)
# print("x accel", x)
s(player_x, 4, 0) # 古いピクセルをオフ
x = ((x - min_x) / range_x) * 5
x = min(max(0, x), 4)
x = int(x + 0.5)
# print("have", position, "want", x)
if not handled_this_wall:
if player_x < x:
player_x += 1
elif player_x > x:
player_x -= 1
# print("new", position)
# print()
if wall_update:
# 壁の位置を変更
wall_y += 1
if wall_y == 7:
wall_y = -1
hole = random.randrange(5)
handled_this_wall = False
if wall_y < 5:
# 新しい壁を表示
use_wall_y = max(wall_y, 0)
for wall_x in range(5):
if wall_x != hole:
s(wall_x, use_wall_y, 6)
if wall_reached_player and not handled_this_wall:
handled_this_wall = True
if (player_x != hole):
# 衝突! ゲームオーバー!
break
score += 1
if player_update:
s(player_x, 4, 9) # 新しいピクセルをオン
p(i)
p(i.SAD)
m.sleep(1000)
m.display.scroll("Score:" + str(score))
while True:
if (m.button_a.is_pressed() and m.button_a.is_pressed()):
break
m.sleep(100)