Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Windows.Forms;
- using System.IO.Ports;
- using System.Threading;
- namespace LAB_Radiation
- {
- public partial class Form1 : Form
- {
- private SerialPort myPort; //port 1
- private SerialPort myPort2; // port 2
- private int degreeToInt;
- private int degreeToInt2;
- private int previousDegree;
- private int previousDegree2;
- private int indataInt;
- private int indataInt2;
- int runCounter = 0;
- delegate void SetTextCallback(string text);
- delegate void dataToGrid(int deg, int de2, int ampl, int seq);
- public Form1()
- {
- InitializeComponent();
- init();
- }
- private void init()
- {
- //oppsett for seriel kommunikasjon for port 1, kommuniserer med arduino 1
- myPort = new SerialPort();
- myPort.BaudRate = 9600;
- myPort.PortName = "COM3";
- myPort.Parity = Parity.None;
- myPort.StopBits = StopBits.One;
- myPort.DataBits = 8;
- myPort.Handshake = Handshake.None;
- myPort.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);
- myPort.Open();
- //tømmer port 1
- myPort.DiscardOutBuffer();
- myPort.DiscardInBuffer();
- //oppsett for seriel kommunikasjonen for port 2, kommuniserer med arduino 2
- myPort2 = new SerialPort();
- myPort2.BaudRate = 9600;
- myPort2.PortName = "COM5";
- myPort2.Parity = Parity.None;
- myPort2.StopBits = StopBits.One;
- myPort2.DataBits = 8;
- myPort2.Handshake = Handshake.None;
- myPort2.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler2);
- myPort2.Open();
- //tømmer port 2
- myPort2.DiscardOutBuffer();
- myPort2.DiscardInBuffer();
- }
- private void sendDegree_btn_Click(object sender, EventArgs e)
- {
- //når start trykkes leses verdi for intervallet til disk 1 fra combobox 1
- //sender intervallet til arduino 1
- //intervallet blir konvertert til en int
- string valueString = "Start disk 1 and 2 button clicked";
- Console.WriteLine(valueString);
- Console.WriteLine("Value from combobox 1: "+interval_Cbo.Text);
- myPort.Write(interval_Cbo.Text);
- degreeToInt = Convert.ToInt32(interval_Cbo.Text);
- Console.WriteLine("Value from combobox 1 converted to int: "+degreeToInt+"n");
- previousDegree = degreeToInt;
- Console.WriteLine("interval sent to serial port 1: "+interval_Cbo.Text+"n");
- if(myPort.ReadExisting() != null)
- {
- Thread.Sleep(1000);
- //når start trykkes leses verdi for intervallet til disk 2 fra combobox 2
- //sender intervallet til arduino 2
- //intervallet blir konvertert til en int
- Console.WriteLine("Value from comboboc 2: " + interval_Cbo2.Text);
- Thread.Sleep(500);
- myPort2.Write(interval_Cbo2.Text);
- degreeToInt2 = Convert.ToInt32(interval_Cbo2.Text);
- Console.WriteLine("Value from combobox 2 converted to int: " + degreeToInt2 + "n");
- previousDegree2 = degreeToInt2;
- Console.WriteLine("interval sent to serial port 2: " + interval_Cbo2.Text+"n");
- }
- }
- private void setText(string text)
- {
- if (this.txt_Status.InvokeRequired)
- {
- SetTextCallback d = new SetTextCallback(setText);
- this.Invoke(d, new object[] { text });
- }
- else
- {
- int intDegree = Convert.ToInt32(text);
- int currentDegree = 0;
- currentDegree += intDegree;
- string degreeToApp = Convert.ToString(currentDegree);
- txt_Status.Text = degreeToApp; // setter "status" for disk 1 til nåværende verdi(grader)
- }
- }
- private void setText2(string text)
- {
- if (this.txt_Status2.InvokeRequired)
- {
- SetTextCallback x = new SetTextCallback(setText2);
- this.Invoke(x, new object[] { text });
- }
- else
- {
- int intDegree2 = Convert.ToInt32(text);
- int currentDegree2 = 0;
- currentDegree2 += intDegree2;
- string degreeToApp2 = Convert.ToString(currentDegree2);
- txt_Status2.Text = degreeToApp2; // setter "status" for disk 2 til nåværende verdi(grader)
- }
- }
- //----------------------------------------------------------------------------------------------------------------
- //metode for threading av data fra og til port 1
- private void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
- {
- runCounter++; //lister antatt interaksjoner
- SerialPort myPort = (SerialPort)sender;
- Thread.Sleep(100);
- string indata = myPort.ReadExisting();
- indataInt = Convert.ToInt32(indata);
- Console.WriteLine("Data Received from port 1: " + indata + "n");
- setText(indata);
- var dataToGrid = new dataToGrid(adddataToGrid);
- dataGridView.Invoke(dataToGrid, indataInt, indataInt2, 1, runCounter); //leser verdiene til datagrid
- if (indataInt2 >= 360)
- {
- //1
- if ((runCounter == 0) || (previousDegree == indataInt && indataInt < 360)) //disk 1 roterer i gitt intervall etter betingelsene
- {
- indataInt += degreeToInt;
- previousDegree = indataInt;
- Thread.Sleep(200);
- Console.WriteLine("sender verdi for indataInt til port 1: "+indataInt);
- myPort.Write(Convert.ToString(indataInt)); //sender intervallet kontinuerlig til arduino 1 med en gitt delay
- }
- else if (indataInt >= 360) //disk 1 nullstilles hvis intervaller >= 360 grader
- {
- runCounter = 0;
- indataInt = 0;
- Console.WriteLine("Table 1 stoppet på 0 grader. Klar for neste intervall.");
- }
- }
- }
- //-----------------------------------------------------------------------------------------------------------------------
- //metode for threading av data fra og til port 2
- private void DataReceivedHandler2(object sender, SerialDataReceivedEventArgs e)
- {
- runCounter++; //lister antatt interaksjoner
- SerialPort myPort2 = (SerialPort)sender;
- Thread.Sleep(100);
- string indata2 = myPort2.ReadExisting();
- indataInt2 = Convert.ToInt32(indata2);
- Console.WriteLine("Data Received from port 2: " + indata2 + "n");
- setText2(indata2);
- var dataToGrid = new dataToGrid(adddataToGrid);
- dataGridView.Invoke(dataToGrid, indataInt, indataInt2, 1, runCounter); //leser verdiene til datagrid
- //2
- if (previousDegree2 == indataInt2 && indataInt2 < 360) //disk 2 roterer i gitt intervall etter betingelsene
- {
- indataInt2 += degreeToInt2;
- previousDegree2 = indataInt2;
- Thread.Sleep(200);
- Console.WriteLine("sender verdi for indataInt2 til port 2: " + indataInt2);
- myPort2.Write(Convert.ToString(indataInt2)); //sender intervallet kontinuerlig til arduino 2 med en gitt delay
- }
- else if (indataInt2 >= 360) //disk 2 nullstilles hvis intervaller >= 360 grader
- {
- //3
- if (previousDegree == indataInt && indataInt < 360) //disk 1 roterer i gitt intervall etter betingelsene
- {
- indataInt += degreeToInt;
- previousDegree = indataInt;
- Thread.Sleep(200);
- Console.WriteLine("sender verdi for indataInt til port 1: " + indataInt);
- myPort.Write(Convert.ToString(indataInt)); //sender intervallet kontinuerlig til arduino 1 med en gitt delay
- }
- indataInt2 = 0;
- //4
- Console.WriteLine("Table 2 stoppet på 0 grader. Klar for neste intervall. Venter til disk 1 er ferdig med å kjøre.");
- if ((previousDegree2 == indataInt2 && indataInt2 <= 360) || indataInt2 == 0) //disk 2 roterer i gitt intervall etter betingelsene
- {
- indataInt2 += degreeToInt2;
- previousDegree2 = indataInt2;
- Thread.Sleep(200);
- Console.WriteLine("sender verdi for indataInt2 til port 2: " + indataInt2);
- myPort2.Write(Convert.ToString(indataInt2)); //sender intervallet kontinuerlig til arduino 2 med en gitt delay
- }
- }
- }
- //----------------------------------------------------------------------------------------------------------------------
- private void adddataToGrid(int deg, int deg2, int ampl, int seq) // metode for å sette datagrid
- {
- int row = 0;
- dataGridView.Rows.Add();
- row = dataGridView.Rows.Count - 2;
- dataGridView["LIST", row].Value = seq;
- dataGridView["Degree", row].Value = deg;
- dataGridView["Degree2", row].Value = deg2;
- dataGridView["Ampl", row].Value = ampl;
- }
- //metode for å sende datagrid til et excel dokument
- private void export_Btn_Click(object sender, EventArgs e)
- {
- saveFileDialog.InitialDirectory = "C";
- saveFileDialog.Title = "Save as excel file";
- saveFileDialog.FileName = "";
- saveFileDialog.Filter = "Excel Files(2016)|*.xls";
- if(saveFileDialog.ShowDialog() != DialogResult.Cancel)
- {
- Microsoft.Office.Interop.Excel.Application ExcelApp = new Microsoft.Office.Interop.Excel.Application();
- ExcelApp.Application.Workbooks.Add(Type.Missing);
- //endrer på instilling for workbook
- ExcelApp.Columns.ColumnWidth = 20;
- //header
- for(int i = 1; i < dataGridView.Columns.Count + 1; i++)
- {
- ExcelApp.Cells[1, i] = dataGridView.Columns[i - 1].HeaderText;
- }
- //storing each row and column value for excel sheet
- for(int i = 0; i < dataGridView.Rows.Count; i++)
- {
- for(int j = 0; j < dataGridView.Columns.Count; j++)
- {
- if(dataGridView.Rows[i].Cells[j].Value != null)
- {
- ExcelApp.Cells[i + 2, j + 1] = dataGridView.Rows[i].Cells[j].Value.ToString();
- }
- }
- }
- ExcelApp.ActiveWorkbook.SaveCopyAs(saveFileDialog.FileName.ToString());
- ExcelApp.ActiveWorkbook.Saved = true;
- ExcelApp.Quit();
- }
- }
- //metode for å tømme datagrid
- private void Clear_Btn_Click(object sender, EventArgs e)
- {
- dataGridView.Rows.Clear();
- }
- }
- }
Add Comment
Please, Sign In to add comment