1 #platform "uOLED-32028-PMD3T"
3 #inherit "4DGL_16bitColours.fnc"
4 //#inherit "4DGL-System.fnc"
6 #constant MSG_BUFF_LEN 10
\r
8 #constant BT_LIFT_CALIB 0
\r
9 #constant BT_PUSHER_IN 1
\r
10 #constant BT_PUSHER_OUT 2
\r
11 #constant BT_LIFT_UP 3
\r
12 #constant BT_LIFT_DOWN 4
\r
13 #constant BT_CMU_INIT 5
\r
14 #constant BT_START 6
\r
15 #constant BT_COLOR 7
\r
18 #constant BT_RESTART 11
\r
20 #constant X_OFFSET 0
\r
21 #constant Y_OFFSET 4
\r
23 #constant MSG_START 150
\r
24 #constant MSG_TERM_LF 10
\r
26 #constant MSG_LIFT_CAL 151
\r
27 #constant MSG_PUSHER_IN 152
\r
28 #constant MSG_PUSHER_OUT 153
\r
29 #constant MSG_LIFT_UP 154
\r
30 #constant MSG_LIFT_DOWN 155
\r
31 #constant MSG_CMU_INIT 156
\r
32 #constant MSG_START_ACT 157
\r
33 #constant MSG_COLOR 158
\r
34 #constant MSG_INIT 160
\r
35 #constant MSG_STATUS_REQ 183
\r
36 #constant MSG_RESTART 162
\r
37 #constant MSG_SWITCH_TO_CONTROL_DONE 186
\r
39 #constant COLOR_RED 1
\r
40 #constant COLOR_GREEN 0
\r
42 var msg_buff[MSG_BUFF_LEN];
\r
43 var msg_rcvd[MSG_BUFF_LEN];
\r
56 serout(out_buff[idx]);
\r
61 func act_lift_calib()
\r
62 out_buff[0]:=MSG_START;
\r
63 out_buff[1]:=MSG_LIFT_CAL;
\r
64 out_buff[2]:=MSG_TERM_LF;
\r
69 func act_pusher_in()
\r
70 out_buff[0]:=MSG_START;
\r
71 out_buff[1]:=MSG_PUSHER_IN;
\r
72 out_buff[2]:=MSG_TERM_LF;
\r
77 func act_pusher_out()
\r
78 out_buff[0]:=MSG_START;
\r
79 out_buff[1]:=MSG_PUSHER_OUT;
\r
80 out_buff[2]:=MSG_TERM_LF;
\r
86 out_buff[0]:=MSG_START;
\r
87 out_buff[1]:=MSG_LIFT_UP;
\r
88 out_buff[2]:=MSG_TERM_LF;
\r
93 func act_lift_down()
\r
94 out_buff[0]:=MSG_START;
\r
95 out_buff[1]:=MSG_LIFT_DOWN;
\r
96 out_buff[2]:=MSG_TERM_LF;
\r
101 func act_cmu_init()
\r
102 out_buff[0]:=MSG_START;
\r
103 out_buff[1]:=MSG_CMU_INIT;
\r
104 out_buff[2]:=MSG_TERM_LF;
\r
110 out_buff[0]:=MSG_START;
\r
111 out_buff[1]:=MSG_START_ACT;
\r
112 out_buff[2]:=MSG_TERM_LF;
\r
118 out_buff[0]:=MSG_START;
\r
119 out_buff[1]:=MSG_INIT;
\r
120 out_buff[2]:=MSG_TERM_LF;
\r
126 out_buff[0]:=MSG_START;
\r
127 out_buff[1]:=MSG_STATUS_REQ;
\r
128 out_buff[2]:=MSG_TERM_LF;
\r
134 out_buff[0]:=MSG_START;
\r
135 out_buff[1]:=MSG_RESTART;
\r
136 out_buff[2]:=MSG_TERM_LF;
\r
142 if(current_color==COLOR_RED)
\r
143 current_color := COLOR_GREEN;
\r
144 button_color := GREEN;
\r
146 if(current_color==COLOR_GREEN)
\r
147 current_color := COLOR_RED;
\r
148 button_color := RED;
\r
152 out_buff[0]:=MSG_START;
\r
153 out_buff[1]:=MSG_COLOR;
\r
154 out_buff[2]:=current_color;
\r
160 func lift_calib_bt(var state)
\r
161 gfx_Button(state, X_OFFSET, bt_y[BT_LIFT_CALIB], BLUE, YELLOW, FONT2, 2, 2, " LIFT CAL ");
\r
164 func pusher_in_bt(var state)
\r
165 gfx_Button(state, X_OFFSET, bt_y[BT_PUSHER_IN], BLUE, YELLOW, FONT2, 2, 2, "PSH IN");
\r
168 func pusher_out_bt(var state)
\r
169 gfx_Button(state, bt_x[BT_PUSHER_OUT], bt_y[BT_PUSHER_IN], BLUE, YELLOW, FONT2, 2, 2, "PSH OUT");
\r
172 func lift_up_bt(var state)
\r
173 gfx_Button(state, X_OFFSET, bt_y[BT_LIFT_UP], BLUE, YELLOW, FONT2, 2, 2, "LFT UP");
\r
176 func lift_down_bt(var state)
\r
177 gfx_Button(state, bt_x[BT_LIFT_DOWN], bt_y[BT_LIFT_UP], BLUE, YELLOW, FONT2, 2, 2, "LFT DWN");
\r
180 func cmu_init_bt(var state)
\r
181 gfx_Button(state, X_OFFSET, bt_y[BT_CMU_INIT], BLUE, YELLOW, FONT2, 2, 2, " CMU INIT ");
\r
184 func start_bt(var state)
\r
185 gfx_Button(state, X_OFFSET, bt_y[BT_START], ORANGE, WHITE, FONT2, 2, 2, " !!START!! ");
\r
188 func color_bt(var state)
\r
189 gfx_Button(state, X_OFFSET, bt_y[BT_COLOR], button_color, YELLOW, FONT2, 2, 2, " COLOR ");
\r
192 func restart_bt(var state)
\r
193 gfx_Button(state, X_OFFSET, bt_y[BT_RESTART], GRAY, YELLOW, FONT2, 2, 2, " RESTART ALL ");
\r
196 func init_bt(var state)
\r
197 gfx_Button(state, X_OFFSET, bt_y[BT_INIT], GRAY, YELLOW, FONT2, 2, 2, " EXIT ");
\r
200 func status_bt(var state)
\r
201 gfx_Button(state, 0, 290, GRAY, WHITE, FONT3, 1, 1, " STATUS ");
\r
205 func draw_control()
\r
206 bt_y[BT_LIFT_CALIB]:=Y_OFFSET;
\r
209 bt_y[BT_PUSHER_IN]:=gfx_Get(3)+4;
\r
212 bt_x[BT_PUSHER_OUT]:=gfx_Get(2)+4;
\r
213 bt_y[BT_PUSHER_OUT]:=gfx_Get(3)+4;
\r
216 bt_y[BT_LIFT_UP]:=gfx_Get(3)+4;
\r
219 bt_x[BT_LIFT_DOWN]:=gfx_Get(2)+4;
\r
220 bt_y[BT_LIFT_DOWN]:=gfx_Get(3)+4;
\r
223 bt_y[BT_CMU_INIT]:=gfx_Get(3)+4;
\r
226 bt_y[BT_START]:=gfx_Get(3)+4;
\r
229 bt_y[BT_COLOR]:=gfx_Get(3)+4;
\r
232 bt_y[BT_RESTART]:=gfx_Get(3)+4;
\r
235 bt_y[BT_INIT]:=gfx_Get(3)+4;
\r
238 bt_y[BT_END]:=gfx_Get(3);
\r
244 var col, state, x, y;
\r
245 state := touch_Get(TOUCH_STATUS); // get touchscreen status
\r
247 if(state == NOTOUCH)
\r
250 //-----------------------------------------------------------------------------------------
\r
251 if(state == TOUCH_PRESS) // if there's a press
\r
252 x := touch_Get(TOUCH_GETX);
\r
253 y := touch_Get(TOUCH_GETY);
\r
255 if((y > bt_y[BT_LIFT_CALIB])&&(y<bt_y[BT_PUSHER_IN]))
\r
256 lift_calib_bt(DOWN);
\r
258 if((y > bt_y[BT_PUSHER_IN])&&(y<bt_y[BT_PUSHER_OUT]))
\r
259 if(x < bt_x[BT_PUSHER_OUT])
\r
260 pusher_in_bt(DOWN);
\r
262 pusher_out_bt(DOWN);
\r
265 if((y > bt_y[BT_LIFT_UP])&&(y<bt_y[BT_LIFT_DOWN]))
\r
266 if(x < bt_x[BT_LIFT_DOWN])
\r
269 lift_down_bt(DOWN);
\r
272 if((y > bt_y[BT_CMU_INIT])&&(y<bt_y[BT_START]))
\r
275 if((y > bt_y[BT_START])&&(y<bt_y[BT_COLOR]))
\r
278 if((y > bt_y[BT_COLOR])&&(y<bt_y[BT_RESTART]))
\r
281 if((y > bt_y[BT_RESTART])&&(y<bt_y[BT_INIT]))
\r
284 if((y > bt_y[BT_INIT])&&(y<bt_y[BT_END]))
\r
292 if(state == TOUCH_RELEASE) // if there's a press
\r
293 x := touch_Get(TOUCH_GETX);
\r
294 y := touch_Get(TOUCH_GETY);
\r
295 if((y > bt_y[BT_LIFT_CALIB])&&(y<bt_y[BT_PUSHER_IN]))
\r
299 if((y > bt_y[BT_PUSHER_IN])&&(y<bt_y[BT_PUSHER_OUT]))
\r
300 if(x < bt_x[BT_PUSHER_OUT])
\r
308 if((y > bt_y[BT_LIFT_UP])&&(y<bt_y[BT_LIFT_DOWN]))
\r
309 if(x < bt_x[BT_LIFT_DOWN])
\r
317 if((y > bt_y[BT_LIFT_DOWN])&&(y<bt_y[BT_CMU_INIT]))
\r
321 if((y > bt_y[BT_CMU_INIT])&&(y<bt_y[BT_START]))
\r
325 if((y > bt_y[BT_START])&&(y<bt_y[BT_COLOR]))
\r
329 if((y > bt_y[BT_COLOR])&&(y<bt_y[BT_RESTART]))
\r
333 if((y > bt_y[BT_RESTART])&&(y<bt_y[BT_INIT]))
\r
337 if((y > bt_y[BT_INIT])&&(y<bt_y[BT_END]))
\r
349 file_Run("STATUS.4XE",0);
\r
353 if(msg_rcvd[0]==200)
\r
358 if(msg_rcvd[0]=='c')
\r
359 if(msg_rcvd[1]==COLOR_RED)
\r
360 current_color := COLOR_RED;
\r
361 button_color := RED;
\r
363 if(msg_rcvd[1]==COLOR_GREEN)
\r
364 current_color := COLOR_GREEN;
\r
365 button_color := GREEN;
\r
373 var in, idx, bad, msg_len;
\r
382 msg_rcvd[idx] := in;
\r
387 until(idx==MSG_BUFF_LEN);
\r
390 com_Init(msg_buff, MSG_BUFF_LEN, ':');
\r
398 setbaud(8); // 19200 baud
\r
399 com_Init(msg_buff, MSG_BUFF_LEN, ':');
\r
401 out_buff[0]:=MSG_START;
\r
402 out_buff[1]:=MSG_SWITCH_TO_CONTROL_DONE;
\r
403 out_buff[2]:=MSG_TERM_LF;
\r
406 serout(out_buff[idx]);
\r
410 touch_Set(TOUCH_ENABLE); // enable TS
\r
411 touch_Set(TOUCH_REGIONDEFAULT); // reset touch area to fullscreen
\r
413 current_color:=COLOR_GREEN;
\r
414 button_color:=GREEN;
\r
416 repeat // the main application loop
\r