예제 #1
0
    def __init__(self, *args):
        COMCUPluginBase.__init__(self, BrickletRGBLEDMatrix, *args)

        self.setupUi(self)

        self.rgb_led_matrix = self.device

        self.color_button = QColorButton()
        self.below_scribble_layout.insertWidget(2, self.color_button)

        self.scribble_widget = ScribbleWidget(8, 8, 35,
                                              self.color_button.color(),
                                              QColor(Qt.black))

        def set_state_scribble():
            self.state = self.STATE_COLOR_SCRIBBLE

        self.scribble_widget.scribbling_started.connect(set_state_scribble)
        self.scribble_layout.insertWidget(1, self.scribble_widget)

        self.qtcb_frame_started.connect(self.cb_frame_started)

        self.color_button.colorChanged.connect(self.color_changed)
        self.button_clear_drawing.clicked.connect(
            self.scribble_widget.clear_image)
        self.button_drawing.clicked.connect(self.drawing_clicked)
        self.button_color.clicked.connect(self.color_clicked)
        self.button_gradient.clicked.connect(self.gradient_clicked)
        self.button_dot.clicked.connect(self.dot_clicked)
        self.box_frame_duration.valueChanged.connect(
            self.frame_duration_changed)

        self.state = self.STATE_IDLE

        self.gradient_counter = 0
        self.dot_counter = 0
        self.dot_direction = 1

        self.voltage = 0

        self.cbe_supply_voltage = CallbackEmulator(
            self, self.rgb_led_matrix.get_supply_voltage, None,
            self.cb_supply_voltage, self.increase_error_count)
예제 #2
0
    def __init__(self, *args):
        COMCUPluginBase.__init__(self, BrickletEnergyMonitor, *args)

        self.setupUi(self)

        self.energy_monitor = self.device
        self.cbe_get_energy_data = CallbackEmulator(self,
                                                    self.energy_monitor.get_energy_data,
                                                    None,
                                                    self.cb_energy_data,
                                                    self.increase_error_count)
        self.cbe_get_transformer_status = CallbackEmulator(self,
                                                           self.energy_monitor.get_transformer_status,
                                                           None,
                                                           self.cb_transformer_status,
                                                           self.increase_error_count)

        plots_waveform_v = [('Waveform V', Qt.red, None, None)]
        self.plot_widget_waveform_v = PlotWidget('Voltage [V]', plots_waveform_v, clear_button=None, x_diff=768*ENERGY_MONITOR_MS_PER_TICK, x_scale_title_text='Time [ms]', key=None, x_scale_visible=False)

        plots_waveform_a = [('Waveform A', Qt.red, None, None)]
        self.plot_widget_waveform_a = PlotWidget('Current [A]', plots_waveform_a, clear_button=None, x_diff=768*ENERGY_MONITOR_MS_PER_TICK, x_scale_title_text='Time [ms]', key=None)

        self.plot_widget_waveform_v.add_y_scale_sibling(self.plot_widget_waveform_a)
        self.plot_widget_waveform_a.add_y_scale_sibling(self.plot_widget_waveform_v)

        # try to make the actual curve area equal in height by fiddling with the
        # minimum-height and the stretch factors
        self.plot_widget_waveform_v.setMinimumHeight(194)
        self.plot_widget_waveform_a.setMinimumHeight(250)
        self.layout_graph.insertWidget(0, self.plot_widget_waveform_v, 86)
        self.layout_graph.addWidget(self.plot_widget_waveform_a, 100)

        self.x_data = [x * ENERGY_MONITOR_MS_PER_TICK for x in list(range(768))]

        self.button_energy.clicked.connect(self.button_energy_clicked)
        self.button_transformer_settings.clicked.connect(self.button_transformer_settings_clicked)

        self.voltage_connected = True
        self.current_connected = True

        self.running = False
예제 #3
0
    def __init__(self, *args):
        COMCUPluginBase.__init__(self, BrickHATZero, *args)

        self.setupUi(self)

        self.hat_zero = self.device

        self.cbe_voltage = CallbackEmulator(self.hat_zero.get_usb_voltage,
                                            None, self.cb_usb_voltage,
                                            self.increase_error_count)

        self.ports = [self.port_a, self.port_b, self.port_c, self.port_d]

        for port in self.ports:
            port.setProperty('_bricklet_uid', None)
            port.setEnabled(False)
            port.clicked.connect(self.port_clicked)

        self.update_timer = QTimer(self)
        self.update_timer.timeout.connect(self.update_bricklets)
예제 #4
0
    def __init__(self, *args):
        COMCUPluginBase.__init__(self, BrickletTemperatureIRV2, *args)

        self.tir = self.device

        self.cbe_ambient_temperature = CallbackEmulator(
            self.tir.get_ambient_temperature, self.cb_ambient_temperature,
            self.increase_error_count)
        self.cbe_object_temperature = CallbackEmulator(
            self.tir.get_object_temperature, self.cb_object_temperature,
            self.increase_error_count)

        self.current_ambient = None  # float, °C
        self.current_object = None  # float, °C

        plots = [('Ambient', Qt.blue, lambda: self.current_ambient,
                  u'{} °C'.format),
                 ('Object', Qt.red, lambda: self.current_object,
                  u'{} °C'.format)]
        self.plot_widget = PlotWidget(u'Temperature [°C]', plots)

        self.spin_emissivity = QSpinBox()
        self.spin_emissivity.setMinimum(6553)
        self.spin_emissivity.setMaximum(65535)
        self.spin_emissivity.setValue(65535)
        self.spin_emissivity.editingFinished.connect(
            self.spin_emissivity_finished)

        hlayout = QHBoxLayout()
        hlayout.addWidget(QLabel('Emissivity:'))
        hlayout.addWidget(self.spin_emissivity)
        hlayout.addStretch()

        line = QFrame()
        line.setFrameShape(QFrame.HLine)
        line.setFrameShadow(QFrame.Sunken)

        layout = QVBoxLayout(self)
        layout.addWidget(self.plot_widget)
        layout.addWidget(line)
        layout.addLayout(hlayout)
예제 #5
0
파일: one_wire.py 프로젝트: jose1711/brickv
    def __init__(self, *args):
        COMCUPluginBase.__init__(self, BrickletOneWire, *args)

        self.setupUi(self)

        self.one_wire = self.device

        self.button_reset.clicked.connect(self.button_reset_clicked)
        self.button_search.clicked.connect(self.button_search_clicked)
        self.button_read_byte.clicked.connect(self.button_read_byte_clicked)
        self.button_write_byte.clicked.connect(self.button_write_byte_clicked)
        self.button_write_command.clicked.connect(
            self.button_write_command_clicked)

        self.start_time = time.time()

        self.ids = [0]

        self.write_data = 0
        self.write_command = 0
        self.write_command_id = 0
예제 #6
0
    def __init__(self, *args):
        COMCUPluginBase.__init__(self, BrickletSolidStateRelayV2, *args)

        self.setupUi(self)

        self.ssr = self.device

        self.state_combobox.setItemData(0, True)
        self.state_combobox.setItemData(1, False)

        self.monoflop = Monoflop(self.ssr, None, self.state_combobox,
                                 self.cb_state_change_by_monoflop,
                                 self.time_spinbox, None, self)

        self.ssr_button.clicked.connect(self.ssr_clicked)
        self.go_button.clicked.connect(self.go_clicked)

        self.a_pixmap = load_masked_pixmap(
            'plugin_system/plugins/solid_state_relay/relay_a.bmp')
        self.b_pixmap = load_masked_pixmap(
            'plugin_system/plugins/solid_state_relay/relay_b.bmp')
예제 #7
0
    def __init__(self, *args):
        COMCUPluginBase.__init__(self, BrickletAirQuality, *args)

        self.air_quality = self.device

        self.cbe_air_quality = CallbackEmulator(self.air_quality.get_all_values,
                                                self.cb_get_all_values,
                                                self.increase_error_count)
        
        self.current_iaq_index = None # float
        self.current_temperature = None # float, °C
        self.current_humidity = None # float, %RH
        self.current_air_pressure = None # float, mbar
        self.current_iaq_index_accuracy = None
        
        self.iaq_accuracy_label = QLabel("(Accuracy: TBD)")
        
        plots_iaq_index = [(u'IAQ Index', Qt.red, lambda: self.current_iaq_index, u'{}'.format)]
        self.plot_widget_iaq_index = PlotWidget(u'IAQ Index', plots_iaq_index, extra_key_widgets=(self.iaq_accuracy_label, ))

        plots_temperature = [(u'Temperature', Qt.red, lambda: self.current_temperature, u'{} °C'.format)]
        self.plot_widget_temperature = PlotWidget(u'Temperature [°C]', plots_temperature)
        
        plots_humidity = [(u'Relative Humidity', Qt.red, lambda: self.current_humidity, u'{} %RH'.format)]
        self.plot_widget_humidity = PlotWidget(u'Relative Humidity [%RH]', plots_humidity)
                
        plots_air_pressure = [(u'Air Pressure', Qt.red, lambda: self.current_air_pressure, u'{} mbar (QFE)'.format)]
        self.plot_widget_air_pressure = PlotWidget(u'Air Pressure [mbar]', plots_air_pressure)
        
        layout_plot1 = QHBoxLayout()
        layout_plot1.addWidget(self.plot_widget_iaq_index)
        layout_plot1.addWidget(self.plot_widget_temperature)
        
        layout_plot2 = QHBoxLayout()
        layout_plot2.addWidget(self.plot_widget_humidity)
        layout_plot2.addWidget(self.plot_widget_air_pressure)
        
        layout_main = QVBoxLayout(self)
        layout_main.addLayout(layout_plot1)
        layout_main.addLayout(layout_plot2)
예제 #8
0
    def __init__(self, *args):
        COMCUPluginBase.__init__(self, BrickletEPaper296x128, *args)

        self.setupUi(self)

        self.epaper = self.device

        self.scribble_widget = ScribbleWidget(WIDTH, HEIGHT, 2, QColor(Qt.white), QColor(Qt.black), enable_grid=False)
        self.image_button_layout.insertWidget(0, self.scribble_widget)

        self.draw_button.clicked.connect(self.draw_clicked)
        self.send_button.clicked.connect(self.send_clicked)

        self.fill_black_button.clicked.connect(lambda: self.fill_clicked(0))
        self.fill_white_button.clicked.connect(lambda: self.fill_clicked(1))
        self.fill_red_button.clicked.connect(lambda: self.fill_clicked(2))

        self.color_radio_black.toggled.connect(self.radio_toggled)
        self.color_radio_white.toggled.connect(self.radio_toggled)
        self.color_radio_red.toggled.connect(self.radio_toggled)

        self.display_type = self.epaper.DISPLAY_TYPE_BLACK_WHITE_RED
