private void SuccessCallback(byte[] b)
        {
            Invoke((MethodInvoker) delegate
            {
                ByteArrayDecoderClass decoder = new ByteArrayDecoderClass(b);

                decoder.Get2BytesAsInt(); // Ignore first 2 values (message length)
                                          // Get raw value and convert to human readable values, with and without gain
                var rawValue = decoder.Get2BytesAsInt16();
                float fValue = SupercapHelperClass.ConvertToFloatInMiliVolts(rawValue);
                float givenValue;
                if (!float.TryParse(textBoxFixedVoltage.Text, out givenValue))
                {
                    FormCustomConsole.WriteLineWithConsole("Wrong float value for calibration!");
                    return;
                }
                // Add to list
                var calPt = new CalibratePoint(rawValue, fValue, givenValue);
                calibValues.Add(calPt);
                numberOfSamples++;
                // Append to display
                AppendToDisplay(calPt);
                // Calculate average
                CalculateAverage();
            }
                   );
        }
Exemple #2
0
        private void buttonCalculate_Click(object sender, EventArgs e)
        {
            // Parse gain from textbox and include it when calculating real values
            float gainCH;

            try
            {
                gainCH = float.Parse(textBoxGain.Text);
            }
            catch (Exception)
            {
                MessageBox.Show("Enter valid float number for gain");
                return;
            }

            // First clear all graphs and dataGrids
            dataGridView1.DataSource = null;
            dataGridView1.Rows.Clear();
            chart1.Series["mV"].Points.Clear();

            // Calculate dual channel graph and fill its dataGrid values
            for (int i = 0; i < values.Length; i++)
            {
                dataGridView1.Rows.Add();
                dataGridView1.Rows[i].Cells[0].Value = i + 1; // Index
                //// Represent in mV
                //float fValue = (tmpFloat * 3300) / 32768;
                float fValueGain = SupercapHelperClass.ConvertToFloatInMiliVolts(values[i], gainCH);
                dataGridView1.Rows[i].Cells[1].Value = values[i].ToString();                                                // Raw
                dataGridView1.Rows[i].Cells[2].Value = SupercapHelperClass.ConvertToFloatInMiliVolts(values[i]).ToString(); // float
                dataGridView1.Rows[i].Cells[3].Value = fValueGain.ToString();                                               // float with gain
                chart1.Series["mV"].Points.AddXY(i, fValueGain);
            }
        }
        private void SuccessCallback(byte[] obj)
        {
            FormCustomConsole.WriteLineWithConsole("COMMANDS SENT SUCCESSFULLY TO DEVICE:" + ConfigClass.deviceAddr + "!!!");
            this.Invoke((MethodInvoker) delegate
            {
                //ChangeColorOnDatagrid(ConfigClass.deviceAddr, System.Drawing.Color.Green);
                // Calculate result
                ByteArrayDecoderClass decoder = new ByteArrayDecoderClass(obj);

                decoder.Get2BytesAsInt(); // Ignore first 2 values (message length)
                                          // Get raw value and convert to human readable values, with and without gain
                var rawValue     = decoder.Get2BytesAsInt16();
                float fValueGain = SupercapHelperClass.ConvertToFloatInMiliVolts(rawValue, ConfigClass.deviceGainCH1);

                if (index < deviceList.Count) // Prevent stupid things
                {
                    dataGridView1.Rows[index - 1].Cells[dataGridView1.Columns.Count - 1].Value = fValueGain;
                    GetVoltage(deviceList[index++], 10);
                }
                else
                {
                    busy = false;
                    dataGridView1.Rows[index - 1].Cells[dataGridView1.Columns.Count - 1].Value = fValueGain;
                    labelStatus.Text      = "Ready";
                    labelStatus.ForeColor = Color.Green;
                    FormCustomConsole.WriteLineWithConsole("\r\n------------------All commands sent!!! ---------------\r\n");
                    //NotifyEnd();
                }
            }
                        );
        }
        //DialogResult dialogResult = MessageBox.Show("Save as: " + filename, "Save File", MessageBoxButtons.YesNo);
        //if (dialogResult == DialogResult.Yes)
        //{
        //    //do something
        //    string path = AppDomain.CurrentDomain.BaseDirectory + filename;
        //    using (StreamWriter sw = new StreamWriter(File.Create(path)))
        //    {
        //        try
        //        {
        //            sw.Write(sb.ToString());
        //        }
        //        catch (Exception ex)
        //        {
        //            MessageBox.Show(ex.Message);
        //        }
        //    }

        //}
        //else if (dialogResult == DialogResult.No)
        //{
        //    //You dont want to save data :(
        //}



        public static void SaveRaw(MeasurementHeaderClass head, int[] values, int ch)
        {
            StringBuilder sb = new StringBuilder();

            // Infer channel gain
            float chGain;

            if (ch == 0)
            {
                chGain = ConfigClass.deviceGainCH0;
            }
            else if (ch == 1)
            {
                chGain = ConfigClass.deviceGainCH1;
            }
            else
            {
                MessageBox.Show("Channel gain error");
                return;
            }


            foreach (var item in values)
            {
                sb.Append(SupercapHelperClass.ConvertToFloatInMiliVolts(item, chGain).ToString() + ",");
            }
            // Remove last ','
            sb.Remove(sb.Length - 1, 1);

            // Create file name

            string filename = "J00_" + SupercapHelperClass.ConvertChannelToSymbolicString(ch) + "_";

            SaveFileDialog saveFileDialog1 = new SaveFileDialog();

            saveFileDialog1.Filter           = "CSV files |*.csv";
            saveFileDialog1.RestoreDirectory = true;     // Remember where we saved last file
            saveFileDialog1.FileName         = filename; // Default name

            if (saveFileDialog1.ShowDialog() == DialogResult.OK)
            {
                using (StreamWriter sw = new StreamWriter(File.Create(saveFileDialog1.FileName)))
                {
                    try
                    {
                        sw.Write(sb.ToString());
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.Message);
                    }
                }
            }
        }
