mid = 0 # data point class DataPoint: def __init__(self, data): self.data = data try: while True: humidity = sense.get_humidity() pressure = sense.get_pressure() temperature = sense.get_temperature() o = sense.get_orientation() pitch = o["pitch"] roll = o["roll"] yaw = o["yaw"] # get json string from joystick for event in sense.stick.get_events(): if event.action in ('pressed', 'held'): x += {'left': -1, 'right': 1}.get(event.direction, 0) y += {'up': +1, 'down': -1}.get(event.direction, 0) mid += {'middle': +1}.get(event.direction, 0) # get json string #jsonStr = json.dumps(dp.__dict__) jsonStr = json.dumps({ "temperature": float(temperature),
#!/usr/bin/python3 from sense_emu import SenseHat import sys import getopt import json import time sense = SenseHat() # class DataPoint: # def __init__(self, data): # self.data = data try: while True: angles = sense.get_orientation() # dp = DataPoint(angles) data = json.dumps(angles) #save to file try: datafile = open("angleValues.json", "w") datafile.write(data) except: print("Write Error") finally: datafile.close() print(data)
class TamperAlert: def __init__(self, change_percent: float = 0.1, tick: float = 0.01, movement_check_interval: float = 1): self.sense = SenseHat() # amount of change to be considered movement self.change_percent = change_percent self.tick = tick # sampling interval self.movement_check_interval = movement_check_interval self.orientation = self.sense.get_orientation() self._moved_event = threading.Event() TamperAlert._stop_event = threading.Event() self._moved_thread = threading.Thread( target=self._run, name=f'Moved-{threading.active_count()+1}', daemon=True) self._moved_thread.start() @property def when_moved(self) -> Callable[[], None]: raise NotImplementedError @when_moved.setter def when_moved(self, callback: Callable[[], None]): if callback: self._when_moved = callback self._moved_event.set() def _run(self): self._moved_event.wait() # wait until callback is set tick_counter = 0 change_counter = 0 while not TamperAlert._stop_event.is_set(): tick_counter += 1 orientation = self.sense.get_orientation() if self._changed(orientation['pitch'], self.orientation['pitch']) \ or self._changed(orientation['roll'], self.orientation['roll']) \ or self._changed(orientation['yaw'], self.orientation['yaw']): change_counter += 1 if change_counter * 2 >= tick_counter: # changed at least 50% of time change_counter = 0 try: self._when_moved() except Exception as e: logging.error(f'Callback failed: {e}') if tick_counter >= self.movement_check_interval // self.tick: self.orientation = orientation # new baseline tick_counter = 0 change_counter = 0 time.sleep(self.tick) def _changed(self, value: float, baseline: float) -> bool: return abs((value - baseline) / baseline) >= self.change_percent if baseline else False @staticmethod @atexit.register def _stop_threads(): if hasattr(TamperAlert, '_stop_event'): TamperAlert._stop_event.set()
from time import sleep sense = SenseHat() y = [255, 255, 255] e = [0, 0, 0] O = [0, 0, 255] A = 0 B = 0 path = [ y, y, y, e, e, e, e, e, e, e, y, e, e, e, e, e, e, e, y, e, e, e, e, e, e, e, y, y, y, y, y, e, e, e, e, e, e, e, y, e, e, e, e, e, e, e, y, e, e, e, e, e, y, y, y, e, e, e, e, e, y, e, e, e ] while 1: sense.set_pixels(path) sense.set_pixel(A, B, O) pitch = sense.get_orientation()['pitch'] roll = sense.get_orientation()['roll'] print('Pitch:', pitch) print('Roll:', roll) if 270 < pitch < 315 and A < 7: A += 1 if 45 < pitch < 90 and A > 0: A -= 1 if 45 < roll < 90 and B < 7: B += 1 if 270 < roll < 315 and B > 0: B -= 1 current = sense.get_pixel(A, B) if current == e: A = 0 B = 0