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)
示例#2
0
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)
示例#3
0
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)])
示例#4
0
    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]
示例#5
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()
示例#6
0
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])
示例#7
0
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()
示例#8
0
 # 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)
 
示例#9
0
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)