예제 #9
0
    def __init__(self, *args):
        COMCUPluginBase.__init__(self, BrickletIndustrialAnalogOutV2, *args)

        self.setupUi(self)

        self.ao = self.device

        self.voltage_syncer = SliderSpinSyncer(self.slider_voltage,
                                               self.spin_voltage,
                                               self.voltage_changed)

        self.current_syncer = SliderSpinSyncer(self.slider_current,
                                               self.spin_current,
                                               self.current_changed)

        self.radio_voltage.clicked.connect(self.radio_clicked)
        self.radio_current.clicked.connect(self.radio_clicked)

        self.box_voltage_range.currentIndexChanged.connect(self.config_changed)
        self.box_current_range.currentIndexChanged.connect(self.config_changed)

        self.checkbox_enable.clicked.connect(self.enable_changed)

        self.cbox_osl_lc.currentIndexChanged.connect(self.cbox_osl_lc_changed)
        self.cbox_osl_lsc.currentIndexChanged.connect(
            self.cbox_osl_lsc_changed)
        self.sbox_osl_min.valueChanged.connect(self.sbox_osl_min_changed)
        self.sbox_osl_max.valueChanged.connect(self.sbox_osl_max_changed)

        self.ui_grp_show_ch_status = [
            self.cbox_osl_lsc, self.sbox_osl_min, self.sbox_osl_max
        ]

        self.box_voltage_range.setCurrentIndex(1)
        self.box_current_range.setCurrentIndex(0)

        self.new_voltage(0)
        self.new_current(0)
        self.mode_voltage()
예제 #10
0
파일: evse.py 프로젝트: fk0815/brickv
    def __init__(self, *args):
        COMCUPluginBase.__init__(self, BrickletEVSE, *args)

        self.setupUi(self)

        self.evse = self.device

        self.cbe_state = CallbackEmulator(self,
                                          self.evse.get_state,
                                          None,
                                          self.state_cb,
                                          self.increase_error_count)
        self.cbe_low_level_state = CallbackEmulator(self,
                                                    self.evse.get_low_level_state,
                                                    None,
                                                    self.low_level_state_cb,
                                                    self.increase_error_count)
        self.cbe_max_charging_current = CallbackEmulator(self,
                                                         self.evse.get_max_charging_current,
                                                         None,
                                                         self.max_charging_current_cb,
                                                         self.increase_error_count)
예제 #11
0
    def __init__(self, *args):
        COMCUPluginBase.__init__(self, BrickletOLED128x64V2, *args)

        self.setupUi(self)

        self.oled = self.device

        self.scribble_area = ScribbleArea(128, 64)
        self.image_button_layout.insertWidget(0, self.scribble_area)

        self.contrast_syncer = SliderSpinSyncer(self.contrast_slider, self.contrast_spin, lambda value: self.new_configuration())
        self.char_syncer = SliderSpinSyncer(self.char_slider, self.char_spin, self.char_slider_changed)

        self.draw_button.clicked.connect(self.draw_clicked)
        self.clear_button.clicked.connect(self.clear_clicked)
        self.send_button.clicked.connect(self.send_clicked)
        self.clear_display_button.clicked.connect(self.clear_display_clicked)
        self.invert_checkbox.stateChanged.connect(self.new_configuration)

        self.current_char_value = -1

        self.write_line_response_expected = False
예제 #12
0
    def __init__(self, *args):
        COMCUPluginBase.__init__(self, BrickletIndustrialDualACRelay, *args)

        self.setupUi(self)

        self.idr = self.device

        self.value0_combobox.setItemData(0, True)
        self.value0_combobox.setItemData(1, False)

        self.value1_combobox.setItemData(0, True)
        self.value1_combobox.setItemData(1, False)

        self.monoflop = Monoflop(self.idr, [0, 1],
                                 [self.value0_combobox, self.value1_combobox],
                                 self.cb_value_change_by_monoflop,
                                 [self.time0_spinbox, self.time1_spinbox],
                                 None, self)

        self.ch0_button.clicked.connect(self.ch0_clicked)
        self.ch1_button.clicked.connect(self.ch1_clicked)

        self.go0_button.clicked.connect(self.go0_clicked)
        self.go1_button.clicked.connect(self.go1_clicked)

        self.combobox_led0.currentIndexChanged.connect(
            self.combobox_led0_changed)
        self.combobox_led1.currentIndexChanged.connect(
            self.combobox_led1_changed)

        self.a0_pixmap = load_masked_pixmap(
            'plugin_system/plugins/industrial_dual_ac_relay/relay_close.bmp')
        self.a1_pixmap = load_masked_pixmap(
            'plugin_system/plugins/industrial_dual_ac_relay/relay_close.bmp')
        self.b0_pixmap = load_masked_pixmap(
            'plugin_system/plugins/industrial_dual_ac_relay/relay_open.bmp')
        self.b1_pixmap = load_masked_pixmap(
            'plugin_system/plugins/industrial_dual_ac_relay/relay_open.bmp')
예제 #13
0
    def __init__(self, *args):
        COMCUPluginBase.__init__(self, BrickletDualButtonV2, *args)

        self.setupUi(self)

        self.button = self.device

        self.cbe_button_state = CallbackEmulator(
            self,
            self.button.get_button_state,
            None,
            self.cb_button_state,
            self.increase_error_count,
            expand_result_tuple_for_callback=True)

        self.cbe_led_state = CallbackEmulator(
            self,
            self.button.get_led_state,
            None,
            self.cb_led_state,
            self.increase_error_count,
            expand_result_tuple_for_callback=True)

        self.led_r = BrickletDualButtonV2.LED_STATE_OFF
        self.led_l = BrickletDualButtonV2.LED_STATE_OFF
        self.button_r = BrickletDualButtonV2.BUTTON_STATE_RELEASED
        self.button_l = BrickletDualButtonV2.BUTTON_STATE_RELEASED

        self.button_led_on_button_r.clicked.connect(self.on_button_r_clicked)
        self.button_led_on_button_l.clicked.connect(self.on_button_l_clicked)
        self.button_led_off_button_r.clicked.connect(self.off_button_r_clicked)
        self.button_led_off_button_l.clicked.connect(self.off_button_l_clicked)
        self.button_toggle_button_r.clicked.connect(
            self.toggle_button_r_clicked)
        self.button_toggle_button_l.clicked.connect(
            self.toggle_button_l_clicked)

        self.count = 0
예제 #14
0
파일: hat.py 프로젝트: fk0815/brickv
    def __init__(self, *args):
        COMCUPluginBase.__init__(self, BrickHAT, *args)

        self.setupUi(self)

        self.hat = self.device

        self.cbe_voltages = CallbackEmulator(self, self.hat.get_voltages, None,
                                             self.cb_voltages,
                                             self.increase_error_count)

        self.button_sleep.clicked.connect(self.button_sleep_clicked)
        self.bricklet_power_checkbox.stateChanged.connect(
            self.bricklet_power_changed)
        self.ports = [
            self.port_a, self.port_b, self.port_c, self.port_d, self.port_e,
            self.port_f, self.port_g, self.port_h
        ]

        for port in self.ports:
            port.setProperty('_bricklet_uid', None)
            port.setEnabled(False)
            port.clicked.connect(self.port_clicked)
예제 #15
0
파일: dc_v2.py 프로젝트: fk0815/brickv
    def __init__(self, *args):
        COMCUPluginBase.__init__(self, BrickletDCV2, *args)

        self.setupUi(self)

        self.dc = self.device

        self.qem = QErrorMessage(self)
        self.qtcb_emergency_shutdown.connect(self.cb_emergency_shutdown)
        self.dc.register_callback(self.dc.CALLBACK_EMERGENCY_SHUTDOWN,
                                  self.qtcb_emergency_shutdown.emit)

        self.full_brake_button.clicked.connect(self.full_brake_clicked)
        self.enable_checkbox.stateChanged.connect(self.enable_state_changed)
        self.radio_mode_brake.toggled.connect(self.brake_value_changed)
        self.radio_mode_coast.toggled.connect(self.coast_value_changed)

        self.velocity_syncer = SliderSpinSyncer(self.velocity_slider,
                                                self.velocity_spin,
                                                self.velocity_changed)
        self.acceleration_syncer = SliderSpinSyncer(self.acceleration_slider,
                                                    self.acceleration_spin,
                                                    self.motion_changed)
        self.deceleration_syncer = SliderSpinSyncer(self.deceleration_slider,
                                                    self.deceleration_spin,
                                                    self.motion_changed)
        self.frequency_syncer = SliderSpinSyncer(self.frequency_slider,
                                                 self.frequency_spin,
                                                 self.frequency_changed)

        self.cbe_power_statistics = CallbackEmulator(
            self, self.dc.get_power_statistics, None,
            self.get_power_statistics_async, self.increase_error_count)
        self.cbe_current_velocity = CallbackEmulator(
            self, self.dc.get_current_velocity, None,
            self.get_current_velocity_async, self.increase_error_count)
