3
3
using System . ComponentModel ;
4
4
using System . Data ;
5
5
using System . Drawing ;
6
+ using System . IO . Ports ;
6
7
using System . Linq ;
7
8
using System . Text ;
9
+ using System . Threading ;
8
10
using System . Threading . Tasks ;
9
11
using System . Windows . Forms ;
10
12
@@ -13,11 +15,14 @@ namespace TargetFramework
13
15
public partial class Form1 : Form
14
16
{
15
17
BindingList < SequenceItem > _sequence = new BindingList < SequenceItem > ( ) ;
18
+ private TextBox [ ] _targets ;
19
+ private SerialPort _serialPort = null ;
16
20
17
21
public Form1 ( )
18
22
{
19
23
InitializeComponent ( ) ;
20
24
dataGridView1 . DataSource = _sequence ;
25
+ _targets = new [ ] { t1_txt , t2_txt , t3_txt , t4_txt , t5_txt , t6_txt , t7_txt , t8_txt , } ;
21
26
}
22
27
23
28
private void addTargetArrayToSequenceBtn_Click ( object sender , EventArgs e )
@@ -28,7 +33,34 @@ private void addTargetArrayToSequenceBtn_Click(object sender, EventArgs e)
28
33
return ;
29
34
}
30
35
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
+ }
32
64
}
33
65
34
66
private string GetCurrentTargetArray ( )
@@ -38,7 +70,18 @@ private string GetCurrentTargetArray()
38
70
39
71
private void addDelayToSequenceBtn_Click ( object sender , EventArgs e )
40
72
{
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." ) ;
42
85
}
43
86
44
87
private void ChangeTarget ( Button buttonToEnable , Button buttonToDisable , TextBox textBoxToUpdate , string text )
@@ -144,7 +187,117 @@ private void clearSequence_Click(object sender, EventArgs e)
144
187
145
188
private void runSequence_Click ( object sender , EventArgs e )
146
189
{
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 ] ;
147
206
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
+ }
148
301
}
149
302
}
150
303
}
0 commit comments