Guest User

Untitled

a guest
Dec 11th, 2018
216
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.40 KB | None | 0 0
  1. using System;
  2. using System.Windows.Forms;
  3. using System.IO.Ports;
  4. using System.Threading;
  5.  
  6.  
  7.  
  8. namespace LAB_Radiation
  9.  
  10. {
  11. public partial class Form1 : Form
  12. {
  13. private SerialPort myPort; //port 1
  14. private SerialPort myPort2; // port 2
  15. private int degreeToInt;
  16. private int degreeToInt2;
  17. private int previousDegree;
  18. private int previousDegree2;
  19. private int indataInt;
  20. private int indataInt2;
  21. int runCounter = 0;
  22.  
  23. delegate void SetTextCallback(string text);
  24. delegate void dataToGrid(int deg, int de2, int ampl, int seq);
  25. public Form1()
  26. {
  27. InitializeComponent();
  28. init();
  29. }
  30.  
  31. private void init()
  32. {
  33. //oppsett for seriel kommunikasjon for port 1, kommuniserer med arduino 1
  34. myPort = new SerialPort();
  35. myPort.BaudRate = 9600;
  36. myPort.PortName = "COM3";
  37. myPort.Parity = Parity.None;
  38. myPort.StopBits = StopBits.One;
  39. myPort.DataBits = 8;
  40. myPort.Handshake = Handshake.None;
  41. myPort.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);
  42. myPort.Open();
  43. //tømmer port 1
  44. myPort.DiscardOutBuffer();
  45. myPort.DiscardInBuffer();
  46.  
  47. //oppsett for seriel kommunikasjonen for port 2, kommuniserer med arduino 2
  48. myPort2 = new SerialPort();
  49. myPort2.BaudRate = 9600;
  50. myPort2.PortName = "COM5";
  51. myPort2.Parity = Parity.None;
  52. myPort2.StopBits = StopBits.One;
  53. myPort2.DataBits = 8;
  54. myPort2.Handshake = Handshake.None;
  55. myPort2.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler2);
  56. myPort2.Open();
  57. //tømmer port 2
  58. myPort2.DiscardOutBuffer();
  59. myPort2.DiscardInBuffer();
  60.  
  61. }
  62.  
  63. private void sendDegree_btn_Click(object sender, EventArgs e)
  64. {
  65. //når start trykkes leses verdi for intervallet til disk 1 fra combobox 1
  66. //sender intervallet til arduino 1
  67. //intervallet blir konvertert til en int
  68. string valueString = "Start disk 1 and 2 button clicked";
  69. Console.WriteLine(valueString);
  70. Console.WriteLine("Value from combobox 1: "+interval_Cbo.Text);
  71. myPort.Write(interval_Cbo.Text);
  72. degreeToInt = Convert.ToInt32(interval_Cbo.Text);
  73. Console.WriteLine("Value from combobox 1 converted to int: "+degreeToInt+"n");
  74. previousDegree = degreeToInt;
  75. Console.WriteLine("interval sent to serial port 1: "+interval_Cbo.Text+"n");
  76.  
  77. if(myPort.ReadExisting() != null)
  78. {
  79. Thread.Sleep(1000);
  80. //når start trykkes leses verdi for intervallet til disk 2 fra combobox 2
  81. //sender intervallet til arduino 2
  82. //intervallet blir konvertert til en int
  83. Console.WriteLine("Value from comboboc 2: " + interval_Cbo2.Text);
  84. Thread.Sleep(500);
  85. myPort2.Write(interval_Cbo2.Text);
  86. degreeToInt2 = Convert.ToInt32(interval_Cbo2.Text);
  87. Console.WriteLine("Value from combobox 2 converted to int: " + degreeToInt2 + "n");
  88. previousDegree2 = degreeToInt2;
  89. Console.WriteLine("interval sent to serial port 2: " + interval_Cbo2.Text+"n");
  90. }
  91.  
  92. }
  93.  
  94.  
  95. private void setText(string text)
  96. {
  97. if (this.txt_Status.InvokeRequired)
  98. {
  99. SetTextCallback d = new SetTextCallback(setText);
  100. this.Invoke(d, new object[] { text });
  101. }
  102. else
  103. {
  104. int intDegree = Convert.ToInt32(text);
  105. int currentDegree = 0;
  106. currentDegree += intDegree;
  107. string degreeToApp = Convert.ToString(currentDegree);
  108. txt_Status.Text = degreeToApp; // setter "status" for disk 1 til nåværende verdi(grader)
  109. }
  110. }
  111.  
  112. private void setText2(string text)
  113. {
  114. if (this.txt_Status2.InvokeRequired)
  115. {
  116. SetTextCallback x = new SetTextCallback(setText2);
  117. this.Invoke(x, new object[] { text });
  118. }
  119. else
  120. {
  121. int intDegree2 = Convert.ToInt32(text);
  122. int currentDegree2 = 0;
  123. currentDegree2 += intDegree2;
  124. string degreeToApp2 = Convert.ToString(currentDegree2);
  125. txt_Status2.Text = degreeToApp2; // setter "status" for disk 2 til nåværende verdi(grader)
  126. }
  127. }
  128.  
  129. //----------------------------------------------------------------------------------------------------------------
  130. //metode for threading av data fra og til port 1
  131. private void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
  132. {
  133. runCounter++; //lister antatt interaksjoner
  134. SerialPort myPort = (SerialPort)sender;
  135. Thread.Sleep(100);
  136. string indata = myPort.ReadExisting();
  137. indataInt = Convert.ToInt32(indata);
  138. Console.WriteLine("Data Received from port 1: " + indata + "n");
  139. setText(indata);
  140.  
  141. var dataToGrid = new dataToGrid(adddataToGrid);
  142. dataGridView.Invoke(dataToGrid, indataInt, indataInt2, 1, runCounter); //leser verdiene til datagrid
  143.  
  144.  
  145. if (indataInt2 >= 360)
  146. {
  147. //1
  148. if ((runCounter == 0) || (previousDegree == indataInt && indataInt < 360)) //disk 1 roterer i gitt intervall etter betingelsene
  149. {
  150. indataInt += degreeToInt;
  151. previousDegree = indataInt;
  152.  
  153. Thread.Sleep(200);
  154. Console.WriteLine("sender verdi for indataInt til port 1: "+indataInt);
  155. myPort.Write(Convert.ToString(indataInt)); //sender intervallet kontinuerlig til arduino 1 med en gitt delay
  156. }
  157.  
  158. else if (indataInt >= 360) //disk 1 nullstilles hvis intervaller >= 360 grader
  159. {
  160. runCounter = 0;
  161. indataInt = 0;
  162. Console.WriteLine("Table 1 stoppet på 0 grader. Klar for neste intervall.");
  163. }
  164. }
  165.  
  166. }
  167.  
  168.  
  169. //-----------------------------------------------------------------------------------------------------------------------
  170.  
  171. //metode for threading av data fra og til port 2
  172. private void DataReceivedHandler2(object sender, SerialDataReceivedEventArgs e)
  173. {
  174. runCounter++; //lister antatt interaksjoner
  175. SerialPort myPort2 = (SerialPort)sender;
  176. Thread.Sleep(100);
  177. string indata2 = myPort2.ReadExisting();
  178. indataInt2 = Convert.ToInt32(indata2);
  179. Console.WriteLine("Data Received from port 2: " + indata2 + "n");
  180. setText2(indata2);
  181.  
  182. var dataToGrid = new dataToGrid(adddataToGrid);
  183. dataGridView.Invoke(dataToGrid, indataInt, indataInt2, 1, runCounter); //leser verdiene til datagrid
  184.  
  185.  
  186. //2
  187. if (previousDegree2 == indataInt2 && indataInt2 < 360) //disk 2 roterer i gitt intervall etter betingelsene
  188. {
  189. indataInt2 += degreeToInt2;
  190. previousDegree2 = indataInt2;
  191.  
  192. Thread.Sleep(200);
  193. Console.WriteLine("sender verdi for indataInt2 til port 2: " + indataInt2);
  194. myPort2.Write(Convert.ToString(indataInt2)); //sender intervallet kontinuerlig til arduino 2 med en gitt delay
  195. }
  196. else if (indataInt2 >= 360) //disk 2 nullstilles hvis intervaller >= 360 grader
  197. {
  198. //3
  199. if (previousDegree == indataInt && indataInt < 360) //disk 1 roterer i gitt intervall etter betingelsene
  200. {
  201. indataInt += degreeToInt;
  202. previousDegree = indataInt;
  203.  
  204. Thread.Sleep(200);
  205. Console.WriteLine("sender verdi for indataInt til port 1: " + indataInt);
  206. myPort.Write(Convert.ToString(indataInt)); //sender intervallet kontinuerlig til arduino 1 med en gitt delay
  207. }
  208.  
  209. indataInt2 = 0;
  210. //4
  211. Console.WriteLine("Table 2 stoppet på 0 grader. Klar for neste intervall. Venter til disk 1 er ferdig med å kjøre.");
  212.  
  213. if ((previousDegree2 == indataInt2 && indataInt2 <= 360) || indataInt2 == 0) //disk 2 roterer i gitt intervall etter betingelsene
  214. {
  215. indataInt2 += degreeToInt2;
  216. previousDegree2 = indataInt2;
  217.  
  218. Thread.Sleep(200);
  219. Console.WriteLine("sender verdi for indataInt2 til port 2: " + indataInt2);
  220. myPort2.Write(Convert.ToString(indataInt2)); //sender intervallet kontinuerlig til arduino 2 med en gitt delay
  221. }
  222.  
  223.  
  224. }
  225. }
  226. //----------------------------------------------------------------------------------------------------------------------
  227.  
  228.  
  229.  
  230. private void adddataToGrid(int deg, int deg2, int ampl, int seq) // metode for å sette datagrid
  231. {
  232.  
  233. int row = 0;
  234. dataGridView.Rows.Add();
  235. row = dataGridView.Rows.Count - 2;
  236. dataGridView["LIST", row].Value = seq;
  237. dataGridView["Degree", row].Value = deg;
  238. dataGridView["Degree2", row].Value = deg2;
  239. dataGridView["Ampl", row].Value = ampl;
  240.  
  241. }
  242.  
  243.  
  244. //metode for å sende datagrid til et excel dokument
  245. private void export_Btn_Click(object sender, EventArgs e)
  246. {
  247. saveFileDialog.InitialDirectory = "C";
  248. saveFileDialog.Title = "Save as excel file";
  249. saveFileDialog.FileName = "";
  250. saveFileDialog.Filter = "Excel Files(2016)|*.xls";
  251. if(saveFileDialog.ShowDialog() != DialogResult.Cancel)
  252. {
  253. Microsoft.Office.Interop.Excel.Application ExcelApp = new Microsoft.Office.Interop.Excel.Application();
  254. ExcelApp.Application.Workbooks.Add(Type.Missing);
  255.  
  256. //endrer på instilling for workbook
  257. ExcelApp.Columns.ColumnWidth = 20;
  258. //header
  259. for(int i = 1; i < dataGridView.Columns.Count + 1; i++)
  260. {
  261. ExcelApp.Cells[1, i] = dataGridView.Columns[i - 1].HeaderText;
  262. }
  263. //storing each row and column value for excel sheet
  264. for(int i = 0; i < dataGridView.Rows.Count; i++)
  265. {
  266. for(int j = 0; j < dataGridView.Columns.Count; j++)
  267. {
  268. if(dataGridView.Rows[i].Cells[j].Value != null)
  269. {
  270. ExcelApp.Cells[i + 2, j + 1] = dataGridView.Rows[i].Cells[j].Value.ToString();
  271. }
  272.  
  273. }
  274. }
  275. ExcelApp.ActiveWorkbook.SaveCopyAs(saveFileDialog.FileName.ToString());
  276. ExcelApp.ActiveWorkbook.Saved = true;
  277. ExcelApp.Quit();
  278. }
  279. }
  280.  
  281.  
  282. //metode for å tømme datagrid
  283. private void Clear_Btn_Click(object sender, EventArgs e)
  284. {
  285. dataGridView.Rows.Clear();
  286. }
  287.  
  288.  
  289. }
  290.  
  291.  
  292. }
Add Comment
Please, Sign In to add comment