예제 #16
0
    def __init__(self, *args):
        COMCUPluginBase.__init__(self, BrickletIndustrialCounter, *args)

        self.setupUi(self)

        self.counter = self.device

        self.cbe_signal = CallbackEmulator(self.counter.get_all_signal_data,
                                           None, self.cb_all_signal_data,
                                           self.increase_error_count)

        self.cbe_counter = CallbackEmulator(self.counter.get_all_counter, None,
                                            self.cb_all_counter,
                                            self.increase_error_count)

        def get_combo_lambda(channel):
            return lambda: self.combo_index_changed(channel)

        def get_checkstate_lambda(channel):
            return lambda x: self.checkstate_changed(channel, x)

        g = self.main_grid
        pos = 2
        self.checkboxess_active = [
            g.itemAtPosition(pos, 1).widget(),
            g.itemAtPosition(pos, 2).widget(),
            g.itemAtPosition(pos, 3).widget(),
            g.itemAtPosition(pos, 4).widget()
        ]

        for channel, checkbox in enumerate(self.checkboxess_active):
            checkbox.stateChanged.connect(get_checkstate_lambda(channel))

        pos += 1
        self.combos_count_edge = [
            g.itemAtPosition(pos, 1).widget(),
            g.itemAtPosition(pos, 2).widget(),
            g.itemAtPosition(pos, 3).widget(),
            g.itemAtPosition(pos, 4).widget()
        ]

        for channel, combo in enumerate(self.combos_count_edge):
            combo.addItem('Rising')
            combo.addItem('Falling')
            combo.addItem('Both')
            combo.currentIndexChanged.connect(get_combo_lambda(channel))

        pos += 1
        self.combos_count_direction = [
            g.itemAtPosition(pos, 1).widget(),
            g.itemAtPosition(pos, 2).widget(),
            g.itemAtPosition(pos, 3).widget(),
            g.itemAtPosition(pos, 4).widget()
        ]

        for channel, combo in enumerate(self.combos_count_direction):
            combo.addItem('Up')
            combo.addItem('Down')
            combo.currentIndexChanged.connect(get_combo_lambda(channel))

        self.combos_count_direction[0].addItem('Ext Up (Ch 2)')
        self.combos_count_direction[0].addItem('Ext Down (Ch 2)')
        self.combos_count_direction[3].addItem('Ext Up (Ch 1)')
        self.combos_count_direction[3].addItem('Ext Down (Ch 1)')

        pos += 1
        self.combos_duty_cycle_prescaler = [
            g.itemAtPosition(pos, 1).widget(),
            g.itemAtPosition(pos, 2).widget(),
            g.itemAtPosition(pos, 3).widget(),
            g.itemAtPosition(pos, 4).widget()
        ]

        for channel, combo in enumerate(self.combos_duty_cycle_prescaler):
            combo.addItem('1')
            combo.addItem('2')
            combo.addItem('4')
            combo.addItem('8')
            combo.addItem('16')
            combo.addItem('32')
            combo.addItem('64')
            combo.addItem('128')
            combo.addItem('256')
            combo.addItem('512')
            combo.addItem('1024')
            combo.addItem('2048')
            combo.addItem('4096')
            combo.addItem('8192')
            combo.addItem('16384')
            combo.addItem('32768')
            combo.currentIndexChanged.connect(get_combo_lambda(channel))

        pos += 1
        self.combos_frequency_integration = [
            g.itemAtPosition(pos, 1).widget(),
            g.itemAtPosition(pos, 2).widget(),
            g.itemAtPosition(pos, 3).widget(),
            g.itemAtPosition(pos, 4).widget()
        ]

        for channel, combo in enumerate(self.combos_frequency_integration):
            combo.addItem('128ms')
            combo.addItem('256ms')
            combo.addItem('512ms')
            combo.addItem('1024ms')
            combo.addItem('2048ms')
            combo.addItem('4096ms')
            combo.addItem('8192ms')
            combo.addItem('16384ms')
            combo.addItem('32768ms')
            combo.currentIndexChanged.connect(get_combo_lambda(channel))

        pos += 3
        self.labels_counter = [
            g.itemAtPosition(pos, 1).widget(),
            g.itemAtPosition(pos, 2).widget(),
            g.itemAtPosition(pos, 3).widget(),
            g.itemAtPosition(pos, 4).widget()
        ]
        pos += 1
        self.labels_duty_cycle = [
            g.itemAtPosition(pos, 1).widget(),
            g.itemAtPosition(pos, 2).widget(),
            g.itemAtPosition(pos, 3).widget(),
            g.itemAtPosition(pos, 4).widget()
        ]
        pos += 1
        self.labels_period = [
            g.itemAtPosition(pos, 1).widget(),
            g.itemAtPosition(pos, 2).widget(),
            g.itemAtPosition(pos, 3).widget(),
            g.itemAtPosition(pos, 4).widget()
        ]
        pos += 1
        self.labels_frequency = [
            g.itemAtPosition(pos, 1).widget(),
            g.itemAtPosition(pos, 2).widget(),
            g.itemAtPosition(pos, 3).widget(),
            g.itemAtPosition(pos, 4).widget()
        ]
        pos += 1
        self.labels_value = [
            g.itemAtPosition(pos, 1).widget(),
            g.itemAtPosition(pos, 2).widget(),
            g.itemAtPosition(pos, 3).widget(),
            g.itemAtPosition(pos, 4).widget()
        ]

        self.cbox_cs0_cfg.currentIndexChanged.connect(
            self.cbox_cs0_cfg_changed)
        self.cbox_cs1_cfg.currentIndexChanged.connect(
            self.cbox_cs1_cfg_changed)
        self.cbox_cs2_cfg.currentIndexChanged.connect(
            self.cbox_cs2_cfg_changed)
        self.cbox_cs3_cfg.currentIndexChanged.connect(
            self.cbox_cs3_cfg_changed)
예제 #17
0
    def __init__(self, *args):
        COMCUPluginBase.__init__(self, BrickletGPSV2, *args)

        self.setupUi(self)

        self.gps = self.device

        self.cbe_universal = CallbackEmulator(self, self.get_universal, None,
                                              self.cb_universal,
                                              self.increase_error_count)

        self.cbe_universal_gps = CallbackEmulator(self, self.get_universal_gps,
                                                  None, self.cb_universal_gps,
                                                  self.increase_error_count)

        self.cbe_universal_glo = CallbackEmulator(self, self.get_universal_glo,
                                                  None, self.cb_universal_glo,
                                                  self.increase_error_count)

        self.qtcb_pps.connect(self.cb_pps)
        self.gps.register_callback(self.gps.CALLBACK_PULSE_PER_SECOND,
                                   self.qtcb_pps.emit)

        self.format_combobox.currentIndexChanged.connect(self.format_changed)
        self.show_pos.clicked.connect(self.show_pos_clicked)
        self.hot_start.clicked.connect(lambda: self.restart_clicked(0))
        self.warm_start.clicked.connect(lambda: self.restart_clicked(1))
        self.cold_start.clicked.connect(lambda: self.restart_clicked(2))
        self.factory_reset.clicked.connect(lambda: self.restart_clicked(3))

        self.had_fix = False

        self.last_lat = 0
        self.last_ns = 'U'
        self.last_long = 0
        self.last_ew = 'U'

        self.gps_counter = 0
        self.glo_counter = 0

        self.gps_model = QStandardItemModel(32, 3, self)
        self.gps_table.setModel(self.gps_model)
        self.gps_model.setHorizontalHeaderItem(0,
                                               QStandardItem('Elevation (°)'))
        self.gps_model.setHorizontalHeaderItem(1, QStandardItem('Azimuth (°)'))
        self.gps_model.setHorizontalHeaderItem(2, QStandardItem('SNR (dB)'))
        for i in range(32):
            self.gps_model.setVerticalHeaderItem(
                i, QStandardItem('Sat ' + str(i + 1)))
        self.gps_table.horizontalHeader().setSectionResizeMode(
            QHeaderView.Stretch)

        self.glo_model = QStandardItemModel(32, 3, self)
        self.glo_table.setModel(self.glo_model)
        self.glo_model.setHorizontalHeaderItem(0,
                                               QStandardItem('Elevation (°)'))
        self.glo_model.setHorizontalHeaderItem(1, QStandardItem('Azimuth (°)'))
        self.glo_model.setHorizontalHeaderItem(2, QStandardItem('SNR (dB)'))
        for i in range(32):
            self.glo_model.setVerticalHeaderItem(
                i, QStandardItem('Sat ' + str(i + 1 + 64)))
        self.glo_table.horizontalHeader().setSectionResizeMode(
            QHeaderView.Stretch)

        self.fix_led_off_action = QAction('Off', self)
        self.fix_led_off_action.triggered.connect(
            lambda: self.gps.set_fix_led_config(BrickletGPSV2.
                                                FIX_LED_CONFIG_OFF))
        self.fix_led_on_action = QAction('On', self)
        self.fix_led_on_action.triggered.connect(
            lambda: self.gps.set_fix_led_config(BrickletGPSV2.FIX_LED_CONFIG_ON
                                                ))
        self.fix_led_show_heartbeat_action = QAction('Show Heartbeat', self)
        self.fix_led_show_heartbeat_action.triggered.connect(
            lambda: self.gps.set_fix_led_config(BrickletGPSV2.
                                                FIX_LED_CONFIG_SHOW_HEARTBEAT))
        self.fix_led_show_fix_action = QAction('Show Fix', self)
        self.fix_led_show_fix_action.triggered.connect(
            lambda: self.gps.set_fix_led_config(BrickletGPSV2.
                                                FIX_LED_CONFIG_SHOW_FIX))
        self.fix_led_show_pps_action = QAction('Show PPS', self)
        self.fix_led_show_pps_action.triggered.connect(
            lambda: self.gps.set_fix_led_config(BrickletGPSV2.
                                                FIX_LED_CONFIG_SHOW_PPS))

        self.extra_configs += [(1, 'Fix LED:', [
            self.fix_led_off_action, self.fix_led_on_action,
            self.fix_led_show_heartbeat_action, self.fix_led_show_fix_action,
            self.fix_led_show_pps_action
        ])]
예제 #18
0
파일: io4_v2.py 프로젝트: jose1711/brickv
    def __init__(self, *args):
        COMCUPluginBase.__init__(self, BrickletIO4V2, *args)

        self.setupUi(self)

        self.io = self.device

        self.on_focus = False

        self.ch_current_config = {0: None, 1: None, 2: None, 3: None}

        self.async_data_store = {
            'all_ch_status_update': {
                'ch_values': None,
                'ch_config': None,
                'monoflop': {
                    0: {
                        'running': False,
                        'start_time_remaining': 500
                    },
                    1: {
                        'running': False,
                        'start_time_remaining': 500
                    },
                    2: {
                        'running': False,
                        'start_time_remaining': 500
                    },
                    3: {
                        'running': False,
                        'start_time_remaining': 500
                    }
                }
            },
            'update_current_channel_info': {
                'value': None,
                'config': None,
            },
            'iv_cb': {
                'direction': {
                    0: None,
                    1: None,
                    2: None,
                    3: None
                },
                'values': None
            }
        }

        self.gui_grp_cfg_ch_in = [self.lbl_cfg_ch_in_v, self.cbox_cfg_ch_in_v]

        self.gui_grp_cfg_ch_out = [
            self.lbl_cfg_ch_out_v, self.cbox_cfg_ch_out_v, self.lbl_monoflop,
            self.cbox_monoflop_v, self.sbox_monoflop_t, self.btn_monoflop_go
        ]

        self.gui_grp_monoflop = [
            self.cbox_monoflop_v, self.sbox_monoflop_t, self.btn_monoflop_go
        ]

        self.lbl_st_ch_v = [
            self.lbl_st_ch0_v, self.lbl_st_ch1_v, self.lbl_st_ch2_v,
            self.lbl_st_ch3_v
        ]

        self.lbl_st_ch_d = [
            self.lbl_st_ch0_d, self.lbl_st_ch1_d, self.lbl_st_ch2_d,
            self.lbl_st_ch3_d
        ]

        self.lbl_st_ch_cfg = [
            self.lbl_st_ch0_cfg, self.lbl_st_ch1_cfg, self.lbl_st_ch2_cfg,
            self.lbl_st_ch3_cfg
        ]

        self.lbl_st_ch_monoflop_t = [
            self.lbl_st_ch0_monoflop_t, self.lbl_st_ch1_monoflop_t,
            self.lbl_st_ch2_monoflop_t, self.lbl_st_ch3_monoflop_t
        ]

        self.ch_status_update_timer = QTimer()
        self.ch_status_update_timer.timeout.connect(
            self.ch_status_update_timeout)

        self.iv_cb_timer = QTimer()
        self.iv_cb_timer.timeout.connect(self.iv_cb_timeout)

        self.btn_monoflop_go.clicked.connect(self.btn_monoflop_go_clicked)
        self.btn_cfg_ch_apply.clicked.connect(self.btn_cfg_ch_apply_clicked)
        self.cbox_cfg_ch.currentIndexChanged.connect(self.cbox_cfg_ch_changed)
        self.cbox_cfg_ch_dir.currentIndexChanged.connect(
            self.cbox_cfg_ch_dir_changed)
