Skip to content

Commit e262fbe

Browse files
author
James Cox
committedDec 10, 2015
write bitflags to serial port
1 parent e64a656 commit e262fbe

File tree

4 files changed

+202
-8
lines changed

4 files changed

+202
-8
lines changed
 

‎TargetFramework.zip

17.2 KB
Binary file not shown.

‎TargetFramework/TargetFramework/Form1.Designer.cs

+28-5
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎TargetFramework/TargetFramework/Form1.cs

+155-2
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,10 @@
33
using System.ComponentModel;
44
using System.Data;
55
using System.Drawing;
6+
using System.IO.Ports;
67
using System.Linq;
78
using System.Text;
9+
using System.Threading;
810
using System.Threading.Tasks;
911
using System.Windows.Forms;
1012

@@ -13,11 +15,14 @@ namespace TargetFramework
1315
public partial class Form1 : Form
1416
{
1517
BindingList<SequenceItem> _sequence = new BindingList<SequenceItem>();
18+
private TextBox[] _targets;
19+
private SerialPort _serialPort = null;
1620

1721
public Form1()
1822
{
1923
InitializeComponent();
2024
dataGridView1.DataSource = _sequence;
25+
_targets = new[] {t1_txt, t2_txt, t3_txt, t4_txt, t5_txt, t6_txt, t7_txt, t8_txt,};
2126
}
2227

2328
private void addTargetArrayToSequenceBtn_Click(object sender, EventArgs e)
@@ -28,7 +33,34 @@ private void addTargetArrayToSequenceBtn_Click(object sender, EventArgs e)
2833
return;
2934
}
3035

31-
_sequence.Add(new SequenceItem() { Type = SequenceItemType.Array, Description = GetCurrentTargetArray()});
36+
_sequence.Add(new SequenceItem() { Type = SequenceItemType.Array, Description = GetCurrentTargetArray(), Relays = GetCurrentRelays() });
37+
}
38+
39+
private bool[] GetCurrentRelays()
40+
{
41+
var relays = new bool[16];
42+
43+
for (var i = 0; i < _targets.Length; i++)
44+
{
45+
var target = _targets[i];
46+
SetTargetRelays(relays, target, i*2);
47+
}
48+
49+
return relays;
50+
}
51+
52+
private void SetTargetRelays(bool[] relays, TextBox target, int index)
53+
{
54+
if (target.Text == "S")
55+
{
56+
relays[index + 0] = true;
57+
relays[index + 1] = false;
58+
}
59+
else
60+
{
61+
relays[index + 0] = false;
62+
relays[index + 1] = true;
63+
}
3264
}
3365

3466
private string GetCurrentTargetArray()
@@ -38,7 +70,18 @@ private string GetCurrentTargetArray()
3870

3971
private void addDelayToSequenceBtn_Click(object sender, EventArgs e)
4072
{
41-
_sequence.Add(new SequenceItem() { Type = SequenceItemType.Delay, Description = $"Delay: {delay.Text} second(s)" });
73+
_sequence.Add(new SequenceItem() { Type = SequenceItemType.Delay, Description = $"Delay: {delay.Text} second(s)", Delay = GetDelay() });
74+
}
75+
76+
private int GetDelay()
77+
{
78+
int delayMs = -99;
79+
if (int.TryParse(delay.Text, out delayMs))
80+
{
81+
return delayMs * 1000;
82+
}
83+
84+
throw new ApplicationException("Delay must be an integer.");
4285
}
4386

4487
private void ChangeTarget(Button buttonToEnable, Button buttonToDisable, TextBox textBoxToUpdate, string text)
@@ -144,7 +187,117 @@ private void clearSequence_Click(object sender, EventArgs e)
144187

