Акселерометр
Объект дает вам доступ к акселерометру. Акселерометр также предоставляет удобные функции для обнаружения
жестов: up
, down
, left
, right
, face up
,
face down
, freefall
, 3g
, 6g
, 8g
, shake
.
Функции
- microbit.accelerometer.get_x()
Возвращение параметра ускорения по оси
x
- положительное или отрицательное целое, в зависимости от направления. Измерение приведено в милли-г. По умолчанию акселерометр настроен на диапазон +/- 2g, и поэтому этот метод будет возвращаться в диапазоне +/- 2000 мг.
- microbit.accelerometer.get_y()
Возвращение параметра ускорения по оси
y
- положительное или отрицательное целое, в зависимости от направления. Измерение приведено в милли-г. По умолчанию акселерометр настроен на диапазон +/- 2g, и поэтому этот метод будет возвращаться в диапазоне +/- 2000 мг.
- microbit.accelerometer.get_z()
Возвращение параметра ускорения по оси
z
- положительное или отрицательное целое, в зависимости от направления. Измерение приведено в милли-г. По умолчанию акселерометр настроен на диапазон +/- 2g, и поэтому этот метод будет возвращаться в диапазоне +/- 2000 мг.
- microbit.accelerometer.get_values()
Возвращение параметра ускорения по трем осям - набор чисел в порядке X, Y, Z.
- 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()
Возвращает кортеж истории жестов. Также очищает историю жестов перед возвратом.
Примечание
Жесты не обновляются в фоновом режиме, поэтому должны быть постоянными.
Вы вызываете какой-либо метод акселерометра для обнаружения жестов. Как правило
жесты могут быть обнаружены с помощью цикла с небольшой задержкой microbit.sleep()
.
Примеры
Программа волшебный шар.
'''Программа волшебный шар.'''
from random import choice
from microbit import accelerometer, display, sleep
answers = ['Yes', 'No', 'Аsk more']
while True:
display.show('8')
if accelerometer.was_gesture('shake'):
display.clear()
sleep(1000)
display.scroll(choice(answers))
sleep(10)
Перемещайте устройство, чтобы избежать препятствий.
'''Движение пикселя'''
import random
from microbit import (Image, accelerometer, button_a, display, running_time,
sleep)
MIN_X = -1024
MAX_X = 1024
WALL_MIN_SPEED = 400
PLAYER_MIN_SPEED = 200
WAALL_MAX_SPEED = 100
PLAYER_MAX_SPEED = 50
SPEED_MAX = 12
range_x = MAX_X - MIN_X
while True:
template = Image('00000:'*5)
s = template.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 = 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
sleep(delta)
continue
if wall_update:
# расчет новой скорости
speed = min(score, SPEED_MAX)
wall_speed = WALL_MIN_SPEED + int((WAALL_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:
# замена препядствия
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 = accelerometer.get_x()
x = min(max(MIN_X, x), MAX_X)
# отключить старую позицию (пиксель)
s(player_x, 4, 0)
x = ((x - MIN_X) / range_x) * 5
x = min(max(0, x), 4)
x = int(x + 0.5)
if not handled_this_wall:
if player_x < x:
player_x += 1
elif player_x > x:
player_x -= 1
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)
display.show(template)
display.show(template.SAD)
sleep(1000)
display.scroll("Score:" + str(score))
while True:
if (button_a.is_pressed() and button_a.is_pressed()):
break
sleep(100)