예제 #19
0
    def __init__(self, *args):
        COMCUPluginBase.__init__(self, BrickletAccelerometerV2, *args)

        self.accelerometer = self.device

        self.cbe_acceleration = CallbackEmulator(
            self.accelerometer.get_acceleration, self.cb_acceleration,
            self.increase_error_count)

        self.current_acceleration = [None, None, None]  # float, g

        self.pitch_label = PitchLabel()
        self.roll_label = RollLabel()

        plots = [('X', Qt.red, lambda: self.current_acceleration[0],
                  '{:.3f} g'.format),
                 ('Y', Qt.darkGreen, lambda: self.current_acceleration[1],
                  '{:.3f} g'.format),
                 ('Z', Qt.blue, lambda: self.current_acceleration[2],
                  '{:.3f} g'.format)]
        self.plot_widget = PlotWidget(
            'Acceleration [g]',
            plots,
            extra_key_widgets=[self.pitch_label, self.roll_label],
            curve_motion_granularity=20,
            update_interval=0.05)

        self.fs_label = QLabel('Full Scale:')
        self.fs_combo = QComboBox()
        self.fs_combo.addItem("2 g")
        self.fs_combo.addItem("4 g")
        self.fs_combo.addItem("8 g")
        self.fs_combo.currentIndexChanged.connect(self.new_config)

        self.dr_label = QLabel('Data Rate:')
        self.dr_combo = QComboBox()
        self.dr_combo.addItem("0.781 Hz")
        self.dr_combo.addItem("1.563 Hz")
        self.dr_combo.addItem("3.125 Hz")
        self.dr_combo.addItem("6.2512 Hz")
        self.dr_combo.addItem("12.5 Hz")
        self.dr_combo.addItem("25 Hz")
        self.dr_combo.addItem("50 Hz")
        self.dr_combo.addItem("100 Hz")
        self.dr_combo.addItem("200 Hz")
        self.dr_combo.addItem("400 Hz")
        self.dr_combo.addItem("800 Hz")
        self.dr_combo.addItem("1600 Hz")
        self.dr_combo.addItem("3200 Hz")
        self.dr_combo.addItem("6400 Hz")
        self.dr_combo.addItem("12800 Hz")
        self.dr_combo.addItem("25600 Hz")

        self.dr_combo.currentIndexChanged.connect(self.new_config)

        #        self.fb_label = QLabel('Filter Bandwidth:')
        #        self.fb_combo = QComboBox()
        #        self.fb_combo.addItem("800 Hz")
        #        self.fb_combo.addItem("400 Hz")
        #        self.fb_combo.addItem("200 Hz")
        #        self.fb_combo.addItem("50 Hz")
        #        self.fb_combo.currentIndexChanged.connect(self.new_config)

        #        self.enable_led = QCheckBox("Enable LED")
        #        self.enable_led.stateChanged.connect(self.enable_led_changed)

        hlayout = QHBoxLayout()
        hlayout.addStretch()
        hlayout.addWidget(self.fs_label)
        hlayout.addWidget(self.fs_combo)
        hlayout.addStretch()
        hlayout.addWidget(self.dr_label)
        hlayout.addWidget(self.dr_combo)
        hlayout.addStretch()
        #        hlayout.addWidget(self.fb_label)
        #        hlayout.addWidget(self.fb_combo)
        #        hlayout.addStretch()
        #        hlayout.addWidget(self.enable_led)

        line = QFrame()
        line.setFrameShape(QFrame.HLine)
        line.setFrameShadow(QFrame.Sunken)

        layout = QVBoxLayout(self)
        layout.addWidget(self.plot_widget)
        layout.addWidget(line)
        layout.addLayout(hlayout)
예제 #20
0
    def __init__(self, *args):
        COMCUPluginBase.__init__(self, BrickletThermalImaging, *args)

        self.setupUi(self)
        self.thermal_imaging = self.device

        self.previous_image_transfer_config = None

        self.agc_roi_from = QPoint(0, 0)
        self.agc_roi_to = QPoint(79, 59)
        self.spotmeter_roi_from = QPoint(0, 0)
        self.spotmeter_roi_to = QPoint(79, 59)

        self.thermal_image = ThermalImage(80, 60, self, self)
        self.thermal_image.agc_roi_changed.connect(self.update_agc_roi)
        self.thermal_image.spotmeter_roi_changed.connect(
            self.update_spotmeter_roi)

        self.thermal_image_layout.insertWidget(0, self.thermal_image)
        self.thermal_image_bar = ThermalImageBar(80, 20, self.thermal_image,
                                                 self, self)
        self.thermal_image_layout.insertWidget(2, self.thermal_image_bar)

        self.combo_scale_factor.currentIndexChanged.connect(
            lambda: self.thermal_image.scale_factor_changed(
                int(1 + 4 * float(self.combo_scale_factor.currentText()[:-1]))
            ))

        self.agc_roi_button.clicked.connect(self.cb_roi_button)
        self.spotmeter_roi_button.clicked.connect(self.cb_roi_button)

        self.image_combo.setItemData(
            0,
            BrickletThermalImaging.IMAGE_TRANSFER_CALLBACK_HIGH_CONTRAST_IMAGE)
        self.image_combo.setItemData(
            1,
            BrickletThermalImaging.IMAGE_TRANSFER_CALLBACK_TEMPERATURE_IMAGE)

        self.agc_clip_limit_high_spin.editingFinished.connect(
            self.update_agc_data)
        self.agc_clip_limit_low_spin.editingFinished.connect(
            self.update_agc_data)
        self.agc_dampening_factor_spin.editingFinished.connect(
            self.update_agc_data)
        self.agc_empty_counts_spin.editingFinished.connect(
            self.update_agc_data)
        self.color_palette_box.currentIndexChanged.connect(
            self.color_palette_changed)
        self.resolution_box.currentIndexChanged.connect(self.update_resolution)
        self.image_combo.currentIndexChanged.connect(self.update_image_combo)

        self.qtcb_high_contrast_image.connect(self.cb_high_contrast_image)
        self.qtcb_temperature_image.connect(self.cb_temperature_image)
        self.valid_resolution = self.resolution_box.currentIndex()

        self.thermal_image_wrapper = None
        self.button_detach_image.clicked.connect(self.detach_image_clicked)

        self.update_agc_roi_label()

        self.fps_average_length = 10
        self.last_ten_image_times = []
        self.qtcb_high_contrast_image.connect(self.update_fps)
        self.qtcb_temperature_image.connect(self.update_fps)
예제 #21
0
    def __init__(self, *args):
        COMCUPluginBase.__init__(self, BrickletLEDStripV2, *args)

        self.setupUi(self)

        self.led_strip = self.device

        self.frame_read_callback_was_enabled = None

        self.qtcb_frame_started.connect(self.cb_frame_started)

        self.button_color.clicked.connect(self.color_clicked)
        self.button_black.clicked.connect(self.black_clicked)
        self.button_gradient.clicked.connect(self.gradient_clicked)
        self.button_dot.clicked.connect(self.dot_clicked)
        self.box_frame_duration.valueChanged.connect(
            self.frame_duration_changed)
        self.gradient_intensity.valueChanged.connect(
            self.gradient_intensity_changed)

        self.chip_type_combobox.addItem(
            'WS2801', (BrickletLEDStripV2.CHIP_TYPE_WS2801, 3))
        self.chip_type_combobox.addItem(
            'WS2811', (BrickletLEDStripV2.CHIP_TYPE_WS2811, 3))
        self.chip_type_combobox.addItem(
            'WS2812 / SK6812 / NeoPixel RGB (GRB)',
            (BrickletLEDStripV2.CHIP_TYPE_WS2812, 3))

        self.box_clock_frequency.editingFinished.connect(
            self.clock_frequency_changed)

        self.chip_type_combobox.currentIndexChanged.connect(
            self.chip_type_changed)

        self.chip_type_combobox.addItem(
            'SK6812RGBW / NeoPixel RGBW (GRBW)',
            (BrickletLEDStripV2.CHIP_TYPE_WS2812, 4))
        self.chip_type_combobox.addItem(
            'LPD8806', (BrickletLEDStripV2.CHIP_TYPE_LPD8806, 3))
        self.chip_type_combobox.addItem(
            'APA102 / DotStar (bBGR)',
            (BrickletLEDStripV2.CHIP_TYPE_APA102, 4))

        self.channel_mapping_combobox.currentIndexChanged.connect(
            self.channel_mapping_changed)

        self.state = self.STATE_IDLE

        self.gradient_counter = 0
        self.dot_counter = 0
        self.dot_direction = 1

        self.voltage = 0

        self.frame_started_callback_was_enabled = None

        self.voltage_timer = QTimer(self)
        self.voltage_timer.timeout.connect(self.update_voltage)
        self.voltage_timer.setInterval(1000)

        self.chip_type_changed(0, ui_only=True)

        self.button_gradient.setEnabled(False)
        self.box_num_led.valueChanged.connect(self.box_num_led_changed)
예제 #22
0
    def __init__(self, *args):
        COMCUPluginBase.__init__(self, BrickletRS232V2, *args)

        self.setupUi(self)

        self.text.setReadOnly(True)

        self.rs232 = self.device

        self.read_callback_was_enabled = None

        self.qtcb_read.connect(self.cb_read)
        self.rs232.register_callback(self.rs232.CALLBACK_READ,
                                     self.qtcb_read.emit)

        self.qtcb_error_count.connect(self.cb_error_count)
        self.rs232.register_callback(self.rs232.CALLBACK_ERROR_COUNT,
                                     self.qtcb_error_count.emit)

        self.input_combobox.addItem("")
        self.input_combobox.lineEdit().setMaxLength(65533)
        self.input_combobox.lineEdit().returnPressed.connect(
            self.input_changed)

        self.line_ending_lineedit.setValidator(HexValidator())
        self.line_ending_combobox.currentIndexChanged.connect(
            self.line_ending_changed)
        self.line_ending_lineedit.editingFinished.connect(
            self.line_ending_changed)

        self.baudrate_spinbox.valueChanged.connect(self.configuration_changed)
        self.parity_combobox.currentIndexChanged.connect(
            self.configuration_changed)
        self.stopbits_spinbox.valueChanged.connect(self.configuration_changed)
        self.wordlength_spinbox.valueChanged.connect(
            self.configuration_changed)
        self.flowcontrol_combobox.currentIndexChanged.connect(
            self.configuration_changed)
        self.text_type_combobox.currentIndexChanged.connect(
            self.text_type_changed)

        self.hextext = QHexeditWidget(self.text.font())
        self.hextext.hide()
        self.layout().insertWidget(2, self.hextext)

        self.button_clear_text.clicked.connect(
            lambda: self.text.setPlainText(""))
        self.button_clear_text.clicked.connect(self.hextext.clear)

        self.save_button.clicked.connect(self.save_clicked)

        self.error_stream_oos = 0

        self.last_char = ''

        if self.baudrate_spinbox.value() > BAUDRATE_MAX_RS232:
            self.label_note_baud.show()
        else:
            self.label_note_baud.hide()

        if self.flowcontrol_combobox.currentIndex() == CBOX_IDX_FC_HW:
            self.label_note_fc_hw.show()
        else:
            self.label_note_fc_hw.hide()