Exemple #5
0
        /// <summary>
        /// Data is downloaded, extract raw values from data packet
        /// </summary>
        /// <param name="raw"></param>
        public FormMeasurementSingleChannelPresenter(byte[] raw)
        {
            InitializeComponent();



            ByteArrayDecoderClass dec = new ByteArrayDecoderClass(raw);
            // Extract data len without header
            int dataLen = (dec.Get2BytesAsInt() - ConfigClass.HEADER_LENGTH) / 2;

            // Remove header from data packet
            selectedHeader               = new MeasurementHeaderClass(0); // Dummy address
            selectedHeader.timestamp     = dec.Get6BytesAsTimestamp();
            selectedHeader.prescaler     = dec.Get4BytesAsInt();
            selectedHeader.numOfPoints   = dec.Get2BytesAsInt();
            selectedHeader.operatingMode = dec.Get1ByteAsInt();
            selectedHeader.channel       = dec.Get1ByteAsInt();

            // Set default gain in textbox from configuration
            if (selectedHeader.channel == 0)
            {
                textBoxGain.Text = ConfigClass.deviceGainCH0.ToString();
            }
            else if (selectedHeader.channel == 1)
            {
                textBoxGain.Text = ConfigClass.deviceGainCH1.ToString();
            }
            else
            {
                throw new Exception("Invalid channel value in FormMeasurementSingleChannelPresenter");
            }



            // Form timestamp string
            string time = (selectedHeader.timestamp[0] + 2000).ToString() + "/" + selectedHeader.timestamp[1].ToString() + "/" +
                          selectedHeader.timestamp[2].ToString() + " " +
                          selectedHeader.timestamp[3].ToString() + ":" + selectedHeader.timestamp[4].ToString() + ":" + selectedHeader.timestamp[5].ToString();
            string channel = SupercapHelperClass.ConvertChannelToSymbolicString(selectedHeader.channel);

            // Change name of this form
            this.Text = channel + "  " + time;


            values = new int[dataLen];
            //int value = dec.Get2BytesAsInt16();

            for (int i = 0; i < dataLen; i++)
            {
                values[i] = dec.Get2BytesAsInt16();
            }
        }
        private void buttonCalculate_Click(object sender, EventArgs e)
        {
            float gainCH0, gainCH1;

            try
            {
                string fvalueCh0 = textBoxGainCH0.Text;
                string fvalueCh1 = textBoxGainCH1.Text;
                gainCH0 = float.Parse(fvalueCh0);
                gainCH1 = float.Parse(fvalueCh1);
            }
            catch (Exception)
            {
                MessageBox.Show("Enter valid float number for gain");
                return;
            }

            // First clear all graphs and dataGrids
            // Datagrid 1
            dataGridViewCH0.DataSource = null;
            dataGridViewCH0.Rows.Clear();
            chartCH0.Series["mV"].Points.Clear();
            // Datagrid 2
            dataGridViewCH1.DataSource = null;
            dataGridViewCH1.Rows.Clear();
            chartCH1.Series["mV"].Points.Clear();

            // Calculate CH0 channel graph and fill its dataGrid values
            for (int i = 0; i < valuesCH0.Length; i++)
            {
                dataGridViewCH0.Rows.Add();
                dataGridViewCH0.Rows[i].Cells[0].Value = i + 1;                                                                  // Index
                float fValueGain = SupercapHelperClass.ConvertToFloatInMiliVolts(valuesCH0[i], gainCH0);
                dataGridViewCH0.Rows[i].Cells[1].Value = valuesCH0[i].ToString();                                                // Raw
                dataGridViewCH0.Rows[i].Cells[2].Value = SupercapHelperClass.ConvertToFloatInMiliVolts(valuesCH0[i]).ToString(); // float
                dataGridViewCH0.Rows[i].Cells[3].Value = fValueGain.ToString();                                                  // float with gain
                chartCH0.Series["mV"].Points.AddXY(i, fValueGain);
            }

            // Calculate CH1 channel graph and fill its dataGrid values
            for (int i = 0; i < valuesCH1.Length; i++)
            {
                dataGridViewCH1.Rows.Add();
                dataGridViewCH1.Rows[i].Cells[0].Value = i + 1;                                                                  // Index
                float fValueGain = SupercapHelperClass.ConvertToFloatInMiliVolts(valuesCH1[i], gainCH1);
                dataGridViewCH1.Rows[i].Cells[1].Value = valuesCH1[i].ToString();                                                // Raw
                dataGridViewCH1.Rows[i].Cells[2].Value = SupercapHelperClass.ConvertToFloatInMiliVolts(valuesCH1[i]).ToString(); // float
                dataGridViewCH1.Rows[i].Cells[3].Value = fValueGain.ToString();                                                  // float with gain
                chartCH1.Series["mV"].Points.AddXY(i, fValueGain);
            }
        }
