--- /dev/null
+#platform "uOLED-32028-PMD3T"\r
+\r
+// Note that 4DGL has built in sine table, this is just for #DATA access example.\r
+\r
+#inherit "4DGL_16bitColours.fnc"\r
+\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+#CONST \r
+ LEFT 15\r
+ TOP 15\r
+ // tables\r
+ V_TAB 4 //number of rectangles\r
+ MAX_WIDTH 239\r
+ MAX_HEIGHT 319\r
+ LAST_ROW 19\r
+ VOLT_HEIGHT 30\r
+ VOLT_WIDTH 59// width for voltage color field\r
+ BUTTONWIDTH 60 \r
+ BUTTONHEIGHT 30\r
+\r
+ // positions\r
+ VOLT 0\r
+ VOLT1 1\r
+ STATE 2\r
+ NMB_BT 8\r
+#END\r
+\r
+\r
+#CONST\r
+ NO 0\r
+ YES 1\r
+ Y 2\r
+ X 1 \r
+#END\r
+\r
+\r
+#DATA\r
+ // button Y positions for control page\r
+ word dY 3,33,63,93,123,153,183,293\r
+ word colors RED,GREEN,ORANGE\r
+ word collor BLUE,BLUE,RED,RED,YELLOW,YELLOW,GREEN,GRAY,CRIMSON\r
+ byte commands 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88\r
+ byte Text_row 0,2,3\r
+ byte Text_col 1,0\r
+ byte Text_pos 1,6,11,16,1,6,11,16\r
+ byte rec_pos_X 0,60,120,180 \r
+ byte rec_pos_Y 18,48,66,96\r
+ byte rec_X 1,61,121,181,1,61,121,181 \r
+ byte rec_Y 67,67,67,67,97,97,97,97\r
+ byte comm_chars '-', '|', '/', '-', '\\', '|'\r
+#END\r
+\r
+#CONST\r
+ COMPS 0x81\r
+ VOLTAGES 0x82\r
+ MAIN_FSM 0x83\r
+ MOVE_FSM 0x84\r
+ ACT_FSM 0x85\r
+ LOCATION 0x86\r
+ KEEPALIVE 0x87\r
+ CORNS 0x88 \r
+ DRESS 0x89\r
+#END\r
+\r
+\r
+#CONST\r
+ MOT 0\r
+ ODO 1\r
+ CAM 2\r
+ PWR 3\r
+ HOK 4\r
+ APP 5\r
+ VID 6\r
+ STA 7\r
+#END\r
+\r
+\r
+#CONST\r
+ VOLT33 0\r
+ VOLT50 1\r
+ VOLT80 2\r
+ VOLT_BAT 3\r
+#END\r
+\r
+\r
+var RX_buffer[200];//var work_buffer[200];\r
+// voltage strings \r
+var voltage_3V3[4];\r
+var voltage_5V0[4];\r
+var voltage_8V0[4];\r
+var voltage_BAT[5];\r
+// states strings\r
+var act_fsm_state[20];\r
+var move_fsm_state[20];\r
+var main_fsm_state[20];\r
+// pozition\r
+var position[9];\r
+var voltages[17];\r
+var comp_state[10];\r
+//\r
+\r
+\r
+\r
+var firstState, firstCtrl;\r
+var keyval, page; // - 1 if no key pressed else 0-15\r
+var BT_text[10];\r
+var BT_state[10];\r
+var BT_OLDstate[10];\r
+var names[8];\r
+var buffer[100];//[30];\r
+var comp_collor;\r
+var volt_state;\r
+var corns;\r
+var states;\r
+var rx_ch,index,id;\r
+var comm_idx;\r
+var dress_color;\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+\r
+func data_init()\r
+ var idx;\r
+ idx := 0;\r
+ repeat \r
+ voltages[idx] := 'x';\r
+ idx++;\r
+ until(idx == 17);\r
+ \r
+ \r
+ position[0] := 'x';\r
+ position[1] := 'x';\r
+ position[2] := 'x';\r
+ position[3] := 'y';\r
+ position[4] := 'y';\r
+ position[5] := 'y';\r
+ position[6] := 'a';\r
+ position[7] := 'a';\r
+ position[8] := 'a';\r
+ \r
+ \r
+// component names array\r
+ act_fsm_state[0] := 'I';\r
+ act_fsm_state[1] := 'n';\r
+ act_fsm_state[2] := 'i';\r
+ act_fsm_state[3] := 't';\r
+ act_fsm_state[4] := '\0';\r
+\r
+ move_fsm_state[0] := 'I';\r
+ move_fsm_state[1] := 'n';\r
+ move_fsm_state[2] := 'i';\r
+ move_fsm_state[3] := 't';\r
+ move_fsm_state[4] := '\0';\r
+\r
+ main_fsm_state[0] := 'I';\r
+ main_fsm_state[1] := 'n';\r
+ main_fsm_state[2] := 'i';\r
+ main_fsm_state[3] := 't';\r
+ main_fsm_state[4] := '\0';\r
+ \r
+ names[0] := "MOT";\r
+ names[1] := "ODO";\r
+ names[2] := "CAM";\r
+ names[3] := "PWR";\r
+ names[4] := "HOK";\r
+ names[5] := "APP";\r
+ names[6] := "VID";\r
+ names[7] := "STA";\r
+\r
+ idx := 0;\r
+ repeat\r
+ comp_state[idx] := (idx+1) & 0x0f;\r
+ idx++; \r
+ until(idx==8);\r
+ corns := 0;\r
+ \r
+ dress_color := BLUE;\r
+endfunc\r
+\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+\r
+func paint_voltage()//select variable is chooseing which voltage will be rewrite. CAN BE VALUE 0, to 5. 5 is ALL\r
+ var cntX, cntY, x, y, v_tab, idx;\r
+ cntX:=0;\r
+ cntY:=0; \r
+ v_tab:=4;\r
+ gfx_Set(PEN_SIZE, 1); \r
+ //draw table\r
+ gfx_Rectangle(0, 0, MAX_WIDTH, 18, WHITE);//table\r
+ while(cntX < v_tab)\r
+ x := rec_pos_X[cntX];\r
+ y := rec_pos_Y[cntY]; \r
+ gfx_Rectangle(x, y, x+VOLT_WIDTH, y+VOLT_HEIGHT, WHITE);//table\r
+ cntX++;\r
+ wend\r
+ //write legend\r
+ gfx_Set(PEN_SIZE, 0); \r
+ txt_Set(FONT_SIZE, 3);\r
+ txt_Set(TEXT_COLOUR, GRAY);\r
+ txt_Set(TEXT_OPACITY, 0); \r
+ txt_MoveCursor(Text_row[VOLT],0);\r
+ print ("Voltage indicator:");\r
+endfunc\r
+\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+func redraw_voltage()//(var voltage)\r
+ var idx, color; \r
+ gfx_Set(PEN_SIZE, 0); \r
+ txt_Set(TEXT_COLOUR, BLACK);\r
+ color := RED;\r
+ if((voltages[0] & 0x08) != 0x08)\r
+ color := GREEN;\r
+ endif \r
+ gfx_Rectangle(1, 19, 58, 47, color);//table\r
+ txt_MoveCursor(2,0);\r
+ print([CHR]voltages[1], [CHR]voltages[2],".", [CHR]voltages[3],[CHR]voltages[4], "\n");\r
+ color := RED; \r
+ if((voltages[0] & 0x04) != 0x04)\r
+ color := GREEN;\r
+ endif\r
+ gfx_Rectangle(61,19,118,47, color);//table\r
+ txt_MoveCursor(2,5);\r
+ print([CHR]voltages[5], [CHR]voltages[6],".", [CHR]voltages[7],[CHR]voltages[8], "\n");\r
+ color := RED; \r
+ if((voltages[0] & 0x02) != 0x02)\r
+ color := GREEN; \r
+ endif\r
+ gfx_Rectangle(121, 19, 178,47, color);//table\r
+ txt_MoveCursor(2,10);\r
+ print([CHR]voltages[9], [CHR]voltages[10], ".",[CHR]voltages[11],[CHR]voltages[12], "\n");\r
+ color := RED; \r
+ if((voltages[0] & 0x01) != 0x01)\r
+ color := GREEN;\r
+ endif\r
+ gfx_Rectangle(181,19,238, 47, color);//table\r
+ txt_MoveCursor(2,15);\r
+ print([CHR]voltages[13],[CHR]voltages[14], ".",[CHR]voltages[15],[CHR]voltages[16], "\n");\r
+ paint_voltage();\r
+endfunc\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+\r
+func paint_comm()\r
+ gfx_Set(PEN_SIZE, 1);//table \r
+ gfx_Rectangle(180, 174, 239, 192, WHITE);//table\r
+ txt_MoveCursor(11,15);\r
+ txt_Set(TEXT_COLOUR, GRAY);\r
+ print("Comm:");\r
+endfunc\r
+\r
+\r
+\r
+func redraw_comm()\r
+ if(comm_idx >= 6)\r
+ comm_idx := 0;\r
+ endif \r
+ gfx_Set(PEN_SIZE, 0);//solid rec \r
+ gfx_Rectangle(181, 191, 238, 221, GREEN);//table\r
+ txt_MoveCursor(13,17);\r
+ txt_Set(TEXT_COLOUR, BLACK);\r
+ print([CHR]comm_chars[comm_idx]);\r
+endfunc\r
+\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+ \r
+func draw_error()\r
+ sys_SetTimer(0,3000);\r
+ gfx_Set(PEN_SIZE, 0);//solid rec \r
+ gfx_Rectangle(181, 191, 238, 221, BLACK);//table\r
+ txt_MoveCursor(13,16);\r
+ txt_Set(TEXT_COLOUR, RED);\r
+ print("ERR");\r
+endfunc\r
+\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+\r
+func redraw_comp_state(var data)\r
+ var Y_axes, X_axes,X_end, Y_end, comp_nmb, col_idx, text_Y;\r
+ comp_nmb := ((data & 0x1f)-1); \r
+ col_idx := (data & 0x60) >> 5;\r
+ if((comp_nmb >7)||(col_idx > 2) ||comp_nmb<0)\r
+ return;\r
+ endif\r
+ Y_axes := rec_Y[comp_nmb];\r
+ X_axes := rec_X[comp_nmb];\r
+ X_end := X_axes + 57;\r
+ Y_end := Y_axes + 28;\r
+ text_Y := 5;\r
+ if(comp_nmb >3)\r
+ text_Y := 7;\r
+ endif \r
+ gfx_Set(PEN_SIZE, 0);//solid rectangle \r
+ gfx_Rectangle(X_axes, Y_axes, X_end, Y_end, colors[col_idx]);//table\r
+ txt_MoveCursor(text_Y,Text_pos[comp_nmb]); \r
+ txt_Set(TEXT_COLOUR, BLACK); \r
+ print([STR]names[comp_nmb]);\r
+ comp_state[comp_nmb] := data;\r
+endfunc\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+\r
+func paint_comp_states(var select)\r
+ var cntX,cntY,x,y, v_tab, row;\r
+ cntX := 0;\r
+ cntY := 1;\r
+ row := 0;\r
+ v_tab:=4;\r
+ gfx_Set(PEN_SIZE, 1); \r
+ //draw table for components\r
+ gfx_Rectangle(0, rec_pos_Y[cntY], MAX_WIDTH, 66, WHITE);//table\r
+ cntY++; \r
+ while(cntX < v_tab)\r
+ x := rec_pos_X[cntX];\r
+ y := rec_pos_Y[cntY]; \r
+ gfx_Rectangle(x, y, x+VOLT_WIDTH, y+VOLT_HEIGHT, WHITE);//table\r
+ cntX++;\r
+ wend\r
+ cntY := 3;\r
+ cntX := 0;\r
+ while(cntX < v_tab)\r
+ x := rec_pos_X[cntX];\r
+ y := rec_pos_Y[cntY]; \r
+ gfx_Rectangle(x, y, x+VOLT_WIDTH, y+VOLT_HEIGHT, WHITE);//table\r
+ cntX++;\r
+ wend\r
+ txt_MoveCursor(Text_row[STATE],0);\r
+ txt_Set(TEXT_COLOUR, GRAY);\r
+ print("Component indicator:")\r
+endfunc\r
+\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+\r
+func paint_corn()\r
+ gfx_Set(PEN_SIZE, 1);//table \r
+ gfx_Rectangle(180, 126, 239, 222, WHITE);//table\r
+ gfx_Rectangle(180, 126, 239, 144, WHITE);//table\r
+ gfx_Rectangle(179, 126, 239, 222, WHITE);//table\r
+ txt_MoveCursor(8,15);\r
+ txt_Set(TEXT_COLOUR, GRAY);\r
+ print("Corn:")\r
+endfunc\r
+\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+\r
+func redraw_corns() \r
+ txt_MoveCursor(10,17);\r
+ txt_Set(TEXT_COLOUR, BLACK);\r
+ gfx_Set(PEN_SIZE, 0);//solid rectangle \r
+ gfx_Rectangle(181, 145, 237, 173, dress_color);//table\r
+ print(corns&0x0f);\r
+endfunc\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+\r
+func redraw_move_state() \r
+ var idx; \r
+ gfx_Set(PEN_SIZE, 0);//table \r
+ gfx_Rectangle(0, 159, 178, 190, BLACK);//table\r
+ txt_MoveCursor(10,0);\r
+ txt_Set(TEXT_COLOUR, OLIVE);\r
+ idx :=0;\r
+ print("MO:"); \r
+ repeat\r
+ if(idx == 11)\r
+ print("-\n ");\r
+ endif\r
+ putch(move_fsm_state[idx]);\r
+ idx++;\r
+ until(move_fsm_state[idx] == '\0'); \r
+endfunc\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+\r
+func redraw_act_state()\r
+ var idx;\r
+ gfx_Set(PEN_SIZE, 0);//table \r
+ gfx_Rectangle(0, 191, 178, 221, BLACK);//table\r
+ txt_MoveCursor(12,0);\r
+ txt_Set(TEXT_COLOUR, BROWN);\r
+ idx :=0;\r
+ print("AC:"); \r
+ repeat\r
+ if(idx == 11)\r
+ print("-\n ");\r
+ endif\r
+ putch(act_fsm_state[idx]);\r
+ idx++;\r
+ until(act_fsm_state[idx] == '\0'); \r
+endfunc\r
+\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+\r
+func redraw_main_state()\r
+ var idx;\r
+ idx :=0;\r
+ gfx_Rectangle(0, 127, 178, 158, BLACK);//table\r
+ txt_MoveCursor(8,0);\r
+ txt_Set(TEXT_COLOUR, TEAL);\r
+ gfx_Set(PEN_SIZE, 0);//table \r
+ print("MA:"); \r
+ repeat\r
+ if(idx == 11)\r
+ print("-\n ");\r
+ endif\r
+ putch(main_fsm_state[idx]);\r
+ idx++;\r
+ until(main_fsm_state[idx] == '\0'); \r
+endfunc\r
+\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+\r
+func paint_position()\r
+ gfx_Set(PEN_SIZE, 0);//solid rectangle \r
+ gfx_Rectangle(0, 223, 239, 255, MAGENTA);//table\r
+ gfx_Rectangle(0, 256, 239, 291, MAGENTA);//table\r
+endfunc\r
+\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+\r
+func redraw_position()\r
+ gfx_Set(PEN_SIZE, 0);//solid rectangle \r
+ gfx_Rectangle(60, 239, 110, 255, MAGENTA);//table\r
+ gfx_Rectangle(160, 239, 220, 255,MAGENTA);//table\r
+ gfx_Rectangle(0, 272, 47, 286, MAGENTA);//table\r
+ txt_MoveCursor(14,0); \r
+ txt_Set(TEXT_COLOUR, BLACK); \r
+ print("Position:\n X = ", [CHR]position[0],".",[CHR]position[1],[CHR]position[2]);\r
+ print(" Y = ", [CHR]position[3],".",[CHR]position[4], [CHR]position[5], "\n");\r
+ print("Angle: ","\n"," ", [CHR]position[6],[CHR]position[7],[CHR]position[8]," Deg \n");\r
+endfunc\r
+\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+\r
+func draw_keys()\r
+ var i;\r
+ i:=0;\r
+ repeat\r
+ gfx_Button(BT_state[i], 3, dY[i], collor[i], BLACK, FONT2, 2, 2, BT_text[i]);\r
+ until(++i == NMB_BT-1);\r
+ gfx_Button(BT_state[i], 3, dY[i], collor[i], BLACK, FONT1, 2, 2, BT_text[i]);\r
+endfunc\r
+\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+\r
+func redraw()\r
+ if((keyval == 7)||(keyval == 8))//do nothing\r
+ return; \r
+ endif\r
+ if(keyval < 8)\r
+ gfx_Button(BT_state[keyval], 3, dY[keyval], collor[keyval], BLACK, FONT2, 2, 2, BT_text[keyval]);\r
+ endif\r
+endfunc\r
+\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+func send_cmd()\r
+ if((keyval == 7)||(keyval == 8))//do nothing\r
+ return; \r
+ endif\r
+ if(keyval < 7)\r
+ to(COM0);\r
+ putch(commands[keyval]);\r
+ to(TEXT);\r
+ endif\r
+endfunc\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+\r
+func read_key()\r
+ var x, y;\r
+ y := touch_Get(Y);\r
+ y := y / (BUTTONHEIGHT+1);\r
+ keyval := y;\r
+ if((keyval == 7)||(keyval == 8))\r
+ keyval := -1;\r
+ endif\r
+endfunc\r
+\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+\r
+func clear_page()\r
+ gfx_Set(0,0);\r
+ gfx_Rectangle(0,0,MAX_WIDTH,MAX_HEIGHT,BLACK);\r
+endfunc\r
+\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+// function for debugging only\r
+func send_axis()\r
+ var y;\r
+ y := touch_Get(Y);\r
+ txt_MoveCursor(16,1);\r
+ to(COM0),print(y);\r
+ to(COM0),print("\n"); \r
+ to(COM0),print(keyval);\r
+ to(COM0),print("\n"); \r
+endfunc\r
+\r
+\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+\r
+func read_serial()\r
+ var cnt_idx; \r
+ rx_ch := serin();\r
+ if(rx_ch < 0)\r
+ goto out;\r
+ endif\r
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`\r
+ if((rx_ch & 0x80) == 0x80)\r
+ id := rx_ch;\r
+ index:=0;\r
+ if (id == KEEPALIVE)\r
+ sys_SetTimer(0,3000);// 3 seconds \r
+ comm_idx++; \r
+ redraw_comm();\r
+ id:=0;\r
+ endif;\r
+ goto out;//return;\r
+ endif\r
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`\r
+ if (index < 100) // 100 is buffer capacity\r
+ RX_buffer[index] := rx_ch;\r
+ index++;\r
+ else\r
+ index := 0;\r
+ endif\r
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`\r
+ if(id == COMPS && index == 1)\r
+ redraw_comp_state(RX_buffer[0]);//draw_status();\r
+ id:=0;\r
+ goto out;//return;\r
+ endif\r
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`\r
+ if(id == CORNS)// && index == 1)\r
+ corns := RX_buffer[0]; \r
+ redraw_corns();//draw_status();\r
+ id:=0;\r
+ goto out;//return;\r
+ endif\r
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`\r
+ if(id == ACT_FSM && rx_ch == '\0')\r
+ cnt_idx := 0;\r
+ repeat \r
+ act_fsm_state[cnt_idx] := RX_buffer[cnt_idx];\r
+ cnt_idx++;\r
+ until(RX_buffer[cnt_idx] == '\0')\r
+ act_fsm_state[cnt_idx] := '\0';\r
+ redraw_act_state();\r
+ id:=0;\r
+ goto out;//return;\r
+ endif\r
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`\r
+ if(id == MOVE_FSM && rx_ch == '\0')\r
+ cnt_idx := 0;\r
+ repeat \r
+ move_fsm_state[cnt_idx] := RX_buffer[cnt_idx];\r
+ cnt_idx++;\r
+ until(RX_buffer[cnt_idx] == '\0')\r
+ move_fsm_state[cnt_idx] := '\0';\r
+ redraw_move_state();\r
+ goto out;//return;\r
+ endif\r
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`\r
+ if(id == MAIN_FSM && rx_ch == '\0')\r
+ cnt_idx := 0;\r
+ repeat \r
+ main_fsm_state[cnt_idx] := RX_buffer[cnt_idx];\r
+ cnt_idx++;\r
+ until(RX_buffer[cnt_idx] == '\0')\r
+ main_fsm_state[cnt_idx] := '\0';\r
+ redraw_main_state();\r
+ id:=0;\r
+ goto out;//return;\r
+ endif\r
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`\r
+ if (id == VOLTAGES && index == 17)\r
+ cnt_idx :=0; \r
+ repeat \r
+ voltages[cnt_idx] := RX_buffer[cnt_idx];\r
+ cnt_idx++;\r
+ until(cnt_idx == 17)\r
+ redraw_voltage();\r
+ id:=0;\r
+ goto out;//return;\r
+ endif\r
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`\r
+ if(id == LOCATION && index == 9)\r
+ cnt_idx := 0;\r
+ repeat\r
+ position[cnt_idx] := RX_buffer[cnt_idx];\r
+ cnt_idx++;\r
+ until(cnt_idx == 9) \r
+ redraw_position();\r
+ id:=0;\r
+ goto out;//return;\r
+ endif\r
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`\r
+ if(id == DRESS && index == 1)\r
+ if(RX_buffer[0] == 1) \r
+ dress_color := YELLOW;\r
+ endif\r
+ if(RX_buffer[0] == 0) \r
+ dress_color := BLUE;\r
+ endif\r
+ redraw_corns();\r
+ id:=0;\r
+ goto out;//return;\r
+ endif\r
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`\r
+out:\r
+endfunc\r
+\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+\r
+func STATE_page()\r
+ var state, cnt,idx1,tmr;\r
+ sys_SetTimer(0,3000);\r
+ paint_voltage();\r
+ cnt:=0;\r
+ redraw_voltage();\r
+ paint_comp_states(0);\r
+ paint_corn();\r
+ com_Init(buffer,100,0);\r
+ cnt := 0; //draw states for all components\r
+ repeat\r
+ redraw_comp_state(comp_state[cnt]);\r
+ until(cnt++ == 8)\r
+ paint_position();\r
+ redraw_position();\r
+ redraw_corns();\r
+ redraw_main_state();\r
+ redraw_move_state();\r
+ redraw_act_state();\r
+ paint_comm();\r
+ redraw_comm();\r
+\r
+ gfx_Button(UP,0, MAX_HEIGHT-27, GRAY, BLACK,FONT1,2,2, " To control screen ");\r
+ touch_DetectRegion(0, MAX_HEIGHT-30, MAX_WIDTH, MAX_HEIGHT);\r
+ touch_Set(TOUCH_ENABLE);\r
+ repeat\r
+ state := touch_Get(TOUCH_STATUS);\r
+ if(state == TOUCH_PRESS)\r
+ gfx_Button(DOWN,0, MAX_HEIGHT-27, GRAY, BLUE,FONT1, 2, 2, " To control screen ");\r
+ endif\r
+ if(state == TOUCH_RELEASE)\r
+ gfx_Button(UP,0, MAX_HEIGHT-27, GRAY, BLUE,FONT1, 2, 2, " To control screen ");\r
+ page := 1;\r
+ break;\r
+ endif\r
+ read_serial(); \r
+ if(sys_GetTimer(0) == 0)\r
+ idx1 := 0;\r
+ repeat\r
+ idx1++; \r
+ comp_state[idx1] := idx1; \r
+ until(idx1==8);\r
+ cnt := 0; //draw states for all components\r
+ repeat\r
+ redraw_comp_state(comp_state[cnt]);\r
+ until(cnt++ == 8)\r
+ draw_error();\r
+ endif\r
+ forever\r
+endfunc\r
+\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+\r
+func CTRL_page()\r
+ var n, state, x;\r
+ n :=0;\r
+ keyval := -1; // initate key value\r
+ BT_text[0] := " FORK DOWN "; //set texts for all buttons\r
+ BT_text[1] := " FORK UP ";\r
+ BT_text[2] := " DOOR OPEN ";\r
+ BT_text[3] := " DOOR CLOSE ";\r
+ BT_text[4] := " START ROLL ";\r
+ BT_text[5] := " STOP ROLL ";\r
+ BT_text[6] := "SEND ALL STATE";\r
+ BT_text[7] := " SWITCH DRESS \n COLOR";\r
+ BT_text[8] := " To state screen ";\r
+ touch_Set(TOUCH_ENABLE); // enable the touch screen \r
+ touch_DetectRegion(0, 0, MAX_WIDTH, MAX_HEIGHT);\r
+//*********************************************************************************************\r
+ repeat \r
+ BT_state[n] := UP; //set state for all buttons\r
+ BT_OLDstate[n] := DOWN;\r
+ until(++n == 9); \r
+//*********************************************************************************************\r
+ draw_keys();\r
+ repeat \r
+ sys_SetTimer(0,3000);\r
+ state := touch_Get(TOUCH_STATUS);\r
+ if(state == TOUCH_PRESS)\r
+ read_key();\r
+ //send_axis(); //debugging only \r
+ if(keyval != -1)\r
+ if((keyval == 9)||(keyval == 10))\r
+ BT_state[7] := DOWN;\r
+ gfx_Button(BT_state[7], 3, dY[7], collor[7], BLUE, FONT1, 2, 2, BT_text[7]);// misto redraw();\r
+ else \r
+ BT_state[keyval] := DOWN; // set that button is pushed\r
+ redraw();\r
+ endif; \r
+ endif\r
+ endif\r
+ if(state == TOUCH_RELEASE)\r
+ if(keyval != -1)\r
+ BT_state[keyval] := UP; //button was released\r
+ redraw();\r
+ page := 0;\r
+ if((keyval == 9)||(keyval == 10))\r
+ gfx_Button(BT_state[7], 3, dY[7], collor[7], BLACK, FONT1, 2, 2, BT_text[7]);// misto redraw();\r
+ keyval := -1;\r
+ break;\r
+ endif; \r
+ send_cmd();\r
+ endif\r
+ endif\r
+ forever\r
+endfunc\r
+\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+\r
+func main()\r
+ page := 0;\r
+ firstState := 0;\r
+ firstCtrl := 0;\r
+ comp_collor := RED;\r
+ data_init();\r
+ voltages[0]:=0xff;// voltage color initate\r
+ comm_idx := 3;\r
+\r
+ repeat\r
+ if(!page)// view state page\r
+ clear_page(); \r
+ STATE_page();\r
+ else// view ctrl page\r
+ clear_page(); \r
+ CTRL_page();\r
+ endif \r
+ forever \r
+endfunc\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
--- /dev/null
+#platform "uOLED-32028-PMD3T"\r
+\r
+// Note that 4DGL has built in sine table, this is just for #DATA access example.\r
+\r
+#inherit "4DGL_16bitColours.fnc"\r
+\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+#CONST \r
+ LEFT 15\r
+ TOP 15\r
+ // tables\r
+ V_TAB 4 //number of rectangles\r
+ MAX_WIDTH 239\r
+ MAX_HEIGHT 319\r
+ LAST_ROW 19\r
+ VOLT_HEIGHT 30\r
+ VOLT_WIDTH 59// width for voltage color field\r
+ BUTTONWIDTH 60 \r
+ BUTTONHEIGHT 30\r
+\r
+ // positions\r
+ VOLT 0\r
+ VOLT1 1\r
+ STATE 2\r
+ NMB_BT 8\r
+#END\r
+\r
+\r
+#CONST\r
+ NO 0\r
+ YES 1\r
+ Y 2\r
+ X 1 \r
+#END\r
+\r
+\r
+#DATA\r
+ // button Y positions for control page\r
+ word dY 3,33,63,93,123,153,183,213,293\r
+ word colors RED,GREEN,ORANGE\r
+ word collor BLUE,BLUE,CRIMSON,CRIMSON,YELLOW,YELLOW,GREEN,INDIGO,GRAY\r
+ byte commands 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88\r
+ byte Text_row 0,2,3\r
+ byte Text_col 1,0\r
+ byte Text_pos 1,6,11,16,1,6,11,16\r
+ byte rec_pos_X 0,60,120,180 \r
+ byte rec_pos_Y 18,48,66,96\r
+ byte rec_X 1,61,121,181,1,61,121,181 \r
+ byte rec_Y 67,67,67,67,97,97,97,97\r
+ byte comm_chars '-', '|', '/', '-', '\\', '|'\r
+#END\r
+\r
+#CONST\r
+ COMPS 0x81\r
+ VOLTAGES 0x82\r
+ MAIN_FSM 0x83\r
+ MOVE_FSM 0x84\r
+ ACT_FSM 0x85\r
+ LOCATION 0x86\r
+ KEEPALIVE 0x87\r
+ CORNS 0x88 \r
+ DRESS 0x89\r
+#END\r
+\r
+\r
+#CONST\r
+ MOT 0\r
+ ODO 1\r
+ CAM 2\r
+ PWR 3\r
+ HOK 4\r
+ APP 5\r
+ VID 6\r
+ STA 7\r
+#END\r
+\r
+\r
+#CONST\r
+ VOLT33 0\r
+ VOLT50 1\r
+ VOLT80 2\r
+ VOLT_BAT 3\r
+#END\r
+\r
+\r
+var RX_buffer[200];//var work_buffer[200];\r
+// voltage strings \r
+var voltage_3V3[4];\r
+var voltage_5V0[4];\r
+var voltage_8V0[4];\r
+var voltage_BAT[5];\r
+// states strings\r
+var act_fsm_state[20];\r
+var move_fsm_state[20];\r
+var main_fsm_state[20];\r
+// pozition\r
+var position[9];\r
+var voltages[17];\r
+var comp_state[10];\r
+//\r
+\r
+\r
+\r
+var firstState, firstCtrl;\r
+var keyval, page; // - 1 if no key pressed else 0-15\r
+var BT_text[10];\r
+var BT_state[10];\r
+var BT_OLDstate[10];\r
+var names[8];\r
+var buffer[100];//[30];\r
+var comp_collor;\r
+var volt_state;\r
+var corns;\r
+var states;\r
+var rx_ch,index,id;\r
+var comm_idx;\r
+var dress_color;\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+\r
+func data_init()\r
+ var idx;\r
+ idx := 0;\r
+ repeat \r
+ voltages[idx] := 'x';\r
+ idx++;\r
+ until(idx == 17);\r
+ \r
+ \r
+ position[0] := 'x';\r
+ position[1] := 'x';\r
+ position[2] := 'x';\r
+ position[3] := 'y';\r
+ position[4] := 'y';\r
+ position[5] := 'y';\r
+ position[6] := 'a';\r
+ position[7] := 'a';\r
+ position[8] := 'a';\r
+ \r
+ \r
+// component names array\r
+ act_fsm_state[0] := 'I';\r
+ act_fsm_state[1] := 'n';\r
+ act_fsm_state[2] := 'i';\r
+ act_fsm_state[3] := 't';\r
+ act_fsm_state[4] := '\0';\r
+\r
+ move_fsm_state[0] := 'I';\r
+ move_fsm_state[1] := 'n';\r
+ move_fsm_state[2] := 'i';\r
+ move_fsm_state[3] := 't';\r
+ move_fsm_state[4] := '\0';\r
+\r
+ main_fsm_state[0] := 'I';\r
+ main_fsm_state[1] := 'n';\r
+ main_fsm_state[2] := 'i';\r
+ main_fsm_state[3] := 't';\r
+ main_fsm_state[4] := '\0';\r
+ \r
+ names[0] := "MOT";\r
+ names[1] := "ODO";\r
+ names[2] := "CAM";\r
+ names[3] := "PWR";\r
+ names[4] := "HOK";\r
+ names[5] := "APP";\r
+ names[6] := "VID";\r
+ names[7] := "STA";\r
+\r
+ idx := 0;\r
+ repeat\r
+ comp_state[idx] := (idx+1) & 0x0f;\r
+ idx++; \r
+ until(idx==8);\r
+ corns := 0;\r
+ \r
+ dress_color := BLUE;\r
+endfunc\r
+\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+\r
+func paint_voltage()//select variable is chooseing which voltage will be rewrite. CAN BE VALUE 0, to 5. 5 is ALL\r
+ var cntX, cntY, x, y, v_tab, idx;\r
+ cntX:=0;\r
+ cntY:=0; \r
+ v_tab:=4;\r
+ gfx_Set(PEN_SIZE, 1); \r
+ //draw table\r
+ gfx_Rectangle(0, 0, MAX_WIDTH, 18, WHITE);//table\r
+ while(cntX < v_tab)\r
+ x := rec_pos_X[cntX];\r
+ y := rec_pos_Y[cntY]; \r
+ gfx_Rectangle(x, y, x+VOLT_WIDTH, y+VOLT_HEIGHT, WHITE);//table\r
+ cntX++;\r
+ wend\r
+ //write legend\r
+ gfx_Set(PEN_SIZE, 0); \r
+ txt_Set(FONT_SIZE, 3);\r
+ txt_Set(TEXT_COLOUR, GRAY);\r
+ txt_Set(TEXT_OPACITY, 0); \r
+ txt_MoveCursor(Text_row[VOLT],0);\r
+ print ("Voltage indicator:");\r
+endfunc\r
+\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+func redraw_voltage()//(var voltage)\r
+ var idx, color; \r
+ gfx_Set(PEN_SIZE, 0); \r
+ txt_Set(TEXT_COLOUR, BLACK);\r
+ color := RED;\r
+ if((voltages[0] & 0x08) != 0x08)\r
+ color := GREEN;\r
+ endif \r
+ gfx_Rectangle(1, 19, 58, 47, color);//table\r
+ txt_MoveCursor(2,0);\r
+ print([CHR]voltages[1], [CHR]voltages[2],".", [CHR]voltages[3],[CHR]voltages[4], "\n");\r
+ color := RED; \r
+ if((voltages[0] & 0x04) != 0x04)\r
+ color := GREEN;\r
+ endif\r
+ gfx_Rectangle(61,19,118,47, color);//table\r
+ txt_MoveCursor(2,5);\r
+ print([CHR]voltages[5], [CHR]voltages[6],".", [CHR]voltages[7],[CHR]voltages[8], "\n");\r
+ color := RED; \r
+ if((voltages[0] & 0x02) != 0x02)\r
+ color := GREEN; \r
+ endif\r
+ gfx_Rectangle(121, 19, 178,47, color);//table\r
+ txt_MoveCursor(2,10);\r
+ print([CHR]voltages[9], [CHR]voltages[10], ".",[CHR]voltages[11],[CHR]voltages[12], "\n");\r
+ color := RED; \r
+ if((voltages[0] & 0x01) != 0x01)\r
+ color := GREEN;\r
+ endif\r
+ gfx_Rectangle(181,19,238, 47, color);//table\r
+ txt_MoveCursor(2,15);\r
+ print([CHR]voltages[13],[CHR]voltages[14], ".",[CHR]voltages[15],[CHR]voltages[16], "\n");\r
+ paint_voltage();\r
+endfunc\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+\r
+func paint_comm()\r
+ gfx_Set(PEN_SIZE, 1);//table \r
+ gfx_Rectangle(180, 174, 239, 192, WHITE);//table\r
+ txt_MoveCursor(11,15);\r
+ txt_Set(TEXT_COLOUR, GRAY);\r
+ print("Comm:");\r
+endfunc\r
+\r
+\r
+\r
+func redraw_comm()\r
+ if(comm_idx >= 6)\r
+ comm_idx := 0;\r
+ endif \r
+ gfx_Set(PEN_SIZE, 0);//solid rec \r
+ gfx_Rectangle(181, 191, 238, 221, GREEN);//table\r
+ txt_MoveCursor(13,17);\r
+ txt_Set(TEXT_COLOUR, BLACK);\r
+ print([CHR]comm_chars[comm_idx]);\r
+endfunc\r
+\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+ \r
+func draw_error()\r
+ sys_SetTimer(0,3000);\r
+ gfx_Set(PEN_SIZE, 0);//solid rec \r
+ gfx_Rectangle(181, 191, 238, 221, BLACK);//table\r
+ txt_MoveCursor(13,16);\r
+ txt_Set(TEXT_COLOUR, RED);\r
+ print("ERR");\r
+endfunc\r
+\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+\r
+func redraw_comp_state(var data)\r
+ var Y_axes, X_axes,X_end, Y_end, comp_nmb, col_idx, text_Y;\r
+ comp_nmb := ((data & 0x1f)-1); \r
+ col_idx := (data & 0x60) >> 5;\r
+ if((comp_nmb >7)||(col_idx > 2) ||comp_nmb<0)\r
+ return;\r
+ endif\r
+ Y_axes := rec_Y[comp_nmb];\r
+ X_axes := rec_X[comp_nmb];\r
+ X_end := X_axes + 57;\r
+ Y_end := Y_axes + 28;\r
+ text_Y := 5;\r
+ if(comp_nmb >3)\r
+ text_Y := 7;\r
+ endif \r
+ gfx_Set(PEN_SIZE, 0);//solid rectangle \r
+ gfx_Rectangle(X_axes, Y_axes, X_end, Y_end, colors[col_idx]);//table\r
+ txt_MoveCursor(text_Y,Text_pos[comp_nmb]); \r
+ txt_Set(TEXT_COLOUR, BLACK); \r
+ print([STR]names[comp_nmb]);\r
+ comp_state[comp_nmb] := data;\r
+endfunc\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+\r
+func paint_comp_states(var select)\r
+ var cntX,cntY,x,y, v_tab, row;\r
+ cntX := 0;\r
+ cntY := 1;\r
+ row := 0;\r
+ v_tab:=4;\r
+ gfx_Set(PEN_SIZE, 1); \r
+ //draw table for components\r
+ gfx_Rectangle(0, rec_pos_Y[cntY], MAX_WIDTH, 66, WHITE);//table\r
+ cntY++; \r
+ while(cntX < v_tab)\r
+ x := rec_pos_X[cntX];\r
+ y := rec_pos_Y[cntY]; \r
+ gfx_Rectangle(x, y, x+VOLT_WIDTH, y+VOLT_HEIGHT, WHITE);//table\r
+ cntX++;\r
+ wend\r
+ cntY := 3;\r
+ cntX := 0;\r
+ while(cntX < v_tab)\r
+ x := rec_pos_X[cntX];\r
+ y := rec_pos_Y[cntY]; \r
+ gfx_Rectangle(x, y, x+VOLT_WIDTH, y+VOLT_HEIGHT, WHITE);//table\r
+ cntX++;\r
+ wend\r
+ txt_MoveCursor(Text_row[STATE],0);\r
+ txt_Set(TEXT_COLOUR, GRAY);\r
+ print("Component indicator:")\r
+endfunc\r
+\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+\r
+func paint_corn()\r
+ gfx_Set(PEN_SIZE, 1);//table \r
+ gfx_Rectangle(180, 126, 239, 222, WHITE);//table\r
+ gfx_Rectangle(180, 126, 239, 144, WHITE);//table\r
+ gfx_Rectangle(179, 126, 239, 222, WHITE);//table\r
+ txt_MoveCursor(8,15);\r
+ txt_Set(TEXT_COLOUR, GRAY);\r
+ print("Corn:")\r
+endfunc\r
+\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+\r
+func redraw_corns() \r
+ txt_MoveCursor(10,17);\r
+ txt_Set(TEXT_COLOUR, BLACK);\r
+ gfx_Set(PEN_SIZE, 0);//solid rectangle \r
+ gfx_Rectangle(181, 145, 237, 173, dress_color);//table\r
+ print(corns&0x0f);\r
+endfunc\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+\r
+func redraw_move_state() \r
+ var idx; \r
+ gfx_Set(PEN_SIZE, 0);//table \r
+ gfx_Rectangle(0, 159, 178, 190, BLACK);//table\r
+ txt_MoveCursor(10,0);\r
+ txt_Set(TEXT_COLOUR, OLIVE);\r
+ idx :=0;\r
+ print("MO:"); \r
+ repeat\r
+ if(idx == 11)\r
+ print("-\n ");\r
+ endif\r
+ putch(move_fsm_state[idx]);\r
+ idx++;\r
+ until(move_fsm_state[idx] == '\0'); \r
+endfunc\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+\r
+func redraw_act_state()\r
+ var idx;\r
+ gfx_Set(PEN_SIZE, 0);//table \r
+ gfx_Rectangle(0, 191, 178, 221, BLACK);//table\r
+ txt_MoveCursor(12,0);\r
+ txt_Set(TEXT_COLOUR, BROWN);\r
+ idx :=0;\r
+ print("AC:"); \r
+ repeat\r
+ if(idx == 11)\r
+ print("-\n ");\r
+ endif\r
+ putch(act_fsm_state[idx]);\r
+ idx++;\r
+ until(act_fsm_state[idx] == '\0'); \r
+endfunc\r
+\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+\r
+func redraw_main_state()\r
+ var idx;\r
+ idx :=0;\r
+ gfx_Rectangle(0, 127, 178, 158, BLACK);//table\r
+ txt_MoveCursor(8,0);\r
+ txt_Set(TEXT_COLOUR, TEAL);\r
+ gfx_Set(PEN_SIZE, 0);//table \r
+ print("MA:"); \r
+ repeat\r
+ if(idx == 11)\r
+ print("-\n ");\r
+ endif\r
+ putch(main_fsm_state[idx]);\r
+ idx++;\r
+ until(main_fsm_state[idx] == '\0'); \r
+endfunc\r
+\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+\r
+func paint_position()\r
+ gfx_Set(PEN_SIZE, 0);//solid rectangle \r
+ gfx_Rectangle(0, 223, 239, 255, MAGENTA);//table\r
+ gfx_Rectangle(0, 256, 239, 291, MAGENTA);//table\r
+endfunc\r
+\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+\r
+func redraw_position()\r
+ gfx_Set(PEN_SIZE, 0);//solid rectangle \r
+ gfx_Rectangle(60, 239, 110, 255, MAGENTA);//table\r
+ gfx_Rectangle(160, 239, 220, 255,MAGENTA);//table\r
+ gfx_Rectangle(0, 272, 47, 286, MAGENTA);//table\r
+ txt_MoveCursor(14,0); \r
+ txt_Set(TEXT_COLOUR, BLACK); \r
+ print("Position:\n X = ", [CHR]position[0],".",[CHR]position[1],[CHR]position[2]);\r
+ print(" Y = ", [CHR]position[3],".",[CHR]position[4], [CHR]position[5], "\n");\r
+ print("Angle: ","\n"," ", [CHR]position[6],[CHR]position[7],[CHR]position[8]," Deg \n");\r
+endfunc\r
+\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+\r
+func draw_keys()\r
+ var i;\r
+ i:=0;\r
+ repeat\r
+ gfx_Button(BT_state[i], 3, dY[i], collor[i], BLACK, FONT2, 2, 2, BT_text[i]);\r
+ until(++i == NMB_BT);\r
+ gfx_Button(BT_state[i], 3, dY[i], collor[i], BLACK, FONT1, 2, 2, BT_text[i]);\r
+endfunc\r
+\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+\r
+func redraw()\r
+ if(keyval == 8)//||(keyval == 8))//do nothing\r
+ return; \r
+ endif\r
+ if(keyval < 9)\r
+ gfx_Button(BT_state[keyval], 3, dY[keyval], collor[keyval], BLACK, FONT2, 2, 2, BT_text[keyval]);\r
+ endif\r
+endfunc\r
+\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+func send_cmd()\r
+ if(keyval == 8)//do nothing\r
+ return; \r
+ endif\r
+ if(keyval < 8)\r
+ to(COM0);\r
+ putch(commands[keyval]);\r
+ to(TEXT);\r
+ endif\r
+endfunc\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+\r
+func read_key()\r
+ var x, y;\r
+ y := touch_Get(Y);\r
+ y := y / (BUTTONHEIGHT+1);\r
+ keyval := y;\r
+ if(keyval == 9)\r
+ keyval := -1;\r
+ endif\r
+endfunc\r
+\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+\r
+func clear_page()\r
+ gfx_Set(0,0);\r
+ gfx_Rectangle(0,0,MAX_WIDTH,MAX_HEIGHT,BLACK);\r
+endfunc\r
+\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+// function for debugging only\r
+func send_axis()\r
+ var y;\r
+ y := touch_Get(Y);\r
+ txt_MoveCursor(16,1);\r
+ to(COM0),print(y);\r
+ to(COM0),print("\n"); \r
+ to(COM0),print(keyval);\r
+ to(COM0),print("\n"); \r
+endfunc\r
+\r
+\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+\r
+func read_serial()\r
+ var cnt_idx; \r
+ rx_ch := serin();\r
+ if(rx_ch < 0)\r
+ goto out;\r
+ endif\r
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`\r
+ if((rx_ch & 0x80) == 0x80)\r
+ id := rx_ch;\r
+ index:=0;\r
+ if (id == KEEPALIVE)\r
+ sys_SetTimer(0,3000);// 3 seconds \r
+ comm_idx++; \r
+ redraw_comm();\r
+ id:=0;\r
+ endif;\r
+ goto out;//return;\r
+ endif\r
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`\r
+ if (index < 100) // 100 is buffer capacity\r
+ RX_buffer[index] := rx_ch;\r
+ index++;\r
+ else\r
+ index := 0;\r
+ endif\r
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`\r
+ if(id == COMPS && index == 1)\r
+ redraw_comp_state(RX_buffer[0]);//draw_status();\r
+ id:=0;\r
+ goto out;//return;\r
+ endif\r
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`\r
+ if(id == CORNS)// && index == 1)\r
+ corns := RX_buffer[0]; \r
+ redraw_corns();//draw_status();\r
+ id:=0;\r
+ goto out;//return;\r
+ endif\r
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`\r
+ if(id == ACT_FSM && rx_ch == '\0')\r
+ cnt_idx := 0;\r
+ repeat \r
+ act_fsm_state[cnt_idx] := RX_buffer[cnt_idx];\r
+ cnt_idx++;\r
+ until(RX_buffer[cnt_idx] == '\0')\r
+ act_fsm_state[cnt_idx] := '\0';\r
+ redraw_act_state();\r
+ id:=0;\r
+ goto out;//return;\r
+ endif\r
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`\r
+ if(id == MOVE_FSM && rx_ch == '\0')\r
+ cnt_idx := 0;\r
+ repeat \r
+ move_fsm_state[cnt_idx] := RX_buffer[cnt_idx];\r
+ cnt_idx++;\r
+ until(RX_buffer[cnt_idx] == '\0')\r
+ move_fsm_state[cnt_idx] := '\0';\r
+ redraw_move_state();\r
+ goto out;//return;\r
+ endif\r
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`\r
+ if(id == MAIN_FSM && rx_ch == '\0')\r
+ cnt_idx := 0;\r
+ repeat \r
+ main_fsm_state[cnt_idx] := RX_buffer[cnt_idx];\r
+ cnt_idx++;\r
+ until(RX_buffer[cnt_idx] == '\0')\r
+ main_fsm_state[cnt_idx] := '\0';\r
+ redraw_main_state();\r
+ id:=0;\r
+ goto out;//return;\r
+ endif\r
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`\r
+ if (id == VOLTAGES && index == 17)\r
+ cnt_idx :=0; \r
+ repeat \r
+ voltages[cnt_idx] := RX_buffer[cnt_idx];\r
+ cnt_idx++;\r
+ until(cnt_idx == 17)\r
+ redraw_voltage();\r
+ id:=0;\r
+ goto out;//return;\r
+ endif\r
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`\r
+ if(id == LOCATION && index == 9)\r
+ cnt_idx := 0;\r
+ repeat\r
+ position[cnt_idx] := RX_buffer[cnt_idx];\r
+ cnt_idx++;\r
+ until(cnt_idx == 9) \r
+ redraw_position();\r
+ id:=0;\r
+ goto out;//return;\r
+ endif\r
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`\r
+ if(id == DRESS && index == 1)\r
+ if(RX_buffer[0] == 1) \r
+ dress_color := YELLOW;\r
+ endif\r
+ if(RX_buffer[0] == 0) \r
+ dress_color := BLUE;\r
+ endif\r
+ redraw_corns();\r
+ id:=0;\r
+ goto out;//return;\r
+ endif\r
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`\r
+out:\r
+endfunc\r
+\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+\r
+func STATE_page()\r
+ var state, cnt,idx1,tmr;\r
+ sys_SetTimer(0,3000);\r
+ paint_voltage();\r
+ cnt:=0;\r
+ redraw_voltage();\r
+ paint_comp_states(0);\r
+ paint_corn();\r
+ com_Init(buffer,100,0);\r
+ cnt := 0; //draw states for all components\r
+ repeat\r
+ redraw_comp_state(comp_state[cnt]);\r
+ until(cnt++ == 8)\r
+ paint_position();\r
+ redraw_position();\r
+ redraw_corns();\r
+ redraw_main_state();\r
+ redraw_move_state();\r
+ redraw_act_state();\r
+ paint_comm();\r
+ redraw_comm();\r
+\r
+ gfx_Button(UP,0, MAX_HEIGHT-27, GRAY, BLACK,FONT1,2,2, " To control screen ");\r
+ touch_DetectRegion(0, MAX_HEIGHT-30, MAX_WIDTH, MAX_HEIGHT);\r
+ touch_Set(TOUCH_ENABLE);\r
+ repeat\r
+ state := touch_Get(TOUCH_STATUS);\r
+ if(state == TOUCH_PRESS)\r
+ gfx_Button(DOWN,0, MAX_HEIGHT-27, GRAY, BLUE,FONT1, 2, 2, " To control screen ");\r
+ endif\r
+ if(state == TOUCH_RELEASE)\r
+ gfx_Button(UP,0, MAX_HEIGHT-27, GRAY, BLUE,FONT1, 2, 2, " To control screen ");\r
+ page := 1;\r
+ break;\r
+ endif\r
+ read_serial(); \r
+ if(sys_GetTimer(0) == 0)\r
+ idx1 := 0;\r
+ repeat\r
+ idx1++; \r
+ comp_state[idx1] := idx1; \r
+ until(idx1==8);\r
+ cnt := 0; //draw states for all components\r
+ repeat\r
+ redraw_comp_state(comp_state[cnt]);\r
+ until(cnt++ == 8)\r
+ draw_error();\r
+ endif\r
+ forever\r
+endfunc\r
+\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+\r
+func CTRL_page()\r
+ var n, state, x;\r
+ n :=0;\r
+ keyval := -1; // initate key value\r
+ BT_text[0] := " FORK DOWN "; //set texts for all buttons\r
+ BT_text[1] := " FORK UP ";\r
+ BT_text[2] := " DOOR OPEN ";\r
+ BT_text[3] := " DOOR CLOSE ";\r
+ BT_text[4] := " START ROLL ";\r
+ BT_text[5] := " STOP ROLL ";\r
+ BT_text[6] := "SEND ALL STATE";\r
+ BT_text[7] := " SWITCH DRESS ";\r
+ BT_text[8] := " To state screen ";\r
+ touch_Set(TOUCH_ENABLE); // enable the touch screen \r
+ touch_DetectRegion(0, 0, MAX_WIDTH, MAX_HEIGHT);\r
+//*********************************************************************************************\r
+ repeat \r
+ BT_state[n] := UP; //set state for all buttons\r
+ BT_OLDstate[n] := DOWN;\r
+ until(++n == 9); \r
+//*********************************************************************************************\r
+ draw_keys();\r
+ repeat \r
+ sys_SetTimer(0,3000);\r
+ state := touch_Get(TOUCH_STATUS);\r
+ if(state == TOUCH_PRESS)\r
+ read_key();\r
+ send_axis(); //debugging only \r
+ if(keyval != -1)\r
+ if(keyval == 10 || keyval == 9)\r
+ BT_state[8] := DOWN;\r
+ gfx_Button(BT_state[8], 3, dY[8], collor[8], BLUE, FONT1, 2, 2, BT_text[8]);// misto redraw();\r
+ else \r
+ BT_state[keyval] := DOWN; // set that button is pushed\r
+ redraw();\r
+ endif; \r
+ endif\r
+ endif\r
+ if(state == TOUCH_RELEASE)\r
+ if(keyval != -1)\r
+ BT_state[keyval] := UP; //button was released\r
+ redraw();\r
+ page := 0;\r
+ if(keyval == 10 || keyval == 9)\r
+ gfx_Button(BT_state[8], 3, dY[8], collor[8], BLACK, FONT1, 2, 2, BT_text[8]);// misto redraw();\r
+ keyval := -1;\r
+ break;\r
+ endif; \r
+ send_cmd();\r
+ endif\r
+ endif\r
+ forever\r
+endfunc\r
+\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+\r
+func main()\r
+ page := 0;\r
+ firstState := 0;\r
+ firstCtrl := 0;\r
+ comp_collor := RED;\r
+ data_init();\r
+ voltages[0]:=0xff;// voltage color initate\r
+ comm_idx := 3;\r
+\r
+ repeat\r
+ if(!page)// view state page\r
+ clear_page(); \r
+ STATE_page();\r
+ else// view ctrl page\r
+ clear_page(); \r
+ CTRL_page();\r
+ endif \r
+ forever \r
+endfunc\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r