예제 #23
0
파일: dmx.py 프로젝트: jose1711/brickv
    def __init__(self, *args):
        COMCUPluginBase.__init__(self, BrickletDMX, *args)

        self.setupUi(self)

        self.dmx = self.device

        self.wait_for_first_read = True

        self.dmx_overview = DMXOverview(self)
        self.layout_dmx_overview.insertWidget(1, self.dmx_overview)

        self.qtcb_frame_started.connect(self.cb_frame_started)
        self.qtcb_frame.connect(self.cb_frame)

        self.mode_combobox.currentIndexChanged.connect(self.mode_changed)
        self.frame_duration_spinbox.valueChanged.connect(
            self.frame_duration_changed)

        self.address_spinboxes = []
        self.address_slider = []

        for i in range(512):
            spinbox = QSpinBox()
            spinbox.setMinimum(0)
            spinbox.setMaximum(255)

            slider = QSlider(Qt.Horizontal)
            slider.setMinimum(0)
            slider.setMaximum(255)

            spinbox.valueChanged.connect(slider.setValue)
            slider.valueChanged.connect(spinbox.setValue)

            def get_frame_value_changed_func(i):
                return lambda x: self.frame_value_changed(i, x)

            slider.valueChanged.connect(get_frame_value_changed_func(i))

            self.address_table.setCellWidget(i, 0, spinbox)
            self.address_table.setCellWidget(i, 1, slider)

            self.address_spinboxes.append(spinbox)
            self.address_slider.append(slider)

        self.address_table.horizontalHeader().setStretchLastSection(True)
        self.address_table.show()

        self.current_frame = [0] * 512

        self.com_led_off_action = QAction('Off', self)
        self.com_led_off_action.triggered.connect(
            lambda: self.dmx.set_communication_led_config(
                BrickletDMX.COMMUNICATION_LED_CONFIG_OFF))
        self.com_led_on_action = QAction('On', self)
        self.com_led_on_action.triggered.connect(
            lambda: self.dmx.set_communication_led_config(
                BrickletDMX.COMMUNICATION_LED_CONFIG_ON))
        self.com_led_show_heartbeat_action = QAction('Show Heartbeat', self)
        self.com_led_show_heartbeat_action.triggered.connect(
            lambda: self.dmx.set_communication_led_config(
                BrickletDMX.COMMUNICATION_LED_CONFIG_SHOW_HEARTBEAT))
        self.com_led_show_communication_action = QAction('Show Com', self)
        self.com_led_show_communication_action.triggered.connect(
            lambda: self.dmx.set_communication_led_config(
                BrickletDMX.COMMUNICATION_LED_CONFIG_SHOW_COMMUNICATION))

        self.extra_configs += [(1, 'Com LED:', [
            self.com_led_off_action, self.com_led_on_action,
            self.com_led_show_heartbeat_action,
            self.com_led_show_communication_action
        ])]

        self.error_led_off_action = QAction('Off', self)
        self.error_led_off_action.triggered.connect(
            lambda: self.dmx.set_error_led_config(BrickletDMX.
                                                  ERROR_LED_CONFIG_OFF))
        self.error_led_on_action = QAction('On', self)
        self.error_led_on_action.triggered.connect(
            lambda: self.dmx.set_error_led_config(BrickletDMX.
                                                  ERROR_LED_CONFIG_ON))
        self.error_led_show_heartbeat_action = QAction('Show Heartbeat', self)
        self.error_led_show_heartbeat_action.triggered.connect(
            lambda: self.dmx.set_error_led_config(
                BrickletDMX.ERROR_LED_CONFIG_SHOW_HEARTBEAT))
        self.error_led_show_error_action = QAction('Show Error', self)
        self.error_led_show_error_action.triggered.connect(
            lambda: self.dmx.set_error_led_config(BrickletDMX.
                                                  ERROR_LED_CONFIG_SHOW_ERROR))

        self.extra_configs += [(1, 'Error LED:', [
            self.error_led_off_action, self.error_led_on_action,
            self.error_led_show_heartbeat_action,
            self.error_led_show_error_action
        ])]
예제 #24
0
    def __init__(self, *args):
        COMCUPluginBase.__init__(self, BrickletIndustrialQuadRelayV2, *args)

        self.setupUi(self)

        self.iqr = self.device

        self.open_pixmap = load_masked_pixmap(
            'plugin_system/plugins/industrial_quad_relay/relay_open.bmp')
        self.close_pixmap = load_masked_pixmap(
            'plugin_system/plugins/industrial_quad_relay/relay_close.bmp')

        self.relay_buttons = [self.b0, self.b1, self.b2, self.b3]
        self.relay_button_icons = [
            self.b0_icon, self.b1_icon, self.b2_icon, self.b3_icon
        ]
        self.relay_button_labels = [
            self.b0_label, self.b1_label, self.b2_label, self.b3_label
        ]

        for icon in self.relay_button_icons:
            icon.setPixmap(self.open_pixmap)
            icon.show()

        for i in range(len(self.relay_buttons)):
            self.relay_buttons[i].clicked.connect(
                functools.partial(self.relay_button_clicked, i))

        self.monoflop_values = []
        self.monoflop_times = []

        for i in range(4):
            self.monoflop_channel.setItemData(i, i)

            monoflop_value = QComboBox()
            monoflop_value.addItem('On', True)
            monoflop_value.addItem('Off', False)

            self.monoflop_values.append(monoflop_value)
            self.monoflop_value_stack.addWidget(monoflop_value)

            monoflop_time = QSpinBox()
            monoflop_time.setRange(1, (1 << 31) - 1)
            monoflop_time.setValue(1000)

            self.monoflop_times.append(monoflop_time)
            self.monoflop_time_stack.addWidget(monoflop_time)

        self.monoflop = Monoflop(self.iqr, [0, 1, 2, 3], self.monoflop_values,
                                 self.cb_value_change_by_monoflop,
                                 self.monoflop_times, None, self)

        self.monoflop_channel.currentIndexChanged.connect(
            self.monoflop_channel_changed)
        self.monoflop_go.clicked.connect(self.monoflop_go_clicked)

        self.cbox_cs0_cfg.currentIndexChanged.connect(
            self.cbox_cs0_cfg_changed)
        self.cbox_cs1_cfg.currentIndexChanged.connect(
            self.cbox_cs1_cfg_changed)
        self.cbox_cs2_cfg.currentIndexChanged.connect(
            self.cbox_cs2_cfg_changed)
        self.cbox_cs3_cfg.currentIndexChanged.connect(
            self.cbox_cs3_cfg_changed)
예제 #25
0
파일: imu_v3.py 프로젝트: fk0815/brickv
    def __init__(self, *args):
        COMCUPluginBase.__init__(self, BrickletIMUV3, *args)

        self.setupUi(self)

        self.imu = self.device

        self.cbe_all_data = CallbackEmulator(self, self.imu.get_all_data, None,
                                             self.cb_all_data,
                                             self.increase_error_count)

        self.imu_gl = IMUV33DWidget(self)
        self.imu_gl.setFixedSize(200, 200)

        self.imu_gl_wrapper = None
        self.state = None

        self.data_plot_widget = []

        self.sensor_data = [CurveValueWrapper() for i in range(23)]

        self.data_labels = [
            self.label_acceleration_x, self.label_acceleration_y,
            self.label_acceleration_z, self.label_magnetic_field_x,
            self.label_magnetic_field_y, self.label_magnetic_field_z,
            self.label_angular_velocity_x, self.label_angular_velocity_y,
            self.label_angular_velocity_z, self.label_euler_angle_heading,
            self.label_euler_angle_roll, self.label_euler_angle_pitch,
            self.label_quaternion_w, self.label_quaternion_x,
            self.label_quaternion_y, self.label_quaternion_z,
            self.label_linear_acceleration_x, self.label_linear_acceleration_y,
            self.label_linear_acceleration_z, self.label_gravity_vector_x,
            self.label_gravity_vector_y, self.label_gravity_vector_z,
            self.label_temperature
        ]

        self.data_rows = [
            [
                self.label_acceleration_11, self.label_acceleration_21,
                self.label_acceleration_22, self.label_acceleration_23,
                self.label_acceleration_41, self.label_acceleration_42,
                self.label_acceleration_43, self.label_acceleration_x,
                self.label_acceleration_y, self.label_acceleration_z
            ],
            [
                self.label_magnetic_field_11, self.label_magnetic_field_21,
                self.label_magnetic_field_22, self.label_magnetic_field_23,
                self.label_magnetic_field_41, self.label_magnetic_field_42,
                self.label_magnetic_field_43, self.label_magnetic_field_x,
                self.label_magnetic_field_y, self.label_magnetic_field_z
            ],
            [
                self.label_angular_velocity_11, self.label_angular_velocity_21,
                self.label_angular_velocity_22, self.label_angular_velocity_23,
                self.label_angular_velocity_41, self.label_angular_velocity_42,
                self.label_angular_velocity_43, self.label_angular_velocity_x,
                self.label_angular_velocity_y, self.label_angular_velocity_z
            ],
            [
                self.label_euler_angle_11, self.label_euler_angle_21,
                self.label_euler_angle_22, self.label_euler_angle_23,
                self.label_euler_angle_41, self.label_euler_angle_42,
                self.label_euler_angle_43, self.label_euler_angle_roll,
                self.label_euler_angle_pitch, self.label_euler_angle_heading
            ],
            [
                self.label_quaternion_11, self.label_quaternion_21,
                self.label_quaternion_22, self.label_quaternion_23,
                self.label_quaternion_24, self.label_quaternion_41,
                self.label_quaternion_42, self.label_quaternion_43,
                self.label_quaternion_44, self.label_quaternion_w,
                self.label_quaternion_x, self.label_quaternion_y,
                self.label_quaternion_z
            ],
            [
                self.label_linear_acceleration_11,
                self.label_linear_acceleration_21,
                self.label_linear_acceleration_22,
                self.label_linear_acceleration_23,
                self.label_linear_acceleration_41,
                self.label_linear_acceleration_42,
                self.label_linear_acceleration_43,
                self.label_linear_acceleration_x,
                self.label_linear_acceleration_y,
                self.label_linear_acceleration_z
            ],
            [
                self.label_gravity_vector_11, self.label_gravity_vector_21,
                self.label_gravity_vector_22, self.label_gravity_vector_23,
                self.label_gravity_vector_41, self.label_gravity_vector_42,
                self.label_gravity_vector_43, self.label_gravity_vector_x,
                self.label_gravity_vector_y, self.label_gravity_vector_z
            ],
            [
                self.label_temperature_11, self.label_temperature_21,
                self.label_temperature_41, self.label_temperature
            ]
        ]

        even_color = QColor(240, 240, 240)
        odd_color = QColor(255, 255, 255)

        self.data_color = [(Qt.red, even_color), (Qt.darkGreen, even_color),
                           (Qt.blue, even_color), (Qt.red, odd_color),
                           (Qt.darkGreen, odd_color), (Qt.blue, odd_color),
                           (Qt.red, even_color), (Qt.darkGreen, even_color),
                           (Qt.blue, even_color), (Qt.red, odd_color),
                           (Qt.darkGreen, odd_color), (Qt.blue, odd_color),
                           (Qt.magenta, even_color), (Qt.red, even_color),
                           (Qt.darkGreen, even_color), (Qt.blue, even_color),
                           (Qt.red, odd_color), (Qt.darkGreen, odd_color),
                           (Qt.blue, odd_color), (Qt.red, even_color),
                           (Qt.darkGreen, even_color), (Qt.blue, even_color),
                           (Qt.magenta, odd_color)]

        even_palette = QPalette()
        even_palette.setColor(QPalette.Window, even_color)
        odd_palette = QPalette()
        odd_palette.setColor(QPalette.Window, odd_color)

        for i, row in enumerate(self.data_rows):
            for label in row:
                if i % 2:
                    label.setPalette(odd_palette)
                else:
                    label.setPalette(even_palette)

                label.setAutoFillBackground(True)

        self.plot_timer = QTimer(self)
        self.plot_timer.start(100)

        for i in range(23):
            self.data_plot_widget.append(
                PlotWidget(
                    "",
                    [("", self.data_color[i][0], self.sensor_data[i], str)],
                    clear_button=self.clear_graphs,
                    x_scale_visible=False,
                    y_scale_visible=False,
                    curve_outer_border_visible=False,
                    curve_motion='smooth',
                    canvas_color=self.data_color[i][1],
                    external_timer=self.plot_timer,
                    curve_start='right',
                    key=None,
                    y_resolution=0.01))

        for w in self.data_plot_widget:
            w.setMinimumHeight(15)
            w.setMaximumHeight(25)

        for i in range(23):
            self.data_grid.addWidget(self.data_plot_widget[i], i, 4)

        self.data_grid.setColumnMinimumWidth(2, 75)

        self.gl_layout = QVBoxLayout()
        self.gl_layout.addWidget(self.imu_gl)
        self.layout_bottom.addLayout(self.gl_layout)
        self.save_orientation.clicked.connect(self.save_orientation_clicked)
        self.button_detach_3d_view.clicked.connect(self.detach_3d_view_clicked)

        self.button_calibration.clicked.connect(self.calibration_clicked)
        self.calibration_color = [
            Qt.red, QColor(0xFF, 0xA0, 0x00), Qt.yellow, Qt.darkGreen
        ]

        self.calibration = None
        self.alive = True
        self.callback_counter = 0
