1
1
#include < Braccio++.h>
2
2
3
- #define BUTTON_ENTER 6
4
-
5
3
// Colors
6
4
#define COLOR_TEAL 0x00878F
7
5
#define COLOR_LIGHT_TEAL 0x62AEB2
@@ -19,7 +17,7 @@ auto elbow = Braccio.get(4);
19
17
auto shoulder = Braccio.get(5 );
20
18
auto base = Braccio.get(6 );
21
19
22
- String jointsPair[] = {" Shoulder" , " Elbow" , " Wrist" };
20
+ char * jointsPair[] = {" Shoulder" , " Elbow" , " Wrist" , " Pinch " };
23
21
String selectedJoints = " Shoulder" ;
24
22
25
23
enum states {
@@ -31,13 +29,34 @@ enum states {
31
29
32
30
int state = SHOULDER;
33
31
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;
34
44
35
- static const char * directional_map[] = {" " , LV_SYMBOL_UP, " " , " \n " ,
36
- LV_SYMBOL_LEFT, " " , LV_SYMBOL_RIGHT, " \n " ,
37
- " " , LV_SYMBOL_DOWN, " " , " \0 "
38
- };
39
45
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
41
60
42
61
// Function
43
62
void moveJoints (uint32_t btnID) {
@@ -75,8 +94,46 @@ void moveJoints(uint32_t btnID) {
75
94
}
76
95
default :
77
96
break ;
97
+ }
98
+ }
78
99
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);
79
113
}
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]);
80
137
}
81
138
82
139
// Event Handlers
@@ -85,20 +142,20 @@ static void eventHandlerDirectional(lv_event_t * e) {
85
142
lv_event_code_t code = lv_event_get_code (e);
86
143
lv_obj_t * obj = lv_event_get_target (e);
87
144
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){
99
152
state = SHOULDER; // restart from the shoulder
100
153
}
101
154
}
155
+ updateButtons (pressed_key);
156
+ Braccio.positions (angles);
157
+ delay (5 );
158
+ moveJoints (pressed_key);
102
159
}
103
160
}
104
161
@@ -115,39 +172,41 @@ void directionScreen(void)
115
172
lv_style_set_bg_color (&style_btn, lv_color_hex (COLOR_LIGHT_TEAL));
116
173
lv_style_set_text_color (&style_btn, lv_color_white ());
117
174
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 );
140
195
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 );
143
197
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]);
145
203
146
204
delay (50 );
147
- Braccio.connectJoystickTo (directional );
205
+ Braccio.connectJoystickTo (direction_btnm );
148
206
}
149
207
150
- void setup () {
208
+ void setup ()
209
+ {
151
210
Braccio.begin (directionScreen);
152
211
delay (500 ); // Waits for the Braccio initialization
153
212
@@ -157,19 +216,7 @@ void setup() {
157
216
delay (500 );
158
217
}
159
218
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
+
175
222
}
0 commit comments