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(); } ); }
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); } } } }
/// <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); } }
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); } } } }