예제 #26
0
파일: io16_v2.py 프로젝트: daniz185/brickv
    def __init__(self, *args):
        COMCUPluginBase.__init__(self, BrickletIO16V2, *args)

        self.setupUi(self)

        self.io = self.device

        self.io.set_response_expected(self.io.FUNCTION_SET_CONFIGURATION, True)

        self.cbe_value = CallbackEmulator(self.io.get_value, None,
                                          self.cb_value,
                                          self.increase_error_count)

        self.config_direction = [None] * 16
        self.config_value = [None] * 16

        self.lbl_st_ch_v = [
            self.lbl_st_ch0_v, self.lbl_st_ch1_v, self.lbl_st_ch2_v,
            self.lbl_st_ch3_v, self.lbl_st_ch4_v, self.lbl_st_ch5_v,
            self.lbl_st_ch6_v, self.lbl_st_ch7_v, self.lbl_st_ch8_v,
            self.lbl_st_ch9_v, self.lbl_st_ch10_v, self.lbl_st_ch11_v,
            self.lbl_st_ch12_v, self.lbl_st_ch13_v, self.lbl_st_ch14_v,
            self.lbl_st_ch15_v
        ]

        self.lbl_st_ch_d = [
            self.lbl_st_ch0_d, self.lbl_st_ch1_d, self.lbl_st_ch2_d,
            self.lbl_st_ch3_d, self.lbl_st_ch4_d, self.lbl_st_ch5_d,
            self.lbl_st_ch6_d, self.lbl_st_ch7_d, self.lbl_st_ch8_d,
            self.lbl_st_ch9_d, self.lbl_st_ch10_d, self.lbl_st_ch11_d,
            self.lbl_st_ch12_d, self.lbl_st_ch13_d, self.lbl_st_ch14_d,
            self.lbl_st_ch15_d
        ]

        self.lbl_st_ch_cfg = [
            self.lbl_st_ch0_cfg, self.lbl_st_ch1_cfg, self.lbl_st_ch2_cfg,
            self.lbl_st_ch3_cfg, self.lbl_st_ch4_cfg, self.lbl_st_ch5_cfg,
            self.lbl_st_ch6_cfg, self.lbl_st_ch7_cfg, self.lbl_st_ch8_cfg,
            self.lbl_st_ch9_cfg, self.lbl_st_ch10_cfg, self.lbl_st_ch11_cfg,
            self.lbl_st_ch12_cfg, self.lbl_st_ch13_cfg, self.lbl_st_ch14_cfg,
            self.lbl_st_ch15_cfg
        ]

        self.lbl_st_ch_monoflop_t = [
            self.lbl_st_ch0_monoflop_t, self.lbl_st_ch1_monoflop_t,
            self.lbl_st_ch2_monoflop_t, self.lbl_st_ch3_monoflop_t,
            self.lbl_st_ch4_monoflop_t, self.lbl_st_ch5_monoflop_t,
            self.lbl_st_ch6_monoflop_t, self.lbl_st_ch7_monoflop_t,
            self.lbl_st_ch8_monoflop_t, self.lbl_st_ch9_monoflop_t,
            self.lbl_st_ch10_monoflop_t, self.lbl_st_ch11_monoflop_t,
            self.lbl_st_ch12_monoflop_t, self.lbl_st_ch13_monoflop_t,
            self.lbl_st_ch14_monoflop_t, self.lbl_st_ch15_monoflop_t
        ]

        self.cbox_cfg_ch_dir.setItemData(0, self.io.DIRECTION_IN)
        self.cbox_cfg_ch_dir.setItemData(1, self.io.DIRECTION_OUT)

        self.cbox_cfg_ch_v.setItemData(0, True)
        self.cbox_cfg_ch_v.setItemData(1, False)

        self.btn_monoflop_go.clicked.connect(self.btn_monoflop_go_clicked)
        self.btn_cfg_ch_save.clicked.connect(self.btn_cfg_ch_save_clicked)
        self.cbox_cfg_ch.currentIndexChanged.connect(self.cbox_cfg_ch_changed)
        self.cbox_cfg_ch_dir.currentIndexChanged.connect(
            self.cbox_cfg_ch_dir_changed)

        self.monoflop_values = []
        self.monoflop_times = []

        for i in range(16):
            monoflop_value = QComboBox()
            monoflop_value.addItem('High', 1)
            monoflop_value.addItem('Low', 0)

            self.monoflop_values.append(monoflop_value)
            self.monoflop_value_stack.addWidget(monoflop_value)

            monoflop_time = QDoubleSpinBox()

            self.monoflop_times.append(monoflop_time)
            self.monoflop_time_stack.addWidget(monoflop_time)

        self.monoflop = Monoflop(
            self.io,
            list(range(16)),
            self.monoflop_values,
            self.cb_value_change_by_monoflop,
            self.monoflop_times,
            self.lbl_st_ch_monoflop_t,
            self,
            handle_get_monoflop_invalid_parameter_as_abort=True)
