Beispiel #1
0
        private void checkBoxReadVoltage_CheckedChanged(object sender, EventArgs e)
        {
            if (_usbI2C.IsOpen())
            {
                if (checkBoxReadVoltage.Checked)
                {
                    checkBoxReadVoltage.Text = "Stop";
                    comboBoxAdcMode.Enabled  = false;
                    comboBoxChannel.Enabled  = false;
                    comboBoxSize.Enabled     = false;
                    comboBoxGain.Enabled     = false;

                    _backgroundWorkerAdc                            = new BackgroundWorker();
                    _backgroundWorkerAdc.DoWork                    += BackgroundWorkerAdcDoWork;
                    _backgroundWorkerAdc.ProgressChanged           += BackgroundWorkerAdcProgressChanged;
                    _backgroundWorkerAdc.WorkerReportsProgress      = true;
                    _backgroundWorkerAdc.WorkerSupportsCancellation = true;

                    AdcMode            mode    = AdcMode.Raw;
                    MCP3424.AdcChannel channel = MCP3424.AdcChannel.Channel0;
                    MCP3424.AdcSize    size    = MCP3424.AdcSize.Size12Bit;
                    MCP3424.AdcPga     pga     = MCP3424.AdcPga.Gain1;
                    try
                    {
                        Enum.TryParse <AdcMode>(comboBoxAdcMode.SelectedValue.ToString(), out mode);
                        Enum.TryParse <MCP3424.AdcChannel>(comboBoxChannel.SelectedValue.ToString(), out channel);
                        Enum.TryParse <MCP3424.AdcSize>(comboBoxSize.SelectedValue.ToString(), out size);
                        Enum.TryParse <MCP3424.AdcPga>(comboBoxGain.SelectedValue.ToString(), out pga);
                    }
                    catch (Exception ex)
                    {
                        string error = ex.Message;
                    }

                    AdcBackgroundWorkerArgs args = new AdcBackgroundWorkerArgs(mode, channel, size, pga);
                    _backgroundWorkerAdc.RunWorkerAsync(args);
                }
                else
                {
                    checkBoxReadVoltage.Text = "Start";
                    comboBoxAdcMode.Enabled  = true;
                    comboBoxChannel.Enabled  = true;
                    comboBoxSize.Enabled     = true;
                    comboBoxGain.Enabled     = true;

                    if (_backgroundWorkerAdc != null && _backgroundWorkerAdc.IsBusy)
                    {
                        _backgroundWorkerAdc.CancelAsync();
                    }

                    Thread.Sleep(1000);
                }
            }
        }
Beispiel #2
0
        private void BackgroundWorkerAdcDoWork(object sender, DoWorkEventArgs e)
        {
            var adc = new ere_I2C_AI418ML(_usbI2C, _ere_I2C_AI418ML_address);

            UsbI2C.StatusResults    statusResults = new UsbI2C.StatusResults();
            AdcBackgroundWorkerArgs args          = e.Argument as AdcBackgroundWorkerArgs;

            while (true)
            {
                uint   reading = 0;
                double voltage = 0.0;
                double current = 0.0;
                ReportAdcProgressWithStatus adcProgress = new ReportAdcProgressWithStatus(args.Mode, reading, voltage, current, statusResults);

                switch (args.Mode)
                {
                case AdcMode.Raw:
                    statusResults       = adc.ReadAdc(args.Channel, args.Size, args.Pga, out reading);
                    adcProgress.Reading = reading;
                    break;

                case AdcMode.Voltage:
                    statusResults       = adc.ReadVoltage(args.Channel, args.Size, args.Pga, out voltage);
                    adcProgress.Voltage = voltage;
                    break;

                case AdcMode.Current:
                    statusResults       = adc.ReadCurrent(args.Channel, args.Size, args.Pga, out voltage);
                    adcProgress.Voltage = voltage;
                    break;
                }

                _backgroundWorkerAdc.ReportProgress(0, adcProgress);

                Thread.Sleep(100);

                if (statusResults.HasErrors() || _backgroundWorkerAdc.CancellationPending)
                {
                    e.Cancel = true;
                    return;
                }
            }
        }