145188
private void runSequence_Click(object sender, EventArgs e)
146189
{
190+
try
191+
{
192+
if (_serialPort == null)
193+
{
194+
_serialPort = new SerialPort(serialPort.Text, 9600, Parity.None, 8, StopBits.One);
195+
}
196+
197+
if (!_serialPort.IsOpen)
198+
{
199+
_serialPort.Open();
200+
}
201+
202+
var bytes = new byte[5];
203+
bytes[0] = BitConverter.GetBytes('x')[0];
204+
bytes[3] = BitConverter.GetBytes('/')[0];
205+
bytes[4] = BitConverter.GetBytes('/')[0];
147206

207+
foreach (var sequenceItem in _sequence)
208+
{
209+
if (sequenceItem.Type == SequenceItemType.Delay)
210+
{
211+
Thread.Sleep(sequenceItem.Delay);
212+
}
213+
else
214+
{
215+
var relays = new Relays();
216+
if (sequenceItem.Relays[0])
217+
{
218+
relays = relays | Relays.Relay1;
219+
}
220+
if (sequenceItem.Relays[1])
221+
{
222+
relays = relays | Relays.Relay2;
223+
}
224+
if (sequenceItem.Relays[2])
225+
{
226+
relays = relays | Relays.Relay3;
227+
}
228+
if (sequenceItem.Relays[3])
229+
{
230+
relays = relays | Relays.Relay4;
231+
}
232+
if (sequenceItem.Relays[4])
233+
{
234+
relays = relays | Relays.Relay5;
235+
}
236+
if (sequenceItem.Relays[5])
237+
{
238+
relays = relays | Relays.Relay6;
239+
}
240+
if (sequenceItem.Relays[6])
241+
{
242+
relays = relays | Relays.Relay7;
243+
}
244+
if (sequenceItem.Relays[7])
245+
{
246+
relays = relays | Relays.Relay8;
247+
}
248+
249+
bytes[1] = (byte) relays;
250+
251+
relays = Relays.None;
252+
if (sequenceItem.Relays[8])
253+
{
254+
relays = relays | Relays.Relay1;
255+
}
256+
if (sequenceItem.Relays[9])
257+
{
258+
relays = relays | Relays.Relay2;
259+
}
260+
if (sequenceItem.Relays[10])
261+
{
262+
relays = relays | Relays.Relay3;
263+
}
264+
if (sequenceItem.Relays[11])
265+
{
266+
relays = relays | Relays.Relay4;
267+
}
268+
if (sequenceItem.Relays[12])
269+
{
270+
relays = relays | Relays.Relay5;
271+
}
272+
if (sequenceItem.Relays[13])
273+
{
274+
relays = relays | Relays.Relay6;
275+
}
276+
if (sequenceItem.Relays[14])
277+
{
278+
relays = relays | Relays.Relay7;
279+
}
280+
if (sequenceItem.Relays[15])
281+
{
282+
relays = relays | Relays.Relay8;
283+
}
284+
285+
bytes[2] = (byte) relays;
286+
287+
_serialPort.Write(bytes, 0, 5);
288+
}
289+
}
290+
291+
_serialPort.Close();
292+
}
293+
finally
294+
{
295+
if (_serialPort != null)
296+
{
297+
_serialPort.Dispose();
298+
_serialPort = null;
299+
}
300+
}
148301
}
149302
}
150303
}
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,32 @@
1-
namespace TargetFramework
1+
using System;
2+
3+
namespace TargetFramework
24
{
35
public class SequenceItem
46
{
57
public string Description { get; set; }
68
public SequenceItemType Type { get; set; }
9+
public bool[] Relays { get; set; }
10+
public int Delay { get; set; }
711
}
812

913
public enum SequenceItemType
1014
{
1115
Array,
1216
Delay,
1317
}
18+
19+
[Flags]
20+
enum Relays : byte
21+
{
22+
None = 0,
23+
Relay1 = 128,
24+
Relay2 = 64,
25+
Relay3 = 32,
26+
Relay4 = 16,
27+
Relay5 = 8,
28+
Relay6 = 4,
29+
Relay7 = 2,
30+
Relay8 = 1,
31+
};
1432
}

0 commit comments

Comments
 (0)
Please sign in to comment.