예제 #27
0
    def __init__(self, *args):
        COMCUPluginBase.__init__(self, BrickletIndustrialDual020mAV2, *args)

        self.dual020 = self.device

        self.str_connected = 'Channel {0} is <font color="green">connected</font>'
        self.str_not_connected = 'Channel {0} is <font color="red">not connected</font>'

        self.cbe_current0 = CallbackEmulator(
            functools.partial(self.dual020.get_current, CH_0),
            functools.partial(self.cb_current, CH_0),
            self.increase_error_count)
        self.cbe_current1 = CallbackEmulator(
            functools.partial(self.dual020.get_current, CH_1),
            functools.partial(self.cb_current, CH_1),
            self.increase_error_count)

        self.connected_labels = [
            FixedSizeLabel(self.str_not_connected.format(CH_0)),
            FixedSizeLabel(self.str_not_connected.format(CH_1))
        ]

        self.current_current = [None, None]  # float, mA

        plots = [('Channel 0', Qt.red, lambda: self.current_current[CH_0],
                  lambda value: '{:.03f} mA'.format(round(value, 3))),
                 ('Channel 1', Qt.blue, lambda: self.current_current[CH_1],
                  lambda value: '{:.03f} mA'.format(round(value, 3)))]

        self.plot_widget = PlotWidget('Current [mA]',
                                      plots,
                                      extra_key_widgets=self.connected_labels)

        h_sp = QSizePolicy()
        h_sp.setHorizontalPolicy(QSizePolicy.Expanding)

        self.sample_rate_label = QLabel('Sample Rate:')
        self.sample_rate_combo = QComboBox()
        self.sample_rate_combo.addItem('240 Hz')
        self.sample_rate_combo.addItem('60 Hz')
        self.sample_rate_combo.addItem('15 Hz')
        self.sample_rate_combo.addItem('4 Hz')
        self.sample_rate_combo.currentIndexChanged.connect(
            self.sample_rate_combo_index_changed)
        self.sample_rate_combo.setSizePolicy(h_sp)

        self.gain_label = QLabel('Gain:')
        self.gain_combo = QComboBox()
        self.gain_combo.addItem('x1')
        self.gain_combo.addItem('x2')
        self.gain_combo.addItem('x4')
        self.gain_combo.addItem('x8')
        self.gain_combo.currentIndexChanged.connect(
            self.gain_combo_index_changed)
        self.gain_combo.setSizePolicy(h_sp)

        self.led_config_ch0_label = QLabel('Channel 0')
        self.led_config_ch1_label = QLabel('Channel 1')
        self.led_config_label = QLabel('LED Config:')
        self.led_status_config_label = QLabel('LED Status Config:')
        self.led_status_config_ch0_min_label = QLabel('Min:')
        self.led_status_config_ch0_max_label = QLabel('Max:')
        self.led_status_config_ch1_min_label = QLabel('Min:')
        self.led_status_config_ch1_max_label = QLabel('Max:')

        self.led_config_ch0_combo = QComboBox()
        self.led_config_ch0_combo.addItem('Off')
        self.led_config_ch0_combo.addItem('On')
        self.led_config_ch0_combo.addItem('Show Heartbeat')
        self.led_config_ch0_combo.addItem('Show Channel Status')
        self.led_config_ch0_combo.setSizePolicy(h_sp)
        self.led_config_ch0_combo.currentIndexChanged.connect(
            self.led_config_ch0_combo_changed)

        self.led_config_ch1_combo = QComboBox()
        self.led_config_ch1_combo.addItem('Off')
        self.led_config_ch1_combo.addItem('On')
        self.led_config_ch1_combo.addItem('Show Heartbeat')
        self.led_config_ch1_combo.addItem('Show Channel Status')
        self.led_config_ch1_combo.setSizePolicy(h_sp)
        self.led_config_ch1_combo.currentIndexChanged.connect(
            self.led_config_ch1_combo_changed)

        self.led_status_config_ch0_combo = QComboBox()
        self.led_status_config_ch0_combo.addItem('Threshold')
        self.led_status_config_ch0_combo.addItem('Intensity')
        self.led_status_config_ch0_combo.setSizePolicy(h_sp)
        self.led_status_config_ch0_combo.currentIndexChanged.connect(
            self.led_status_config_ch0_combo_changed)

        self.led_status_config_ch1_combo = QComboBox()
        self.led_status_config_ch1_combo.addItem('Threshold')
        self.led_status_config_ch1_combo.addItem('Intensity')
        self.led_status_config_ch1_combo.setSizePolicy(h_sp)
        self.led_status_config_ch1_combo.currentIndexChanged.connect(
            self.led_status_config_ch1_combo_changed)

        self.led_status_config_ch0_min_sbox = QDoubleSpinBox()
        self.led_status_config_ch0_max_sbox = QDoubleSpinBox()
        self.led_status_config_ch1_min_sbox = QDoubleSpinBox()
        self.led_status_config_ch1_max_sbox = QDoubleSpinBox()

        self.led_status_config_ch0_min_sbox.setValue(0)
        self.led_status_config_ch0_min_sbox.setMinimum(0)
        self.led_status_config_ch0_min_sbox.setSingleStep(0.5)
        self.led_status_config_ch0_min_sbox.setDecimals(3)
        self.led_status_config_ch0_min_sbox.setSuffix(' mA')
        self.led_status_config_ch0_min_sbox.setMaximum(22.5)
        self.led_status_config_ch0_min_sbox.valueChanged.connect(
            self.led_status_config_ch0_min_sbox_changed)

        self.led_status_config_ch0_max_sbox.setValue(0)
        self.led_status_config_ch0_max_sbox.setMinimum(0)
        self.led_status_config_ch0_max_sbox.setSingleStep(0.5)
        self.led_status_config_ch0_max_sbox.setDecimals(3)
        self.led_status_config_ch0_max_sbox.setSuffix(' mA')
        self.led_status_config_ch0_max_sbox.setMaximum(22.5)
        self.led_status_config_ch0_max_sbox.valueChanged.connect(
            self.led_status_config_ch0_max_sbox_changed)

        self.led_status_config_ch1_min_sbox.setValue(0)
        self.led_status_config_ch1_min_sbox.setMinimum(0)
        self.led_status_config_ch1_min_sbox.setSingleStep(0.5)
        self.led_status_config_ch1_min_sbox.setDecimals(3)
        self.led_status_config_ch1_min_sbox.setSuffix(' mA')
        self.led_status_config_ch1_min_sbox.setMaximum(22.5)
        self.led_status_config_ch1_min_sbox.valueChanged.connect(
            self.led_status_config_ch1_min_sbox_changed)

        self.led_status_config_ch1_max_sbox.setValue(0)
        self.led_status_config_ch1_max_sbox.setMinimum(0)
        self.led_status_config_ch1_max_sbox.setSingleStep(0.5)
        self.led_status_config_ch1_max_sbox.setDecimals(3)
        self.led_status_config_ch1_max_sbox.setSuffix(' mA')
        self.led_status_config_ch1_max_sbox.setMaximum(22.5)
        self.led_status_config_ch1_max_sbox.valueChanged.connect(
            self.led_status_config_ch1_max_sbox_changed)

        hlayout = QHBoxLayout()
        self.led_status_config_ch0_min_sbox.setSizePolicy(h_sp)
        self.led_status_config_ch0_max_sbox.setSizePolicy(h_sp)
        hlayout.addWidget(self.led_status_config_ch0_min_label)
        hlayout.addWidget(self.led_status_config_ch0_min_sbox)
        hlayout.addWidget(self.led_status_config_ch0_max_label)
        hlayout.addWidget(self.led_status_config_ch0_max_sbox)

        hlayout1 = QHBoxLayout()
        self.led_status_config_ch1_min_sbox.setSizePolicy(h_sp)
        self.led_status_config_ch1_max_sbox.setSizePolicy(h_sp)
        hlayout1.addWidget(self.led_status_config_ch1_min_label)
        hlayout1.addWidget(self.led_status_config_ch1_min_sbox)
        hlayout1.addWidget(self.led_status_config_ch1_max_label)
        hlayout1.addWidget(self.led_status_config_ch1_max_sbox)

        line = QFrame()
        line.setFrameShape(QFrame.HLine)
        line.setFrameShadow(QFrame.Sunken)

        line1 = QFrame()
        line1.setFrameShape(QFrame.HLine)
        line1.setFrameShadow(QFrame.Sunken)

        line2 = QFrame()
        line2.setFrameShape(QFrame.HLine)
        line2.setFrameShadow(QFrame.Sunken)

        glayout = QGridLayout()

        glayout.addWidget(line, 0, 0, 1, 3)  # line-1
        glayout.addWidget(self.sample_rate_label, 1, 0, 1, 1)
        glayout.addWidget(self.sample_rate_combo, 1, 1, 1, 2)
        glayout.addWidget(self.gain_label, 2, 0, 1, 1)
        glayout.addWidget(self.gain_combo, 2, 1, 1, 2)
        glayout.addWidget(line1, 3, 0, 1, 3)  # line-2
        glayout.addWidget(self.led_config_ch0_label, 4, 1, 1, 1)
        glayout.addWidget(self.led_config_ch1_label, 4, 2, 1, 1)
        glayout.addWidget(line2, 5, 0, 1, 3)  # line-3
        glayout.addWidget(self.led_config_label, 6, 0, 1, 1)
        glayout.addWidget(self.led_config_ch0_combo, 6, 1, 1, 1)
        glayout.addWidget(self.led_config_ch1_combo, 6, 2, 1, 1)
        glayout.addWidget(self.led_status_config_label, 7, 0, 1, 1)
        glayout.addWidget(self.led_status_config_ch0_combo, 7, 1, 1, 1)
        glayout.addWidget(self.led_status_config_ch1_combo, 7, 2, 1, 1)
        glayout.addLayout(hlayout, 8, 1, 1, 1)
        glayout.addLayout(hlayout1, 8, 2, 1, 1)

        layout = QVBoxLayout(self)
        layout.addWidget(self.plot_widget)
        layout.addLayout(glayout)

        self.ui_group_ch_status_ch0 = [
            self.led_status_config_ch0_combo,
            self.led_status_config_ch0_min_sbox,
            self.led_status_config_ch0_max_sbox
        ]

        self.ui_group_ch_status_ch1 = [
            self.led_status_config_ch1_combo,
            self.led_status_config_ch1_min_sbox,
            self.led_status_config_ch1_max_sbox
        ]
    def __init__(self, *args):
        COMCUPluginBase.__init__(self, BrickletIndustrialDualAnalogInV2, *args)

        self.analog_in = self.device

        self.cbe_voltage0 = CallbackEmulator(functools.partial(self.analog_in.get_voltage, 0),
                                             functools.partial(self.cb_voltage, 0),
                                             self.increase_error_count)

        self.cbe_voltage1 = CallbackEmulator(functools.partial(self.analog_in.get_voltage, 1),
                                             functools.partial(self.cb_voltage, 1),
                                             self.increase_error_count)

        self.calibration = None

        self.sample_rate_label = QLabel('Sample Rate:')
        self.sample_rate_combo = QComboBox()
        self.sample_rate_combo.addItem('976 Hz')
        self.sample_rate_combo.addItem('488 Hz')
        self.sample_rate_combo.addItem('244 Hz')
        self.sample_rate_combo.addItem('122 Hz')
        self.sample_rate_combo.addItem('61 Hz')
        self.sample_rate_combo.addItem('4 Hz')
        self.sample_rate_combo.addItem('2 Hz')
        self.sample_rate_combo.addItem('1 Hz')

        self.current_voltage = [None, None] # float, V
        self.calibration_button = QPushButton('Calibration...')

        self.sample_rate_combo.currentIndexChanged.connect(self.sample_rate_combo_index_changed)
        self.calibration_button.clicked.connect(self.calibration_button_clicked)

        plots = [('Channel 0', Qt.red, lambda: self.current_voltage[0], format_voltage),
                 ('Channel 1', Qt.blue, lambda: self.current_voltage[1], format_voltage)]
        self.plot_widget = PlotWidget('Voltage [V]', plots)

        # Define lines
        line = QFrame()
        line.setFrameShape(QFrame.HLine)
        line.setFrameShadow(QFrame.Sunken)

        line1 = QFrame()
        line1.setFrameShape(QFrame.HLine)
        line1.setFrameShadow(QFrame.Sunken)

        line2 = QFrame()
        line2.setFrameShape(QFrame.HLine)
        line2.setFrameShadow(QFrame.Sunken)

        # Define channel LED status config widgets
        self.led_config_ch0_label = QLabel('Channel 0')
        self.led_config_ch1_label = QLabel('Channel 1')
        self.led_config_label = QLabel('LED Config:')
        self.led_status_config_label = QLabel('LED Status Config:')
        self.led_status_config_ch0_min_label = QLabel('Min:')
        self.led_status_config_ch0_max_label = QLabel('Max:')
        self.led_status_config_ch1_min_label = QLabel('Min:')
        self.led_status_config_ch1_max_label = QLabel('Max:')

        self.led_config_ch0_combo = QComboBox()
        self.led_config_ch0_combo.addItem('Off')
        self.led_config_ch0_combo.addItem('On')
        self.led_config_ch0_combo.addItem('Show Heartbeat')
        self.led_config_ch0_combo.addItem('Show Channel Status')
        self.led_config_ch0_combo.currentIndexChanged.connect(self.led_config_ch0_combo_changed)

        self.led_config_ch1_combo = QComboBox()
        self.led_config_ch1_combo.addItem('Off')
        self.led_config_ch1_combo.addItem('On')
        self.led_config_ch1_combo.addItem('Show Heartbeat')
        self.led_config_ch1_combo.addItem('Show Channel Status')
        self.led_config_ch1_combo.currentIndexChanged.connect(self.led_config_ch1_combo_changed)

        self.led_status_config_ch0_combo = QComboBox()
        self.led_status_config_ch0_combo.addItem('Threshold')
        self.led_status_config_ch0_combo.addItem('Intensity')
        self.led_status_config_ch0_combo.currentIndexChanged.connect(self.led_status_config_ch0_combo_changed)

        self.led_status_config_ch1_combo = QComboBox()
        self.led_status_config_ch1_combo.addItem('Threshold')
        self.led_status_config_ch1_combo.addItem('Intensity')
        self.led_status_config_ch1_combo.currentIndexChanged.connect(self.led_status_config_ch1_combo_changed)

        self.led_status_config_ch0_min_sbox = QSpinBox()
        self.led_status_config_ch0_min_sbox.setMinimum(-35000)
        self.led_status_config_ch0_min_sbox.setMaximum(35000)
        self.led_status_config_ch0_min_sbox.setValue(0)
        self.led_status_config_ch0_min_sbox.setSingleStep(1)
        self.led_status_config_ch0_min_sbox.setSuffix(' mV')
        self.led_status_config_ch0_min_sbox.valueChanged.connect(self.led_status_config_ch0_min_sbox_changed)

        self.led_status_config_ch0_max_sbox = QSpinBox()
        self.led_status_config_ch0_max_sbox.setMinimum(-35000)
        self.led_status_config_ch0_max_sbox.setMaximum(35000)
        self.led_status_config_ch0_max_sbox.setValue(0)
        self.led_status_config_ch0_max_sbox.setSingleStep(1)
        self.led_status_config_ch0_max_sbox.setSuffix(' mV')
        self.led_status_config_ch0_max_sbox.valueChanged.connect(self.led_status_config_ch0_max_sbox_changed)

        self.led_status_config_ch1_min_sbox = QSpinBox()
        self.led_status_config_ch1_min_sbox.setMinimum(-35000)
        self.led_status_config_ch1_min_sbox.setMaximum(35000)
        self.led_status_config_ch1_min_sbox.setValue(0)
        self.led_status_config_ch1_min_sbox.setSingleStep(1)
        self.led_status_config_ch1_min_sbox.setSuffix(' mV')
        self.led_status_config_ch1_min_sbox.valueChanged.connect(self.led_status_config_ch1_min_sbox_changed)

        self.led_status_config_ch1_max_sbox = QSpinBox()
        self.led_status_config_ch1_max_sbox.setMinimum(-35000)
        self.led_status_config_ch1_max_sbox.setMaximum(35000)
        self.led_status_config_ch1_max_sbox.setValue(0)
        self.led_status_config_ch1_max_sbox.setSingleStep(1)
        self.led_status_config_ch1_max_sbox.setSuffix(' mV')
        self.led_status_config_ch1_max_sbox.valueChanged.connect(self.led_status_config_ch1_max_sbox_changed)

        # Define size policies
        h_sp = QSizePolicy()
        h_sp.setHorizontalPolicy(QSizePolicy.Expanding)

        # Set size policies
        self.sample_rate_combo.setSizePolicy(h_sp)
        self.led_config_ch0_combo.setSizePolicy(h_sp)
        self.led_config_ch1_combo.setSizePolicy(h_sp)
        self.led_status_config_ch0_combo.setSizePolicy(h_sp)
        self.led_status_config_ch1_combo.setSizePolicy(h_sp)
        self.led_status_config_ch0_min_sbox.setSizePolicy(h_sp)
        self.led_status_config_ch0_max_sbox.setSizePolicy(h_sp)
        self.led_status_config_ch1_min_sbox.setSizePolicy(h_sp)
        self.led_status_config_ch1_max_sbox.setSizePolicy(h_sp)

        # Define layouts
        hlayout = QHBoxLayout()
        vlayout = QVBoxLayout()
        glayout = QGridLayout()
        layout = QVBoxLayout(self)
        hlayout_ch0_min_max = QHBoxLayout()
        hlayout_ch1_min_max = QHBoxLayout()

        # Populate layouts
        vlayout.addWidget(self.calibration_button)
        hlayout.addWidget(self.sample_rate_label)
        hlayout.addWidget(self.sample_rate_combo)
        vlayout.addLayout(hlayout)
        vlayout.addWidget(line1)

        hlayout_ch0_min_max.addWidget(self.led_status_config_ch0_min_label)
        hlayout_ch0_min_max.addWidget(self.led_status_config_ch0_min_sbox)
        hlayout_ch0_min_max.addWidget(self.led_status_config_ch0_max_label)
        hlayout_ch0_min_max.addWidget(self.led_status_config_ch0_max_sbox)

        hlayout_ch1_min_max.addWidget(self.led_status_config_ch1_min_label)
        hlayout_ch1_min_max.addWidget(self.led_status_config_ch1_min_sbox)
        hlayout_ch1_min_max.addWidget(self.led_status_config_ch1_max_label)
        hlayout_ch1_min_max.addWidget(self.led_status_config_ch1_max_sbox)

        glayout.addWidget(self.led_config_ch0_label, 0, 1, 1, 1) # R, C, RS, CS
        glayout.addWidget(self.led_config_ch1_label, 0, 2, 1, 1)

        glayout.addWidget(line2, 1, 0, 1, 3)

        glayout.addWidget(self.led_config_label, 2, 0, 1, 1)
        glayout.addWidget(self.led_config_ch0_combo, 2, 1, 1, 1)
        glayout.addWidget(self.led_config_ch1_combo, 2, 2, 1, 1)

        glayout.addWidget(self.led_status_config_label, 3, 0, 1, 1)
        glayout.addWidget(self.led_status_config_ch0_combo, 3, 1, 1, 1)
        glayout.addWidget(self.led_status_config_ch1_combo, 3, 2, 1, 1)

        glayout.addLayout(hlayout_ch0_min_max, 4, 1, 1, 1)
        glayout.addLayout(hlayout_ch1_min_max, 4, 2, 1, 1)

        layout.addWidget(self.plot_widget)
        layout.addWidget(line)
        layout.addLayout(vlayout)
        layout.addLayout(glayout)

        self.ui_group_ch_status_ch0 = [self.led_status_config_ch0_combo,
                                       self.led_status_config_ch0_min_sbox,
                                       self.led_status_config_ch0_max_sbox]

        self.ui_group_ch_status_ch1 = [self.led_status_config_ch1_combo,
                                       self.led_status_config_ch1_min_sbox,
                                       self.led_status_config_ch1_max_sbox]
