Skip to content

Commit 1e7f8a8

Browse files
Ernesto VoltaggioErnesto Voltaggio
Ernesto Voltaggio
authored and
Ernesto Voltaggio
committed
added checked state of buttons when pressed
1 parent 7955d34 commit 1e7f8a8

File tree

1 file changed

+108
-61
lines changed

1 file changed

+108
-61
lines changed
Lines changed: 108 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
#include <Braccio++.h>
22

3-
#define BUTTON_ENTER 6
4-
53
// Colors
64
#define COLOR_TEAL 0x00878F
75
#define COLOR_LIGHT_TEAL 0x62AEB2
@@ -19,7 +17,7 @@ auto elbow = Braccio.get(4);
1917
auto shoulder = Braccio.get(5);
2018
auto base = Braccio.get(6);
2119

22-
String jointsPair[] = {"Shoulder", "Elbow", "Wrist"};
20+
char * jointsPair[] = {"Shoulder", "Elbow", "Wrist", "Pinch"};
2321
String selectedJoints = "Shoulder";
2422

2523
enum states {
@@ -31,13 +29,34 @@ enum states {
3129

3230
int state = SHOULDER;
3331

32+
// Values of clicked input keys returned by Braccio.getKey() function (defined inside the library).
33+
enum KEYS
34+
{
35+
UP = 4,
36+
DOWN = 5,
37+
LEFT = 1,
38+
RIGHT = 2,
39+
CLICK = 3, // click of joystick
40+
ENTER = 6,
41+
};
42+
43+
uint32_t pressed_key;
3444

35-
static const char * directional_map[] = {" ", LV_SYMBOL_UP, " ", "\n",
36-
LV_SYMBOL_LEFT, " ", LV_SYMBOL_RIGHT, "\n",
37-
" ", LV_SYMBOL_DOWN, " ", "\0"
38-
};
3945

40-
lv_obj_t * directional; // Direction button matrix
46+
// IDs of the displayed directional UI buttons
47+
enum BUTTONS {
48+
BTN_UP = 1,
49+
BTN_DOWN = 7,
50+
BTN_LEFT = 3,
51+
BTN_RIGHT = 5,
52+
};
53+
54+
static const char *direction_btnm_map[] = {" ", LV_SYMBOL_UP, " ", "\n",
55+
LV_SYMBOL_LEFT, " ", LV_SYMBOL_RIGHT, "\n",
56+
" ", LV_SYMBOL_DOWN, " ", "\0"};
57+
58+
lv_obj_t * direction_btnm; // Direction button matrix
59+
static lv_obj_t * label; // Label
4160

4261
// Function
4362
void moveJoints(uint32_t btnID) {
@@ -75,8 +94,46 @@ void moveJoints(uint32_t btnID) {
7594
}
7695
default:
7796
break;
97+
}
98+
}
7899

100+
void updateButtons(uint32_t key)
101+
{
102+
if (key == UP){
103+
lv_btnmatrix_set_selected_btn(direction_btnm, BTN_UP);
104+
lv_btnmatrix_set_btn_ctrl(direction_btnm, BTN_UP, LV_BTNMATRIX_CTRL_CHECKED);
105+
}
106+
else if (key == DOWN){
107+
lv_btnmatrix_set_selected_btn(direction_btnm, BTN_DOWN);
108+
lv_btnmatrix_set_btn_ctrl(direction_btnm, BTN_DOWN, LV_BTNMATRIX_CTRL_CHECKED);
109+
}
110+
else if (key == LEFT) {
111+
lv_btnmatrix_set_selected_btn(direction_btnm, BTN_LEFT);
112+
lv_btnmatrix_set_btn_ctrl(direction_btnm, BTN_LEFT, LV_BTNMATRIX_CTRL_CHECKED);
79113
}
114+
else if (key == RIGHT){
115+
lv_btnmatrix_set_selected_btn(direction_btnm, BTN_RIGHT);
116+
lv_btnmatrix_set_btn_ctrl(direction_btnm, BTN_RIGHT, LV_BTNMATRIX_CTRL_CHECKED);
117+
}
118+
else {
119+
lv_btnmatrix_set_selected_btn(direction_btnm, NULL);
120+
}
121+
122+
if (state == ELBOW){
123+
lv_btnmatrix_set_btn_ctrl(direction_btnm, BTN_LEFT, LV_BTNMATRIX_CTRL_HIDDEN);
124+
lv_btnmatrix_set_btn_ctrl(direction_btnm, BTN_RIGHT, LV_BTNMATRIX_CTRL_HIDDEN);
125+
}
126+
else if (state == PINCH){
127+
lv_btnmatrix_set_btn_ctrl(direction_btnm, BTN_UP, LV_BTNMATRIX_CTRL_HIDDEN);
128+
lv_btnmatrix_set_btn_ctrl(direction_btnm, BTN_DOWN, LV_BTNMATRIX_CTRL_HIDDEN);
129+
}
130+
else{
131+
lv_btnmatrix_clear_btn_ctrl(direction_btnm, BTN_UP, LV_BTNMATRIX_CTRL_HIDDEN);
132+
lv_btnmatrix_clear_btn_ctrl(direction_btnm, BTN_DOWN, LV_BTNMATRIX_CTRL_HIDDEN);
133+
lv_btnmatrix_clear_btn_ctrl(direction_btnm, BTN_LEFT, LV_BTNMATRIX_CTRL_HIDDEN);
134+
lv_btnmatrix_clear_btn_ctrl(direction_btnm, BTN_RIGHT, LV_BTNMATRIX_CTRL_HIDDEN);
135+
}
136+
lv_label_set_text(label, jointsPair[state]);
80137
}
81138

82139
// Event Handlers
@@ -85,20 +142,20 @@ static void eventHandlerDirectional(lv_event_t * e) {
85142
lv_event_code_t code = lv_event_get_code(e);
86143
lv_obj_t * obj = lv_event_get_target(e);
87144

88-
if (code == LV_EVENT_KEY) {
89-
uint32_t pressed_key = Braccio.getKey();
90-
Braccio.positions(angles);
91-
delay(5);
92-
moveJoints(pressed_key);
93-
94-
if (pressed_key == BUTTON_ENTER) {
95-
//mainMenu(); // Load motor menu screen
96-
//lv_obj_del(directional); // Delete the object
97-
state++;
98-
if (state > PINCH) {
145+
if (code == LV_EVENT_KEY){
146+
pressed_key = Braccio.getKey();
147+
148+
if (pressed_key == ENTER){
149+
state++; // Index the next joints in the states enum array
150+
151+
if (state > PINCH){
99152
state = SHOULDER; // restart from the shoulder
100153
}
101154
}
155+
updateButtons(pressed_key);
156+
Braccio.positions(angles);
157+
delay(5);
158+
moveJoints(pressed_key);
102159
}
103160
}
104161

@@ -115,39 +172,41 @@ void directionScreen(void)
115172
lv_style_set_bg_color(&style_btn, lv_color_hex(COLOR_LIGHT_TEAL));
116173
lv_style_set_text_color(&style_btn, lv_color_white());
117174

118-
directional = lv_btnmatrix_create(lv_scr_act());
119-
lv_obj_set_size(directional, 240, 240);
120-
lv_btnmatrix_set_map(directional, directional_map);
121-
lv_obj_align(directional, LV_ALIGN_CENTER, 0, 0);
122-
123-
lv_obj_add_style(directional, &style_bg, 0);
124-
lv_obj_add_style(directional, &style_btn, LV_PART_ITEMS);
125-
126-
lv_btnmatrix_set_btn_ctrl(directional, 0, LV_BTNMATRIX_CTRL_HIDDEN);
127-
lv_btnmatrix_set_btn_ctrl(directional, 1, LV_BTNMATRIX_CTRL_CHECKABLE);
128-
lv_btnmatrix_set_btn_ctrl(directional, 2, LV_BTNMATRIX_CTRL_HIDDEN);
129-
lv_btnmatrix_set_btn_ctrl(directional, 3, LV_BTNMATRIX_CTRL_CHECKABLE);
130-
lv_btnmatrix_set_btn_ctrl(directional, 4, LV_BTNMATRIX_CTRL_HIDDEN);
131-
lv_btnmatrix_set_btn_ctrl(directional, 5, LV_BTNMATRIX_CTRL_CHECKABLE);
132-
lv_btnmatrix_set_btn_ctrl(directional, 6, LV_BTNMATRIX_CTRL_HIDDEN);
133-
lv_btnmatrix_set_btn_ctrl(directional, 7, LV_BTNMATRIX_CTRL_CHECKABLE);
134-
lv_btnmatrix_set_btn_ctrl(directional, 8, LV_BTNMATRIX_CTRL_HIDDEN);
135-
136-
if (state == ELBOW) {
137-
lv_btnmatrix_set_btn_ctrl(directional, 3, LV_BTNMATRIX_CTRL_HIDDEN);
138-
lv_btnmatrix_set_btn_ctrl(directional, 5, LV_BTNMATRIX_CTRL_HIDDEN);
139-
}
175+
direction_btnm = lv_btnmatrix_create(lv_scr_act());
176+
lv_obj_set_size(direction_btnm, 240, 240);
177+
lv_btnmatrix_set_map(direction_btnm, direction_btnm_map);
178+
lv_obj_align(direction_btnm, LV_ALIGN_CENTER, 0, 0);
179+
180+
lv_obj_add_style(direction_btnm, &style_bg, 0);
181+
lv_obj_add_style(direction_btnm, &style_btn, LV_PART_ITEMS);
182+
183+
lv_btnmatrix_set_btn_ctrl(direction_btnm, 0, LV_BTNMATRIX_CTRL_HIDDEN);
184+
lv_btnmatrix_set_btn_ctrl(direction_btnm, 1, LV_BTNMATRIX_CTRL_CHECKABLE);
185+
lv_btnmatrix_set_btn_ctrl(direction_btnm, 2, LV_BTNMATRIX_CTRL_HIDDEN);
186+
lv_btnmatrix_set_btn_ctrl(direction_btnm, 3, LV_BTNMATRIX_CTRL_CHECKABLE);
187+
lv_btnmatrix_set_btn_ctrl(direction_btnm, 4, LV_BTNMATRIX_CTRL_HIDDEN);
188+
lv_btnmatrix_set_btn_ctrl(direction_btnm, 5, LV_BTNMATRIX_CTRL_CHECKABLE);
189+
lv_btnmatrix_set_btn_ctrl(direction_btnm, 6, LV_BTNMATRIX_CTRL_HIDDEN);
190+
lv_btnmatrix_set_btn_ctrl(direction_btnm, 7, LV_BTNMATRIX_CTRL_CHECKABLE);
191+
lv_btnmatrix_set_btn_ctrl(direction_btnm, 8, LV_BTNMATRIX_CTRL_HIDDEN);
192+
193+
lv_btnmatrix_set_one_checked(direction_btnm, true);
194+
lv_btnmatrix_set_selected_btn(direction_btnm, 1);
140195

141-
lv_btnmatrix_set_one_checked(directional, true);
142-
lv_btnmatrix_set_selected_btn(directional, 1);
196+
lv_obj_add_event_cb(direction_btnm, eventHandlerDirectional, LV_EVENT_ALL, NULL);
143197

144-
lv_obj_add_event_cb(directional, eventHandlerDirectional, LV_EVENT_ALL, NULL);
198+
label = lv_label_create(lv_scr_act());
199+
lv_obj_set_width(label, 240);
200+
lv_obj_set_style_text_align(label, LV_TEXT_ALIGN_CENTER, 0);
201+
lv_obj_align(label, LV_ALIGN_CENTER, 0, 0);
202+
lv_label_set_text(label, jointsPair[state]);
145203

146204
delay(50);
147-
Braccio.connectJoystickTo(directional);
205+
Braccio.connectJoystickTo(direction_btnm);
148206
}
149207

150-
void setup() {
208+
void setup()
209+
{
151210
Braccio.begin(directionScreen);
152211
delay(500); // Waits for the Braccio initialization
153212

@@ -157,19 +216,7 @@ void setup() {
157216
delay(500);
158217
}
159218

160-
void loop() {
161-
if (state == ELBOW) {
162-
lv_btnmatrix_set_btn_ctrl(directional, 3, LV_BTNMATRIX_CTRL_HIDDEN);
163-
lv_btnmatrix_set_btn_ctrl(directional, 5, LV_BTNMATRIX_CTRL_HIDDEN);
164-
}
165-
else if (state == PINCH) {
166-
lv_btnmatrix_set_btn_ctrl(directional, 1, LV_BTNMATRIX_CTRL_HIDDEN);
167-
lv_btnmatrix_set_btn_ctrl(directional, 7, LV_BTNMATRIX_CTRL_HIDDEN);
168-
}
169-
else {
170-
lv_btnmatrix_clear_btn_ctrl(directional, 1, LV_BTNMATRIX_CTRL_HIDDEN);
171-
lv_btnmatrix_clear_btn_ctrl(directional, 3, LV_BTNMATRIX_CTRL_HIDDEN);
172-
lv_btnmatrix_clear_btn_ctrl(directional, 5, LV_BTNMATRIX_CTRL_HIDDEN);
173-
lv_btnmatrix_clear_btn_ctrl(directional, 7, LV_BTNMATRIX_CTRL_HIDDEN);
174-
}
219+
void loop()
220+
{
221+
175222
}

0 commit comments

Comments
 (0)