def timer_created(timer): global bsignal bsignal = libmetawear.mbl_mw_settings_get_battery_state_data_signal(device.board) libmetawear.mbl_mw_datasignal_subscribe(bsignal, batt_handler_fn) libmetawear.mbl_mw_event_record_commands(timer) libmetawear.mbl_mw_datasignal_read(bsignal) libmetawear.mbl_mw_event_end_record(timer, getStatusFn_handler_fn) libmetawear.mbl_mw_timer_start(timer)
def calibration_handler(ctx, pointer): value = parse_value(pointer) print("state: %s" % (value)) if (value.accelrometer == Const.SENSOR_FUSION_CALIBRATION_ACCURACY_HIGH and \ value.gyroscope == Const.SENSOR_FUSION_CALIBRATION_ACCURACY_HIGH and \ value.magnetometer == Const.SENSOR_FUSION_CALIBRATION_ACCURACY_HIGH): # read libmetawear.mbl_mw_sensor_fusion_read_calibration_data( device.board, None, fn_wrapper_01) else: sleep(1.0) libmetawear.mbl_mw_datasignal_read(signal)
def reaction_time(j): libmetawear.mbl_mw_gpio_set_digital_output(device.board, j) start = clock_gettime(CLOCK_MONOTONIC) while(s1 and s2): #wait for input libmetawear.mbl_mw_datasignal_read(signal1) sleep(0.004) libmetawear.mbl_mw_datasignal_read(signal2) sleep(0.004) #bad but polling too quick causes stability issues if j % 2: #determine if input was correct correct = not(s2) else: correct = not(s1) stop = clock_gettime(CLOCK_MONOTONIC) libmetawear.mbl_mw_gpio_clear_digital_output(device.board, j) while(not(s1 and s2)): #debouncing libmetawear.mbl_mw_datasignal_read(signal1) sleep(0.004) libmetawear.mbl_mw_datasignal_read(signal2) sleep(0.004) print("%r reaction to motor %d was %f seconds" % (correct, j, (stop - start))) data.append([j, correct, (stop-start)])
def _setup_read_event(self, timer, signal): e = Event() result = [None] def commands_recorded(ctx, event, status): result[0] = RuntimeError("Could not create read event") if status != Const.STATUS_OK else None e.set() fn_wrapper = FnVoid_VoidP_VoidP_Int(commands_recorded) libmetawear.mbl_mw_event_record_commands(timer) libmetawear.mbl_mw_datasignal_read(signal) libmetawear.mbl_mw_event_end_record(timer, None, fn_wrapper) e.wait() if (result[0] is RuntimeError): raise result[0]
def calibrate(self): e = Event() def calibration_data_handler(ctx, board, pointer): print("calibration data: %s" % (pointer.contents)) libmetawear.mbl_mw_sensor_fusion_write_calibration_data( board, pointer) libmetawear.mbl_mw_memory_free(pointer) e.set() def calibration_handler(ctx, pointer): value = parse_value(pointer) print("state: %s" % (value)) if (value.accelrometer >= Const.SENSOR_FUSION_CALIBRATION_ACCURACY_HIGH and value.gyroscope >= Const.SENSOR_FUSION_CALIBRATION_ACCURACY_HIGH and value.magnetometer >= Const.SENSOR_FUSION_CALIBRATION_ACCURACY_HIGH): libmetawear.mbl_mw_sensor_fusion_read_calibration_data( self.device.board, None, fn_wrapper_01) else: sleep(1.0) libmetawear.mbl_mw_datasignal_read(signal) fn_wrapper_01 = FnVoid_VoidP_VoidP_CalibrationDataP( calibration_data_handler) fn_wrapper_02 = FnVoid_VoidP_DataP(calibration_handler) signal = libmetawear.mbl_mw_sensor_fusion_calibration_state_data_signal( self.device.board) libmetawear.mbl_mw_sensor_fusion_set_mode(self.device.board, SensorFusionMode.NDOF) libmetawear.mbl_mw_sensor_fusion_write_config(self.device.board) libmetawear.mbl_mw_datasignal_subscribe(signal, None, fn_wrapper_02) libmetawear.mbl_mw_sensor_fusion_start(self.device.board) libmetawear.mbl_mw_datasignal_read(signal) e.wait() sleep(1.0) libmetawear.mbl_mw_sensor_fusion_stop(self.device.board) libmetawear.mbl_mw_datasignal_unsubscribe(signal) e.clear()
def reaction_trick(j): #quick implementation of tricking user libmetawear.mbl_mw_gpio_set_digital_output(device.board, 0) libmetawear.mbl_mw_gpio_set_digital_output(device.board, 1) libmetawear.mbl_mw_gpio_set_digital_output(device.board, 2) libmetawear.mbl_mw_gpio_set_digital_output(device.board, 3) correct = True a = 0 while(a < 300): #thats about three seconds libmetawear.mbl_mw_datasignal_read(signal1) sleep(0.004) libmetawear.mbl_mw_datasignal_read(signal2) sleep(0.004) #bad but polling too quick causes stability issues a += 1 if (not(s1) or not(s2)): correct = False clear_outputs() print("%r reaction to trick" % (correct)) data.append(["all", correct, -1])
import sys device = MetaWear('FB:81:71:31:92:7A') device.connect() # Callback function to process/parse the battery data def data_handler(self, ctx, data): print("%s -> %s" % (self.device.address, parse_value(data))) callback = FnVoid_VoidP_DataP(data_handler) print("Configuring device") libmetawear.mbl_mw_settings_set_connection_parameters(device.board, 7.5, 7.5, 0, 6000) battery_signal = libmetawear.mbl_mw_settings_get_battery_state_data_signal( device.board) libmetawear.mbl_mw_datasignal_subscribe(battery_signal, None, callback) sleep(1.0) libmetawear.mbl_mw_datasignal_read(battery_signal) sleep(5.0) libmetawear.mbl_mw_datasignal_unsubscribe(battery_signal) libmetawear.mbl_mw_debug_disconnect(device.board) device.on_disconnect = lambda status: print("we are disconnected!") device.disconnect()
# setup events e = Event() print("Configuring device") # get temp signal and setup logger signal = libmetawear.mbl_mw_multi_chnl_temp_get_temperature_data_signal(d.board, MetaWearRProChannel.ON_BOARD_THERMISTOR) logger = create_voidp(lambda fn: libmetawear.mbl_mw_datasignal_log(signal, None, fn), resource = "temp_logger", event = e) # create a timer timer = create_voidp(lambda fn: libmetawear.mbl_mw_timer_create_indefinite(d.board, 1000, 0, None, fn), resource = "timer", event = e) # record an event libmetawear.mbl_mw_event_record_commands(timer) # event is to read temp signal libmetawear.mbl_mw_datasignal_read(signal) create_voidp_int(lambda fn: libmetawear.mbl_mw_event_end_record(timer, None, fn), event = e) # start logging libmetawear.mbl_mw_logging_start(d.board, 0) # start timer libmetawear.mbl_mw_timer_start(timer) # log 10s print("Logging data for 10s") sleep(10.0) # remove timer libmetawear.mbl_mw_timer_remove(timer)
print("Setting up Device") libmetawear.mbl_mw_settings_set_connection_parameters(d.board, 7.5, 7.5, 0, 6000) Long = LedPattern(pulse_duration_ms=1000, high_time_ms=500, high_intensity=16, low_intensity=16, repeat_count=Const.LED_REPEAT_INDEFINITELY) sleep(1.0) # Collecting GPIO and Switch Data switch = libmetawear.mbl_mw_switch_get_state_data_signal(d.board) GPIO = libmetawear.mbl_mw_gpio_get_analog_input_data_signal(d.board, 1, 0) GPIO_logger = create_voidp(lambda fn: libmetawear.mbl_mw_datasignal_log(GPIO, None, fn), resource = "logger") libmetawear.mbl_mw_datasignal_subscribe(switch, None, switch_callback) timer = create_voidp(lambda fn: libmetawear.mbl_mw_timer_create_indefinite(d.board, 1000, 0, None, fn), resource = "timer", event = e) #sampling (ms) libmetawear.mbl_mw_event_record_commands(timer) libmetawear.mbl_mw_datasignal_read(GPIO) libmetawear.mbl_mw_datasignal_read(switch) create_voidp_int(lambda fn: libmetawear.mbl_mw_event_end_record(timer, None, fn), event = e) # Logging Sensor Data try: libmetawear.mbl_mw_led_write_pattern(d.board, byref(Long), LedColor.GREEN) libmetawear.mbl_mw_led_play(d.board) sleep(1.0) libmetawear.mbl_mw_led_stop_and_clear(d.board) print("Start Logging") libmetawear.mbl_mw_gpio_start_pin_monitoring(d.board, 1) libmetawear.mbl_mw_logging_start(d.board, 0) libmetawear.mbl_mw_timer_start(timer)