예제 #29
0
    def __init__(self, *args):
        COMCUPluginBase.__init__(self, BrickletServoV2, *args)

        self.setupUi(self)

        self.servo = self.device

        self.cbe_status = CallbackEmulator(self,
                                           self.servo.get_status,
                                           None,
                                           self.cb_status,
                                           self.increase_error_count)

        self.position_list = []
        self.velocity_list = []
        self.current_list = []
        self.enable_list = []

        self.up_cur = 0
        self.up_siv = 0
        self.up_eiv = 0
        self.up_opv = 0
        self.up_mv = 0

        self.up_ena = [0]*10
        self.up_pos = [0]*10
        self.up_vel = [0]*10
        self.up_acc = [0]*10

        self.alive = True

        for i in range(1, 11):
            label = QLabel()
            label.setText('Off')
            self.enable_list.append(label)
            self.status_grid.addWidget(label, i, 1)

        for i in range(1, 11):
            pk = PositionKnob()
            self.position_list.append(pk)
            self.status_grid.addWidget(pk, i, 2)

        for i in range(1, 11):
            cb = ColorBar(Qt.Vertical)
            self.velocity_list.append(cb)
            self.status_grid.addWidget(cb, i, 3)

        for i in range(1, 11):
            cb = ColorBar(Qt.Vertical)
            self.current_list.append(cb)
            self.status_grid.addWidget(cb, i, 4)

        self.servo_dropbox.currentIndexChanged.connect(lambda x: self.update_servo_specific())
        self.enable_checkbox.stateChanged.connect(self.enable_state_changed)

        self.position_syncer = SliderSpinSyncer(self.position_slider,
                                                self.position_spin,
                                                self.position_changed)

        self.velocity_syncer = SliderSpinSyncer(self.velocity_slider,
                                                self.velocity_spin,
                                                self.motion_changed)

        self.acceleration_syncer = SliderSpinSyncer(self.acceleration_slider,
                                                    self.acceleration_spin,
                                                    self.motion_changed)

        self.deceleration_syncer = SliderSpinSyncer(self.deceleration_slider,
                                                    self.deceleration_spin,
                                                    self.motion_changed)

        self.period_syncer = SliderSpinSyncer(self.period_slider,
                                              self.period_spin,
                                              self.period_changed)

        self.pulse_width_min_spin.editingFinished.connect(self.pulse_width_spin_finished)
        self.pulse_width_max_spin.editingFinished.connect(self.pulse_width_spin_finished)
        self.degree_min_spin.editingFinished.connect(self.degree_spin_finished)
        self.degree_max_spin.editingFinished.connect(self.degree_spin_finished)
예제 #30
0
    def __init__(self, *args):
        COMCUPluginBase.__init__(self, BrickletIO4V2, *args)

        self.setupUi(self)

        self.io = self.device

        self.has_monoflop_abort_by_set_configuration = None

        self.io.set_response_expected(self.io.FUNCTION_SET_CONFIGURATION, True)

        self.cbe_value = CallbackEmulator(self.io.get_value, None,
                                          self.cb_value,
                                          self.increase_error_count)

        self.config_direction = [None] * 4
        self.config_value = [None] * 4

        self.lbl_st_ch_v = [
            self.lbl_st_ch0_v, self.lbl_st_ch1_v, self.lbl_st_ch2_v,
            self.lbl_st_ch3_v
        ]

        self.lbl_st_ch_d = [
            self.lbl_st_ch0_d, self.lbl_st_ch1_d, self.lbl_st_ch2_d,
            self.lbl_st_ch3_d
        ]

        self.lbl_st_ch_cfg = [
            self.lbl_st_ch0_cfg, self.lbl_st_ch1_cfg, self.lbl_st_ch2_cfg,
            self.lbl_st_ch3_cfg
        ]

        self.lbl_st_ch_monoflop_t = [
            self.lbl_st_ch0_monoflop_t, self.lbl_st_ch1_monoflop_t,
            self.lbl_st_ch2_monoflop_t, self.lbl_st_ch3_monoflop_t
        ]

        self.cbox_cfg_ch_dir.setItemData(0, self.io.DIRECTION_IN)
        self.cbox_cfg_ch_dir.setItemData(1, self.io.DIRECTION_OUT)

        self.cbox_cfg_ch_v.setItemData(0, True)
        self.cbox_cfg_ch_v.setItemData(1, False)

        self.btn_monoflop_go.clicked.connect(self.btn_monoflop_go_clicked)
        self.btn_cfg_ch_save.clicked.connect(self.btn_cfg_ch_save_clicked)
        self.cbox_cfg_ch.currentIndexChanged.connect(self.cbox_cfg_ch_changed)
        self.cbox_cfg_ch_dir.currentIndexChanged.connect(
            self.cbox_cfg_ch_dir_changed)

        self.monoflop_values = []
        self.monoflop_times = []

        for i in range(4):
            monoflop_value = QComboBox()
            monoflop_value.addItem('High', 1)
            monoflop_value.addItem('Low', 0)

            self.monoflop_values.append(monoflop_value)
            self.monoflop_value_stack.addWidget(monoflop_value)

            monoflop_time = QSpinBox()
            monoflop_time.setRange(1, (1 << 31) - 1)
            monoflop_time.setValue(1000)

            self.monoflop_times.append(monoflop_time)
            self.monoflop_time_stack.addWidget(monoflop_time)

        self.monoflop = Monoflop(
            self.io, [0, 1, 2, 3],
            self.monoflop_values,
            self.cb_value_change_by_monoflop,
            self.monoflop_times,
            self.lbl_st_ch_monoflop_t,
            self,
            handle_get_monoflop_invalid_parameter_as_abort=True)