Exemple #7
0
        void GetADCResultCallbackCH1(byte[] b)
        {
            ByteArrayDecoderClass decoder = new ByteArrayDecoderClass(b);

            decoder.Get2BytesAsInt(); // Ignore first 2 values (message length)
            // Get raw value and convert to human readable values, with and without gain
            var   rawValue   = decoder.Get2BytesAsInt16();
            float fValueGain = SupercapHelperClass.ConvertToFloatInMiliVolts(rawValue, ConfigClass.deviceGainCH1);
            float fValue     = SupercapHelperClass.ConvertToFloatInMiliVolts(rawValue);
            // Show them in separate thread so you dont block current
            Thread t = new Thread(() =>
            {
                string s = "Raw ADC: " + rawValue + "\r\nValue in mV: " + fValue + "\r\nValue in mV with gain: " + fValueGain;
                MessageBox.Show(s, DateTime.Now.ToString());
            });

            t.IsBackground = true;
            t.Start();
        }
        public static void Save(int[] values, int ch, string path, string delimiter)
        {
            StringBuilder sb = new StringBuilder();

            // Infer channel gain
            float chGain;

            if (ch == 0)
            {
                chGain = ConfigClass.deviceGainCH0;
            }
            else if (ch == 1)
            {
                chGain = ConfigClass.deviceGainCH1;
            }
            else
            {
                MessageBox.Show("Channel gain error");
                return;
            }

            foreach (var item in values)
            {
                sb.Append(SupercapHelperClass.ConvertToFloatInMiliVolts(item, chGain).ToString() + delimiter);
            }
            // Remove last delimiter
            sb.Remove(sb.Length - delimiter.Length, delimiter.Length);

            using (StreamWriter sw = new StreamWriter(File.Create(path)))
            {
                try
                {
                    sw.Write(sb.ToString());
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }
        }
        public FormMeasurementDualChannelPresenter(byte[] raw)
        {
            InitializeComponent();
            ByteArrayDecoderClass dec = new ByteArrayDecoderClass(raw);
            // Extract data len without header (2 measurements are stored in raw thats why / 4)
            int dataLen = (dec.Get2BytesAsInt() - ConfigClass.HEADER_LENGTH) / 4;

            // Remove header from data packet
            selectedHeader               = new MeasurementHeaderClass(0); // Dummy address
            selectedHeader.timestamp     = dec.Get6BytesAsTimestamp();
            selectedHeader.prescaler     = dec.Get4BytesAsInt();
            selectedHeader.numOfPoints   = dec.Get2BytesAsInt();
            selectedHeader.operatingMode = dec.Get1ByteAsInt();
            selectedHeader.channel       = dec.Get1ByteAsInt();

            // Set gain textboxes default values from config class
            textBoxGainCH0.Text = ConfigClass.deviceGainCH0.ToString();
            textBoxGainCH1.Text = ConfigClass.deviceGainCH1.ToString();

            // Form timestamp string
            string time = (selectedHeader.timestamp[0] + 2000).ToString() + "/" + selectedHeader.timestamp[1].ToString() + "/" +
                          selectedHeader.timestamp[2].ToString() + " " + selectedHeader.timestamp[3].ToString() + ":" +
                          selectedHeader.timestamp[4].ToString() + ":" + selectedHeader.timestamp[5].ToString();
            string channel = SupercapHelperClass.ConvertChannelToSymbolicString(selectedHeader.channel);

            // Change name of this form
            this.Text = channel + "  " + time;


            valuesCH0 = new int[dataLen];
            valuesCH1 = new int[dataLen];

            for (int i = 0; i < dataLen; i++)
            {
                valuesCH0[i] = dec.Get2BytesAsInt16();
                valuesCH1[i] = dec.Get2BytesAsInt16();
            }
        }
        /// <summary>
        /// Save measurements in CSV file, named by dev address, date, channel etc... Gain from config file will be included
        /// </summary>
        /// <param name="head"></param>
        /// <param name="values"></param>
        /// <param name="ch"></param>
        public static void Save(MeasurementHeaderClass head, int[] values, int ch)
        {
            // Infer channel gain
            float chGain;

            if (ch == 0)
            {
                chGain = ConfigClass.deviceGainCH0;
            }
            else if (ch == 1)
            {
                chGain = ConfigClass.deviceGainCH1;
            }
            else
            {
                MessageBox.Show("Channel gain error");
                return;
            }

            // First convert to desired format
            StringBuilder sb = new StringBuilder();

            sb.Append("Device Addess: " + ConfigClass.deviceAddr + "\r\n");
            sb.Append("Channel: " + ch + "\r\n");
            sb.Append("Included gain value: " + chGain.ToString() + "\r\n");
            sb.Append("Prescaler: " + head.prescaler + "\r\n");
            sb.Append("Number of data points: " + head.numOfPoints + "\r\n");
            sb.Append("Start:\r\n");

            foreach (var item in values)
            {
                sb.Append(SupercapHelperClass.ConvertToFloatInMiliVolts(item, chGain).ToString() + ",");
            }
            // Remove last ','
            sb.Remove(sb.Length - 1, 1);

            // Create file name
            string time = (head.timestamp[0] + 2000).ToString() + "_" + head.timestamp[1].ToString() + "_" + head.timestamp[2].ToString() + "_" +
                          head.timestamp[3].ToString() + "_" + head.timestamp[4].ToString() + "_" + head.timestamp[5].ToString();
            string filename = "dev" + ConfigClass.deviceAddr + "_" + time + "_" + SupercapHelperClass.ConvertChannelToSymbolicString(ch);



            SaveFileDialog saveFileDialog1 = new SaveFileDialog();

            saveFileDialog1.Filter           = "CSV files |*.csv";
            saveFileDialog1.RestoreDirectory = true;     // Remember where we saved last file
            saveFileDialog1.FileName         = filename; // Default name

            if (saveFileDialog1.ShowDialog() == DialogResult.OK)
            {
                //if ((myStream = saveFileDialog1.OpenFile()) != null)
                //{
                //    // Code to write the stream goes here.
                //    myStream.Close();
                //}
                using (StreamWriter sw = new StreamWriter(File.Create(saveFileDialog1.FileName)))
                {
                    try
                    {
                        sw.Write(sb.ToString());
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.Message);
                    }
                }
            }
        }