def wrapper(): # Setup b = Button(INPUT_PIN) o = Output(OUTPUT_PIN, active_low=output_active_low) passed = func(b, o) # Teardown b.disable() o.disable() return passed
def _test_output_defaults_with_button(): b = Button(INPUT_PIN) o = Output(OUTPUT_PIN) # default is active low! o.off() # HIGH time.sleep(MINIMUM_BUTTON_PRESS_PERIOD) released_worked = b.is_released() # Released button is HIGH o.on() # LOW time.sleep(MINIMUM_BUTTON_PRESS_PERIOD) pressed_worked = b.is_pressed() # PRESSED button is LOW b.disable() o.disable() return released_worked and pressed_worked
def button_wait(b, o, press, push_time, timeout_time): def push(): o.off() time.sleep(MINIMUM_BUTTON_PRESS_PERIOD) o.on() kwargs = {} if timeout_time: kwargs['timeout'] = timeout_time kwargs['press'] = press o.on() time.sleep(MINIMUM_BUTTON_PRESS_PERIOD) # clear queue if isinstance(b, list): for button in b: button.presses() else: b.presses() try: t = Timer(push_time, push) t.start() if isinstance(b, list): wait_ret = Button.wait_many(b, **kwargs) else: wait_ret = b.wait(**kwargs) finally: t.join() print("button wait returned: ", wait_ret) return wait_ret
def button_invalid_pin(): passed = False try: Button(28) except ValueError: passed = True return passed
def button_recreation(): # Recreate button pin several times and verify for i in range(5): button_in = Button(INPUT_PIN) button_out = Button(OUTPUT_PIN) button_in.disable() button_out.disable() return _test_output_defaults_with_button()
from rstem.accel import Accel from rstem.button import Button from rstem.mcpi import minecraft, control from rstem.led_matrix import FrameBuffer import time control.show() mc = minecraft.Minecraft.create() keymap = { Button(18): control.left, Button(14): control.right, Button(15): control.forward, Button(23): control.backward, Button(7): control.smash, Button(24): control.jump, } accel = Accel() fb = FrameBuffer() flash_count = 0 FLASH_COUNT = 3 table = 0 TABLE_THRESH = 10 EPSILON = 0.03 flash_lit = True while True: pos = mc.player.getTilePos() flashing = False x = round(pos.x / 10 + 3.5)
#!/usr/bin/env python3 import rstem from rstem.button import Button from rstem.gpio import Output from rstem.sound import Note from random import randrange import time buttons = [Button(27), Button(23), Button(24), Button(22)] lights = [Output(4), Output(18), Output(14), Output(15)] notes = [Note('A'), Note('B'), Note('C'), Note('D')] you_failed_note = Note('E2') you_failed_note.volume = 1000 for note in notes: note.volume = 400 for light in lights: light.off() play_order = [] failed = False while not failed: play_order += [randrange(4)] # Play sequence for i in play_order: lights[i].on() notes[i].play(0.4).wait() lights[i].off() time.sleep(0.2)
from random import randint from math import atan2, degrees control.show(hide_at_exit=True) mc = minecraft.Minecraft.create() ARENA_WIDTH = 10 GOLD_DEPTH = 2 gold_pos = mc.player.getTilePos() gold_pos.x += randint(-ARENA_WIDTH, ARENA_WIDTH) gold_pos.z += randint(-ARENA_WIDTH, ARENA_WIDTH) gold_pos.y = mc.getHeight(gold_pos.x, gold_pos.z) - GOLD_DEPTH mc.setBlock(gold_pos, block.GOLD_BLOCK) keymap = { Button(23): control.left, Button(14): control.right, Button(18): control.forward, Button(15): control.backward, Button(7): control.smash, } accel = Accel() arrow0deg = Sprite(""" -------- -------- -----F-- ------F- FFFFFFFF ------F-
# ################################## # Import Modules and Initialize Game # ################################## from rstem.button import Button from rstem.gpio import Output from rstem.sound import Note from random import randrange import time from itertools import cycle buttons = [Button(14), Button(15), Button(23), Button(17)] lights = [Output(4), Output(18), Output(24), Output(27)] notes = [Note('C5'), Note('D5'), Note('E5'), Note('F5')] you_failed_note = Note('E4') light_cycle = cycle(lights) while True: for b in buttons: b.presses() pressed = False prev_light = next(light_cycle) cur_light = next(light_cycle) while not pressed: prev_light.off() cur_light.on() prev_light = cur_light cur_light = next(light_cycle) for b in buttons:
from rstem.accel import Accel from rstem.button import Button from rstem.mcpi import control import time control.show(hide_at_exit=True) left = Button(23) right = Button(14) up = Button(18) down = Button(15) accel = Accel() while True: if left.is_pressed(): control.left() else: control.left(release=True) if right.is_pressed(): control.right() else: control.right(release=True) if up.is_pressed(): control.forward() else: control.forward(release=True) if down.is_pressed(): control.backward() else: control.backward(release=True)
Sprite(arrow30deg).rotate(90), Sprite(arrow45deg).rotate(90), Sprite(arrow60deg).rotate(90), Sprite(arrow75deg).rotate(90), Sprite(arrow0deg).rotate(180), Sprite(arrow15deg).rotate(180), Sprite(arrow30deg).rotate(180), Sprite(arrow45deg).rotate(180), Sprite(arrow60deg).rotate(180), Sprite(arrow75deg).rotate(180), Sprite(arrow0deg).rotate(270), Sprite(arrow15deg).rotate(270), Sprite(arrow30deg).rotate(270), Sprite(arrow45deg).rotate(270), Sprite(arrow60deg).rotate(270), Sprite(arrow75deg).rotate(270), ] compass = Button(24) fb = FrameBuffer() while True: if compass.presses(): heading = control.get_heading(mc) fb.erase() arrow_index = round(heading/15) % 24 fb.draw(arrows[arrow_index]) fb.show() time.sleep(0.01)
from rstem.button import Button button = Button(14) print(button.is_pressed())
from rstem.button import Button buttons = [Button(14), Button(15), Button(24), Button(23)] button = button[2] if button.is_pressed(): print("Button was pressed: ", button.pin) else: print("Button was released: ", button.pin)
#!/usr/bin/env python3 from rstem.button import Button from rstem.sound import Note buttons = [Button(22), Button(23), Button(24), Button(27)] notes = [Note('A'), Note('B'), Note('C'), Note('D')] while True: for button, note in zip(buttons, notes): if button.is_pressed(): if not note.is_playing(): note.play(duration=None) else: note.stop()
from rstem.button import Button from rstem.mcpi import minecraft, control, block from rstem.mcpi.vec3 import Vec3 import time from math import sin, cos, radians control.show(hide_at_exit=True) mc = minecraft.Minecraft.create() button = Button(7) while True: if button.presses(): heading = control.get_heading(mc) x_delta = sin(radians(heading)) z_delta = cos(radians(heading)) pos = mc.player.getPos() - Vec3(0, 1, 0) for i in range(100): pos += Vec3(x_delta, 0, z_delta) mc.setBlock(pos, block.STONE) time.sleep(0.01)
from rstem.button import Button from rstem.mcpi import minecraft, control, block from rstem.mcpi.vec3 import Vec3 from rstem.led_matrix import FrameBuffer, Text from rstem.sound import Sound import time fb = FrameBuffer() bomb_sound = Sound("fire.wav") control.show(hide_at_exit=True) mc = minecraft.Minecraft.create() bomb = Button(7) up = Button(18) down = Button(15) def detonate(mc, pos, radius=1): r_vector = Vec3(radius, radius, radius) mc.setBlocks(pos - r_vector, pos + r_vector, block.AIR) bomb_sound.play() place_mode = True radius = 1 while True: if place_mode: if bomb.presses(): control.hit() hits = mc.events.pollBlockHits()
from rstem.accel import Accel from rstem.button import Button from rstem.led_matrix import FrameBuffer import time fire_button = Button(25) fb = FrameBuffer() accel = Accel() spaceship_position = fb.width / 2 alien_columns = [0, 1, 2, 3] alien_row = fb.height - 1 alien_start_time = time.time() ALIENS_STEP_TIME = 0.8 missile_x, missile_y = -1, -1 MISSILE_COLOR = 10 MISSILE_STEP_TIME = 0.1 TILT_FORCE = 0.1 SPACESHIP_STEP = 0.1 while True: # ######################################## # Get inputs # ######################################## presses = fire_button.presses()
from rstem.button import Button from rstem.mcpi import minecraft, control, block from rstem.mcpi.vec3 import Vec3 import time control.show(hide_at_exit=True) mc = minecraft.Minecraft.create() left = Button(23) right = Button(14) up = Button(18) down = Button(15) cursor = mc.player.getTilePos() cursor.y = mc.getHeight(cursor.x, cursor.z) while True: old_cursor = cursor.clone() cursor += Vec3(0, 0, right.presses()) cursor += Vec3(0, 0, -left.presses()) cursor += Vec3(up.presses(), 0, 0) cursor += Vec3(-down.presses(), 0, 0) if old_cursor != cursor: mc.setBlock(old_cursor, block.AIR) cursor.y = mc.getHeight(cursor.x, cursor.z) mc.setBlock(cursor, block.STONE) time.sleep(0.01)
from rstem.accel import Accel from rstem.button import Button from rstem.mcpi import minecraft, control import time control.show(hide_at_exit=True) keymap = { Button(23): control.left, Button(14): control.right, Button(18): control.forward, Button(15): control.backward, } accel = Accel() while True: for button, action in keymap.items(): if button.is_pressed(): action() else: action(release=True) x, y, z = accel.forces() control.look(up=20 * y, left=20 * x) time.sleep(0.01)
# Initialize accelerometer accel = Accel() # Initialize spaceship spaceship = Sprite(''' -F- FAF ''') TILT_FORCE = 0.1 SPACESHIP_STEP = 0.1 # Initialize aliens ALIENS_STEP_TIME = .8 # Initialize missiles fire_button = Button(7) MISSILE_COLOR = 10 MISSILE_STEP_TIME = 0.1 # Initialize sounds fire_sound = Sound("fire.wav") hit_sound = Sound("hit.wav") notes = [Note('B5'), Note('G5'), Note('E5'), Note('C5')] notes_cycle = cycle(notes) while True: fire_button.presses() while True: if scroll(start_text, cancel=fire_button.presses): break spaceship_middle = 1
def d: play = Thread(target = subprocess.call, args = ([["aplay", "D.wav"]])) play.start() def e: play = Thread(target = subprocess.call, args = ([["aplay", "E.wav"]])) play.start() def f play = Thread(target = subprocess.call, args = ([["aplay", "F.wav"]])) play.start() def g: play = Thread(target = subprocess.call, args = ([["aplay", "G.wav"]])) play.start() def a: play = Thread(target = subprocess.call, args = ([["aplay", "A.wav"]])) play.start() def b: play = Thread(target = subprocess.call, args = ([["aplay", "B.wav"]])) play.start() buttons = {c: Button(8), d: Button(0) e: Button(3), f: Button(13) g: Button(30), a: Button(23), b: Button(25)} while True: for key, val in buttons.items(): if val.presses(): key()
from rstem.button import Button from rstem.sound import Note import time buttons_and_notes = [ [Button(10), Note('G3')], [Button(3), Note('A3')], [Button(2), Note('B3')], [Button(15), Note('C')], [Button(17), Note('D')], [Button(23), Note('E')], [Button(11), Note('F')], [Button(7), Note('G')], [Button(19), Note('A')], [Button(20), Note('B')], [Button(26), Note('C5')], [Button(21), Note('D5')], ] while True: for button, note in buttons_and_notes: if button.is_pressed(): if not note.is_playing(): note.play(duration=None) else: note.stop() time.sleep(0.01)
flash = flasher(led, 0.1, 0.2) test = tester(xgood, ygood, zgood) results = [] for result in test: if result != None: results.append(result) next(flash) time.sleep(0.01) on(led) for i, passed in enumerate(results): if not passed: on("FAIL" + str(i)) return results start_button = Button(pins["START"]) # # Hack! Pin 8 is used by the LED Driver SPI bus, which we don't care about # here. So we forcibly disable it. # os.system("echo 8 > /sys/class/gpio/unexport") all_off() while True: for led in ["XTEST", "YTEST", "ZTEST"]: off(led) flash_until_button("READY") all_off() xresults = test_all_in_one_direction("XTEST", 1, 0, 0)
import mido from rstem.button import Button from rstem.gpio import Output output = mido.open_output('X18/XR18 MIDI 1') button = Button(4) clean_led = Output(2) distorted_led = Output(22) output.send(mido.Message('control_change', channel=1)) output.send(mido.Message('control_change', channel=1, control=1, value=127)) distorted = False clean_led.on() distorted_led.off() while True: if button.presses(): if distorted == True: output.send(mido.Message('control_change', channel=1)) output.send( mido.Message('control_change', channel=1, control=1, value=127)) distorted = False clean_led.on() distorted_led.off() elif distorted == False: output.send(mido.Message('control_change', channel=1, value=127)) output.send(mido.Message('control_change', channel=1, control=1)) distorted = True clean_led.off() distorted_led.on()
from rstem.button import Button from rstem.mcpi import minecraft, control, block from rstem.mcpi.vec3 import Vec3 from itertools import cycle import time control.show(hide_at_exit=True) mc = minecraft.Minecraft.create() left = Button(23) right = Button(14) up = Button(18) down = Button(15) place = Button(24) select = Button(7) block_types = [ block.STONE, block.BRICK_BLOCK, block.OBSIDIAN, block.DIAMOND_BLOCK, ] block_types = cycle(block_types) blk = next(block_types) cursor = mc.player.getTilePos() cursor.y = mc.getHeight(cursor.x, cursor.z) BLINK_TIME = 0.3 start = time.time() cursor_on = True
Sprite(arrow15deg).rotate(90), Sprite(arrow30deg).rotate(90), Sprite(arrow45deg).rotate(90), Sprite(arrow60deg).rotate(90), Sprite(arrow75deg).rotate(90), Sprite(arrow0deg).rotate(180), Sprite(arrow15deg).rotate(180), Sprite(arrow30deg).rotate(180), Sprite(arrow45deg).rotate(180), Sprite(arrow60deg).rotate(180), Sprite(arrow75deg).rotate(180), Sprite(arrow0deg).rotate(270), Sprite(arrow15deg).rotate(270), Sprite(arrow30deg).rotate(270), Sprite(arrow45deg).rotate(270), Sprite(arrow60deg).rotate(270), Sprite(arrow75deg).rotate(270), ] compass = Button(24) fb = FrameBuffer() while True: if compass.presses(): heading = control.get_heading(mc) fb.erase() arrow_index = round(heading / 15) % 24 fb.draw(arrows[arrow_index]) fb.show() time.sleep(0.01)