#constant MSG_SWITCH_TO_CONTROL 184\r
#constant MSG_SWITCH_TO_STATUS_DONE 185\r
#constant MSG_SWITCH_TO_CONTROL_DONE 186\r
+#constant MSG_SET_COLOR 187\r
+#constant MSG_SET_MODE 188\r
+#constant MSG_CAR_LEFT 189\r
+#constant MSG_CAR_RIGHT 190\r
\r
#constant MSG_LBRUSH_SERVO 1\r
#constant MSG_RBRUSH_SERVO 2\r
\r
#constant TXT_BT_GET_READY $" GET READY! "\r
#constant TXT_BT_START $" START "\r
+#constant TXT_BT_COLOR $" COLOR "\r
\r
-#constant TXT_BT_BAGR_DRIVE $" BAGR "\r
+#constant TXT_BT_CAR_LEFT $" << "\r
+#constant TXT_BT_CAR_RIGHT $" >> "\r
+\r
+#constant TXT_BT_BAGR_DRIVE $" BAGR "\r
\r
#constant MSG_BUFF_LEN 40\r
\r
-#constant BT_X_0 0\r
+\r
#constant BT_S_ROW1_Y 0\r
#constant BT_S_ROW2_Y 1\r
#constant BT_D_ROW1_Y 2\r
#constant BT_START_END_Y 8\r
#constant BT_STATUS_Y 9\r
#constant BT_STATUS_END_Y 10\r
-\r
-#constant BT_S_RBRUSH_X 1\r
-#constant BT_S_BDOOR_X 2\r
-#constant BT_D_RBRUSH_X 3\r
-#constant BT_D_BAGR_X 4\r
-#constant BT_D_BAGR_END_X 5\r
-#constant BT_GET_READY_X 6\r
-#constant BT_GET_READY_END_X 7\r
-#constant BT_START_X 8\r
-#constant BT_START_END_X 9\r
-#constant BT_STATUS_X 10\r
-#constant BT_STATUS_END_X 11\r
+#constant BT_COLOR_Y 11\r
+#constant BT_COLOR_END_Y 12\r
+#constant BT_CAR_LEFT_Y 13\r
+#constant BT_CAR_LEFT_END_Y 14\r
+#constant BT_CAR_RIGHT_Y 15\r
+#constant BT_CAR_RIGHT_END_Y 16\r
+#constant BT_X_0 17\r
+\r
+#constant BT_S_RBRUSH_X 0\r
+#constant BT_S_BDOOR_X 1\r
+#constant BT_D_RBRUSH_X 2\r
+#constant BT_D_BAGR_X 3\r
+#constant BT_D_BAGR_END_X 4\r
+#constant BT_GET_READY_X 5\r
+#constant BT_GET_READY_END_X 6\r
+#constant BT_START_X 7\r
+#constant BT_START_END_X 8\r
+#constant BT_STATUS_X 9\r
+#constant BT_STATUS_END_X 10\r
+#constant BT_COLOR_X 11\r
+#constant BT_COLOR_END_X 12\r
+#constant BT_CAR_LEFT_X 13\r
+#constant BT_CAR_LEFT_END_X 14\r
+#constant BT_CAR_RIGHT_X 15\r
+#constant BT_CAR_RIGHT_END_X 16\r
\r
#constant VOLTAGE33 0\r
#constant VOLTAGE50 1\r
#constant VOLTAGE80 2\r
#constant VOLTAGE_BAT 3\r
\r
+#constant COLOR_RED 1\r
+#constant COLOR_BLUE 0\r
+\r
+#constant CAR_LEFT 1\r
+#constant CAR_RIGHT 2\r
+\r
+#constant BLUE_BALL 1\r
+#constant RED_BALL 2\r
+#constant NO_BALL 3\r
+\r
+#constant HW_STATUS_OK 1\r
+\r
+#constant HW1 1\r
+#constant HW2 2\r
+#constant HW3 3\r
+#constant HW4 4\r
+#constant HW5 5\r
+#constant HW6 6\r
+\r
var msg_buff[MSG_BUFF_LEN];\r
var bt_x[20];\r
var bt_y[20];\r
var fsm_state[41];\r
var fsm_state_len;\r
\r
+var balls_state[5];\r
+var ball_up;\r
+var ball_down;\r
+\r
+var current_color;\r
+\r
var isStatus;\r
var isControl;\r
\r
gfx_Button(state, bt_x[BT_D_BAGR_X], bt_y[BT_D_ROW2_Y], color, WHITE, FONT3, TEXTWIDTH, TEXTHEIGHT, TXT_BT_BAGR_DRIVE);\r
endfunc\r
\r
+func bt_carousel_left(var state, var color)\r
+ gfx_Button(state, bt_x[BT_CAR_LEFT_X], bt_y[BT_CAR_LEFT_Y], color, WHITE, FONT3, TEXTWIDTH, TEXTHEIGHT, TXT_BT_CAR_LEFT);\r
+endfunc\r
+\r
+func bt_carousel_right(var state, var color)\r
+ gfx_Button(state, bt_x[BT_CAR_RIGHT_X], bt_y[BT_CAR_RIGHT_Y], color, WHITE, FONT3, TEXTWIDTH, TEXTHEIGHT, TXT_BT_CAR_RIGHT);\r
+endfunc\r
+\r
func bt_get_ready(var state, var color)\r
gfx_Button(state, bt_x[BT_GET_READY_X], bt_y[BT_GET_READY_Y], color, WHITE, FONT4, TEXTWIDTH, TEXTHEIGHT, TXT_BT_GET_READY);\r
endfunc\r
gfx_Button(state, bt_x[BT_STATUS_X], bt_y[BT_STATUS_Y], color, WHITE, FONT3, TEXTWIDTH, TEXTHEIGHT, text);\r
endfunc\r
\r
+func bt_color(var state, var color)\r
+ gfx_Button(state, bt_x[BT_COLOR_X], bt_y[BT_COLOR_Y], color, WHITE, FONT4, TEXTWIDTH, TEXTHEIGHT, TXT_BT_COLOR);\r
+endfunc\r
+\r
//----------------------------------------------------------------------------------------------------\r
func draw_voltage33()\r
var col_rect;\r
return 0;\r
endfunc\r
\r
+func update_balls()\r
+ \r
+ gfx_Set(0,0);\r
+ if(balls_state[0]==BLUE_BALL)\r
+ gfx_Circle(24, 150, 22, BLUE);\r
+ endif\r
+ if(balls_state[0]==RED_BALL)\r
+ gfx_Circle(24, 150, 22, RED);\r
+ endif\r
+ if(balls_state[0]==NO_BALL)\r
+ gfx_Circle(24, 150, 22, GRAY);\r
+ endif\r
+ \r
+ if(balls_state[1]==BLUE_BALL)\r
+ gfx_Circle(72, 150, 22, BLUE);\r
+ endif\r
+ if(balls_state[1]==RED_BALL)\r
+ gfx_Circle(72, 150, 22, RED);\r
+ endif\r
+ if(balls_state[1]==NO_BALL)\r
+ gfx_Circle(72, 150, 22, GRAY);\r
+ endif\r
+\r
+ if(balls_state[2]==BLUE_BALL)\r
+ gfx_Circle(120, 150, 22, BLUE);\r
+ endif\r
+ if(balls_state[2]==RED_BALL)\r
+ gfx_Circle(120, 150, 22, RED);\r
+ endif\r
+ if(balls_state[2]==NO_BALL)\r
+ gfx_Circle(120, 150, 22, GRAY);\r
+ endif\r
+\r
+ if(balls_state[3]==BLUE_BALL)\r
+ gfx_Circle(168, 150, 22, BLUE);\r
+ endif\r
+ if(balls_state[3]==RED_BALL)\r
+ gfx_Circle(168, 150, 22, RED);\r
+ endif\r
+ if(balls_state[3]==NO_BALL)\r
+ gfx_Circle(168, 150, 22, GRAY);\r
+ endif \r
+ \r
+ if(balls_state[4]==BLUE_BALL)\r
+ gfx_Circle(216, 150, 22, BLUE);\r
+ endif\r
+ if(balls_state[4]==RED_BALL)\r
+ gfx_Circle(216, 150, 22, RED);\r
+ endif\r
+ if(balls_state[4]==NO_BALL)\r
+ gfx_Circle(216, 150, 22, GRAY);\r
+ endif\r
+ \r
+ draw_carousel_pos(ball_up, ball_down);\r
+ return 0;\r
+endfunc\r
+\r
+\r
+\r
func draw_position()\r
txt_Set(FONT_SIZE, FONT3);\r
txt_MoveCursor(21, 6); // move the cursor to line 4, column 5\r
return 0;\r
endfunc\r
\r
-func draw_hw1()\r
+func draw_hw1(var status)\r
+ txt_Set(FONT_SIZE, FONT3);\r
+ txt_Set(TEXT_COLOUR, WHITE);\r
+ \r
+ if(status==HW_STATUS_OK)\r
+ gfx_Rectangle(0,193,79,218,GREEN);\r
+ else\r
+ gfx_Rectangle(0,193,79,218,RED);\r
+ endif\r
+\r
+ txt_MoveCursor(17,1);\r
+ putstr("HW1");\r
+endfunc\r
+\r
+func draw_hw2(var status)\r
+ txt_Set(FONT_SIZE, FONT3);\r
+ txt_Set(TEXT_COLOUR, WHITE);\r
+ \r
+ if(status==HW_STATUS_OK)\r
+ gfx_Rectangle(81,193,159,218,GREEN);\r
+ else\r
+ gfx_Rectangle(81,193,159,218,RED);\r
+ endif\r
+ txt_MoveCursor(17,11);\r
+ putstr("HW2");\r
+endfunc\r
+\r
+func draw_hw3(var status)\r
+ txt_Set(FONT_SIZE, FONT3);\r
+ txt_Set(TEXT_COLOUR, WHITE);\r
+ \r
+ if(status==HW_STATUS_OK)\r
+ gfx_Rectangle(161,193,240,218,GREEN);\r
+ else\r
+ gfx_Rectangle(161,193,240,218,RED);\r
+ endif\r
+\r
+ txt_MoveCursor(17,21);\r
+ putstr("HW3");\r
+endfunc\r
+\r
+func draw_hw4(var status)\r
+ txt_Set(FONT_SIZE, FONT3);\r
+ txt_Set(TEXT_COLOUR, WHITE);\r
+ \r
+ if(status==HW_STATUS_OK)\r
+ gfx_Rectangle(0,220,79,245,GREEN);\r
+ else\r
+ gfx_Rectangle(0,220,79,245,RED);\r
+ endif\r
+ \r
+ txt_MoveCursor(19,1);\r
+ putstr("HW4");\r
+endfunc\r
+\r
+func draw_hw5(var status)\r
+ txt_Set(FONT_SIZE, FONT3);\r
+ txt_Set(TEXT_COLOUR, WHITE);\r
+ \r
+ if(status==HW_STATUS_OK)\r
+ gfx_Rectangle(81,220,159,245,GREEN);\r
+ else\r
+ gfx_Rectangle(81,220,159,245,RED);\r
+ endif\r
+ \r
+ txt_MoveCursor(19,11);\r
+ putstr("HW5");\r
+endfunc\r
+\r
+func draw_hw6(var status)\r
+ txt_Set(FONT_SIZE, FONT3);\r
+ txt_Set(TEXT_COLOUR, WHITE);\r
+ \r
+ if(status==HW_STATUS_OK)\r
+ gfx_Rectangle(161,220,240,245,GREEN);\r
+ else\r
+ gfx_Rectangle(161,220,240,245,RED);\r
+ endif\r
+ \r
+ txt_MoveCursor(19,21);\r
+ putstr("HW6");\r
+endfunc\r
+\r
+func draw_hw()\r
txt_Set(FONT_SIZE, FONT3);\r
txt_MoveCursor(15, 10); // move the cursor to line 4, column 5\r
txt_Set(TEXT_COLOUR, RED);\r
\r
putstr("HW STATUS");\r
\r
- gfx_Rectangle(0,193,79,218,GREEN);\r
- gfx_Rectangle(81,193,159,218,GREEN);\r
- gfx_Rectangle(161,193,240,218,GREEN);\r
- \r
- gfx_Rectangle(0,220,79,245,GREEN);\r
- gfx_Rectangle(81,220,159,245,GREEN);\r
- gfx_Rectangle(161,220,240,245,GREEN);\r
+ txt_Set(TEXT_COLOUR, WHITE);\r
+\r
+ draw_hw1(HW_STATUS_OK);\r
+ draw_hw2(HW_STATUS_OK);\r
+ draw_hw3(HW_STATUS_OK);\r
+ draw_hw4(HW_STATUS_OK);\r
+ draw_hw5(HW_STATUS_OK);\r
+ draw_hw6(HW_STATUS_OK);\r
return 0;\r
endfunc\r
\r
until(idx==len)\r
endfunc\r
\r
+func move_carousel(var dir)\r
+ var len,idx;\r
+ \r
+ out_msg_buff[0] := MSG_START;\r
+ if(dir==CAR_LEFT)\r
+ out_msg_buff[1] := MSG_CAR_LEFT;\r
+ else\r
+ if(dir==CAR_RIGHT)\r
+ out_msg_buff[1] := MSG_CAR_RIGHT;\r
+ endif\r
+ endif\r
+ out_msg_buff[2] := MSG_TERM_LF;\r
+\r
+ len := 3;\r
+ idx := 0;\r
+ \r
+ repeat\r
+ serout(out_msg_buff[idx]);\r
+ idx++;\r
+ until(idx==len)\r
+endfunc\r
+\r
+func set_color(var des_col)\r
+ var len,idx;\r
+ \r
+ out_msg_buff[0] := MSG_START;\r
+ out_msg_buff[1] := MSG_SET_COLOR;\r
+ out_msg_buff[2] := des_col;\r
+ out_msg_buff[3] := MSG_TERM_LF;\r
+\r
+ len := 4;\r
+ idx := 0;\r
+ \r
+ repeat\r
+ serout(out_msg_buff[idx]);\r
+ idx++;\r
+ until(idx==len)\r
+endfunc\r
+\r
func draw_ctrl_titles()\r
txt_Set(FONT_SIZE, FONT3);\r
txt_Set(TEXT_COLOUR, RED);\r
bt_y[BT_D_ROW2_Y] := gfx_Get(3);\r
\r
// SECOND ROW\r
- bt_x[BT_D_BAGR_X] := 80;\r
+ bt_x[BT_D_BAGR_X] := 0;\r
bt_bagr_drive(UP, BLUE);\r
\r
bt_y[BT_D_ROW2_END_Y] := gfx_Get(3);\r
bt_x[BT_D_BAGR_END_X] := gfx_Get(2);\r
+\r
+ bt_y[BT_CAR_LEFT_Y] := bt_y[BT_D_ROW2_Y];\r
+ bt_x[BT_CAR_LEFT_X] := bt_x[BT_D_BAGR_END_X];\r
+ bt_carousel_left(UP, BLUE);\r
+ bt_y[BT_CAR_LEFT_END_Y] := bt_y[BT_D_ROW2_END_Y];\r
+ bt_x[BT_CAR_LEFT_END_X] := gfx_Get(2);\r
+ \r
+ bt_y[BT_CAR_RIGHT_Y] := bt_y[BT_D_ROW2_Y];\r
+ bt_x[BT_CAR_RIGHT_X] := gfx_Get(2);\r
+ bt_carousel_right(UP, BLUE);\r
+ bt_y[BT_CAR_RIGHT_END_Y] := bt_y[BT_D_ROW2_END_Y];\r
+ bt_x[BT_CAR_RIGHT_END_X] := gfx_Get(3);\r
endfunc\r
\r
func draw_robot_control_buttons()\r
\r
bt_x[BT_START_END_X] := gfx_Get(2);\r
bt_y[BT_START_END_Y] := gfx_Get(3);\r
+ \r
+ bt_x[BT_COLOR_X] := 30;\r
+ bt_y[BT_COLOR_Y] := bt_y[BT_START_END_Y] + 5;\r
+ \r
+ bt_color(UP, BLUE);\r
+ \r
+ bt_x[BT_COLOR_END_X] := gfx_Get(2);\r
+ bt_y[BT_COLOR_END_Y] := gfx_Get(3);\r
+ \r
endfunc\r
\r
func draw_status_button()\r
\r
draw_balls();\r
draw_carousel_pos(3, 2);\r
- draw_hw1();\r
+ draw_hw();\r
draw_position();\r
draw_control_button();\r
return 0;\r
\r
func process_msg()\r
var idx;\r
- \r
if(msg_buff[0]==CHANGE_MODE_REP)\r
if(msg_buff[1]==CHANGE_MODE_STATUS)\r
draw_status();\r
draw_voltage50();\r
draw_voltage80();\r
draw_voltageBAT();\r
-\r
endif\r
if((msg_buff[0]==MSG_POSITION)&&(isStatus==1))\r
idx:=1;\r
game_color := BLUE;\r
endif\r
endif\r
+ if((msg_buff[0]==MSG_SET_COLOR))\r
+ if(msg_buff[1]==COLOR_BLUE)\r
+ current_color:=COLOR_BLUE;\r
+ if(isControl==1)\r
+ bt_color(UP, BLUE);\r
+ endif\r
+ endif\r
+ if(msg_buff[1]==COLOR_RED)\r
+ current_color:=COLOR_RED;\r
+ if(isControl==1)\r
+ bt_color(DOWN, RED);\r
+ endif\r
+ endif\r
+ endif\r
+ if((msg_buff[0]==MSG_BALLS)&&(isStatus==1))\r
+ balls_state[0]:=msg_buff[1];\r
+ balls_state[1]:=msg_buff[2];\r
+ balls_state[2]:=msg_buff[3];\r
+ balls_state[3]:=msg_buff[4];\r
+ balls_state[4]:=msg_buff[5];\r
+ ball_up:=msg_buff[6];\r
+ ball_down:=msg_buff[7];\r
+ update_balls();\r
+ endif\r
+ if((msg_buff[0]==MSG_HW_STATUS)&&(isStatus==1))\r
+ if(msg_buff[1]==HW1)\r
+ draw_hw1(msg_buff[2]);\r
+ endif\r
+ if(msg_buff[1]==HW2)\r
+ draw_hw2(msg_buff[2]);\r
+ endif\r
+ if(msg_buff[1]==HW3)\r
+ draw_hw3(msg_buff[2]);\r
+ endif\r
+ if(msg_buff[1]==HW4)\r
+ draw_hw4(msg_buff[2]);\r
+ endif\r
+ if(msg_buff[1]==HW5)\r
+ draw_hw5(msg_buff[2]);\r
+ endif\r
+ if(msg_buff[1]==HW6)\r
+ draw_hw6(msg_buff[2]);\r
+ endif\r
+ endif\r
return 0;\r
endfunc\r
\r
bt_bagr_drive(DOWN, GREEN);\r
set_actuators(MSG_BAGR_DRIVE);\r
endif\r
+ if((x>bt_x[BT_CAR_LEFT_X])&&(x<bt_x[BT_CAR_LEFT_END_X]))\r
+ bt_carousel_left(DOWN, GREEN);\r
+ move_carousel(CAR_LEFT);\r
+ endif\r
+ if(x>bt_x[BT_CAR_RIGHT_X])\r
+ bt_carousel_right(DOWN, GREEN);\r
+ move_carousel(CAR_RIGHT);\r
+ endif\r
endfunc\r
\r
func bt_pressed_get_ready()\r
bt_status(DOWN, GREEN, TXT_BT_CONTROL);\r
endfunc\r
\r
+func bt_pressed_color()\r
+ if(current_color==COLOR_RED)\r
+ bt_color(UP, BLUE);\r
+ set_color(COLOR_BLUE);\r
+ current_color := COLOR_BLUE;\r
+ else\r
+ if(current_color==COLOR_BLUE)\r
+ bt_color(DOWN, RED);\r
+ set_color(COLOR_RED);\r
+ current_color := COLOR_RED;\r
+ endif\r
+ endif\r
+endfunc\r
+\r
func bt_unpressed_s_row1(var x)\r
if(x<bt_x[BT_S_RBRUSH_X])\r
bt_lbrush_servo(UP, BLUE);\r
if((x>bt_x[BT_D_BAGR_X])&&(x<bt_x[BT_D_BAGR_END_X]))\r
bt_bagr_drive(UP, BLUE);\r
endif\r
+ if((x>bt_x[BT_CAR_LEFT_X])&&(x<bt_x[BT_CAR_LEFT_END_X]))\r
+ bt_carousel_left(UP, BLUE);\r
+ endif\r
+ if(x>bt_x[BT_CAR_RIGHT_X])\r
+ bt_carousel_right(UP, BLUE);\r
+ endif\r
endfunc\r
\r
func bt_unpressed_get_ready()\r
if((y > bt_y[BT_START_Y])&&(y<bt_y[BT_START_END_Y])&&(x>bt_x[BT_START_X])&&(x<bt_x[BT_START_END_X]))\r
bt_pressed_start();\r
endif\r
+ \r
+ if((y > bt_y[BT_COLOR_Y])&&(y<bt_y[BT_COLOR_END_Y])&&(x>bt_x[BT_COLOR_X])&&(x<bt_x[BT_COLOR_END_X]))\r
+ bt_pressed_color();\r
+ endif\r
\r
if(y > bt_y[BT_STATUS_Y])\r
bt_pressed_status();\r
touch_Set(2); \r
isStatus := 1;\r
isControl := 0;\r
+ current_color := COLOR_BLUE;\r
draw_status();\r
// draw_control();\r
\r
forever\r
endfunc\r
\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r