From 732a93cf4d0a6801e472a7f1435f2c6d88f355bf Mon Sep 17 00:00:00 2001 From: Esquirio Date: Mon, 31 Jan 2022 11:49:12 +0100 Subject: [PATCH 1/2] feat: lessons and projects codes --- .../01_creating_a_button.ino | 20 ++ .../01_creating_a_button/sketch.json | 7 + .../02_designing_the_button.ino | 39 ++++ .../btn_style.ino.NANO_RP2040_CONNECT.bin | Bin 0 -> 345140 bytes .../02_designing_the_button/sketch.json | 6 + .../03_creating_a_menu/03_creating_a_menu.ino | 46 ++++ .../04_testing_it_out/04_testing_it_out.ino | 46 ++++ .../05_display_challenge.ino | 46 ++++ .../01_playing_with_the_Joystick.ino | 30 +++ .../02_handling_events_in_the_menu.ino | 70 ++++++ .../03_navigate_challenge_I.ino | 70 ++++++ .../04_navigate_challenge_II.ino | 70 ++++++ .../01_playing_with_the_motors.ino | 41 ++++ ...ecting_the_motor_with_the_enter_button.ino | 66 ++++++ ...03_moving_the_motors_with_the_joystick.ino | 63 +++++ .../04_servo_motors_challenge.ino | 77 +++++++ .../01_playing_with_a_joint_angle_gauge.ino | 97 ++++++++ ...02_selecting_the_motor_in_the_LCD_menu.ino | 161 +++++++++++++ .../03_learnings_challenge_I.ino | 161 +++++++++++++ .../04_learnings_challenge_II.ino | 161 +++++++++++++ .../01_aligning_braccio.ino | 60 +++++ .../02_waving_with_Braccio.ino | 55 +++++ .../02_waving_with_Braccio_v01.ino | 155 +++++++++++++ .../03_moving_challenge.ino | 53 +++++ .../moving_workspace/moving_workspace.ino | 215 ++++++++++++++++++ .../01_controlling_manually_Braccio.ino | 191 ++++++++++++++++ .../02_manual_control_challenge.ino | 203 +++++++++++++++++ .../project02_test/project02_test.ino | 174 ++++++++++++++ .../01_Braccio_learning_mode.ino | 134 +++++++++++ .../02_learning_challenge.ino | 162 +++++++++++++ 30 files changed, 2679 insertions(+) create mode 100644 examples/tutorials/lessons/01-programming-the-braccio-display/01_creating_a_button/01_creating_a_button.ino create mode 100644 examples/tutorials/lessons/01-programming-the-braccio-display/01_creating_a_button/sketch.json create mode 100644 examples/tutorials/lessons/01-programming-the-braccio-display/02_designing_the_button/02_designing_the_button.ino create mode 100755 examples/tutorials/lessons/01-programming-the-braccio-display/02_designing_the_button/btn_style.ino.NANO_RP2040_CONNECT.bin create mode 100644 examples/tutorials/lessons/01-programming-the-braccio-display/02_designing_the_button/sketch.json create mode 100644 examples/tutorials/lessons/01-programming-the-braccio-display/03_creating_a_menu/03_creating_a_menu.ino create mode 100644 examples/tutorials/lessons/01-programming-the-braccio-display/04_testing_it_out/04_testing_it_out.ino create mode 100644 examples/tutorials/lessons/01-programming-the-braccio-display/05_display_challenge/05_display_challenge.ino create mode 100644 examples/tutorials/lessons/02-navigatting-the-display-menu/01_playing_with_the_Joystick/01_playing_with_the_Joystick.ino create mode 100644 examples/tutorials/lessons/02-navigatting-the-display-menu/02_handling_events_in_the_menu/02_handling_events_in_the_menu.ino create mode 100644 examples/tutorials/lessons/02-navigatting-the-display-menu/03_navigate_challenge_I/03_navigate_challenge_I.ino create mode 100644 examples/tutorials/lessons/02-navigatting-the-display-menu/04_navigate_challenge_II/04_navigate_challenge_II.ino create mode 100644 examples/tutorials/lessons/03-playing-with-the-motors/01_playing_with_the_motors/01_playing_with_the_motors.ino create mode 100644 examples/tutorials/lessons/03-playing-with-the-motors/02_selecting_the_motor_with_the_enter_button/02_selecting_the_motor_with_the_enter_button.ino create mode 100644 examples/tutorials/lessons/03-playing-with-the-motors/03_moving_the_motors_with_the_joystick/03_moving_the_motors_with_the_joystick.ino create mode 100644 examples/tutorials/lessons/03-playing-with-the-motors/04_servo_motors_challenge/04_servo_motors_challenge.ino create mode 100644 examples/tutorials/lessons/04-integration-of-previous-learnings/01_playing_with_a_joint_angle_gauge/01_playing_with_a_joint_angle_gauge.ino create mode 100644 examples/tutorials/lessons/04-integration-of-previous-learnings/02_selecting_the_motor_in_the_LCD_menu/02_selecting_the_motor_in_the_LCD_menu.ino create mode 100644 examples/tutorials/lessons/04-integration-of-previous-learnings/03_learnings_challenge_I/03_learnings_challenge_I.ino create mode 100644 examples/tutorials/lessons/04-integration-of-previous-learnings/04_learnings_challenge_II/04_learnings_challenge_II.ino create mode 100644 examples/tutorials/projects/p01-moving-braccio/01_aligning_braccio/01_aligning_braccio.ino create mode 100644 examples/tutorials/projects/p01-moving-braccio/02_waving_with_Braccio/02_waving_with_Braccio.ino create mode 100644 examples/tutorials/projects/p01-moving-braccio/02_waving_with_Braccio_v01/02_waving_with_Braccio_v01.ino create mode 100644 examples/tutorials/projects/p01-moving-braccio/03_moving_challenge/03_moving_challenge.ino create mode 100644 examples/tutorials/projects/p01-moving-braccio/moving_workspace/moving_workspace.ino create mode 100644 examples/tutorials/projects/p02-controlling-braccio-manually/01_controlling_manually_Braccio/01_controlling_manually_Braccio.ino create mode 100644 examples/tutorials/projects/p02-controlling-braccio-manually/02_manual_control_challenge/02_manual_control_challenge.ino create mode 100644 examples/tutorials/projects/p02-controlling-braccio-manually/project02_test/project02_test.ino create mode 100644 examples/tutorials/projects/p03-learning-mode/01_Braccio_learning_mode/01_Braccio_learning_mode.ino create mode 100644 examples/tutorials/projects/p03-learning-mode/02_learning_challenge/02_learning_challenge.ino diff --git a/examples/tutorials/lessons/01-programming-the-braccio-display/01_creating_a_button/01_creating_a_button.ino b/examples/tutorials/lessons/01-programming-the-braccio-display/01_creating_a_button/01_creating_a_button.ino new file mode 100644 index 0000000..1cc8416 --- /dev/null +++ b/examples/tutorials/lessons/01-programming-the-braccio-display/01_creating_a_button/01_creating_a_button.ino @@ -0,0 +1,20 @@ + #include "Braccio++.h" + +void customMenu() { + lv_obj_t * btn1 = lv_btn_create(lv_scr_act()); + lv_obj_set_size(btn1, 120, 75); + lv_obj_t * label1 = lv_label_create(btn1); + lv_label_set_text(label1, "BTN 1"); + lv_obj_align(btn1, LV_ALIGN_CENTER, 0, 0); + lv_obj_center(label1); +} + +void setup() { + // put your setup code here, to run once: + Braccio.begin(customMenu); +} + +void loop() { + // put your main code here, to run repeatedly: + +} diff --git a/examples/tutorials/lessons/01-programming-the-braccio-display/01_creating_a_button/sketch.json b/examples/tutorials/lessons/01-programming-the-braccio-display/01_creating_a_button/sketch.json new file mode 100644 index 0000000..45332f0 --- /dev/null +++ b/examples/tutorials/lessons/01-programming-the-braccio-display/01_creating_a_button/sketch.json @@ -0,0 +1,7 @@ +{ + "cpu": { + "fqbn": "arduino:mbed_nano:nanorp2040connect", + "name": "Arduino Nano RP2040 Connect", + "port": "serial:///dev/ttyACM0" + } +} \ No newline at end of file diff --git a/examples/tutorials/lessons/01-programming-the-braccio-display/02_designing_the_button/02_designing_the_button.ino b/examples/tutorials/lessons/01-programming-the-braccio-display/02_designing_the_button/02_designing_the_button.ino new file mode 100644 index 0000000..8818453 --- /dev/null +++ b/examples/tutorials/lessons/01-programming-the-braccio-display/02_designing_the_button/02_designing_the_button.ino @@ -0,0 +1,39 @@ +#include "Braccio++.h" + +// Arduino Colors +#define COLOR_TEAL 0x00878F +#define COLOR_LIGHT_TEAL 0x62AEB2 +#define COLOR_ORANGE 0xE47128 +#define COLOR_YELLOW 0xE5AD24 +#define COLOR_WHITE 0xFFFFFF + + +void customMenu() { + static lv_style_t style; + lv_style_init(&style); + lv_style_set_bg_color(&style, lv_color_hex(COLOR_WHITE)); + lv_style_set_border_color(&style, lv_color_hex(COLOR_TEAL)); + lv_style_set_border_width(&style, 5); + lv_style_set_text_color(&style, lv_color_hex(COLOR_ORANGE)); + + lv_obj_t * btn1 = lv_btn_create(lv_scr_act()); + lv_obj_set_size(btn1, 120, 75); + + lv_obj_t * label1 = lv_label_create(btn1); + lv_label_set_text(label1, "BTN 1"); + + lv_obj_align(btn1, LV_ALIGN_CENTER, 0, 0); + lv_obj_center(label1); + + lv_obj_add_style(btn1, &style, 0); +} + +void setup() { + // put your setup code here, to run once: + Braccio.begin(customMenu); +} + +void loop() { + // put your main code here, to run repeatedly: + +} diff --git a/examples/tutorials/lessons/01-programming-the-braccio-display/02_designing_the_button/btn_style.ino.NANO_RP2040_CONNECT.bin b/examples/tutorials/lessons/01-programming-the-braccio-display/02_designing_the_button/btn_style.ino.NANO_RP2040_CONNECT.bin new file mode 100755 index 0000000000000000000000000000000000000000..00d92a93265760362103ada747d8b42903bd1c1d GIT binary patch literal 345140 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

egHd$k_EQO#-1kR}5slsYgZ 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�h z{kQb=)QmodcZWxm_%G};ck8}%(Dx5KspKEd8a1zp;RJ?F1}?``fCrzb$@jOGW zfyn8-%x8Clcbr4-a47G|cU-K-z8?B#0@TQ6)PauGhG{0{5Z8eJ%h^L+RXEEx8M<(n zZ-S%;m6CP&>He8or9B94>8t2zk??NXiuS7NyJ$RsIT0;}+hC!ip1filaPI;ZPU8W- zv)Sj?d8&+M`Y5*FzHoT?o)AdThG!-c>iL#Rkc`$~r(}u8d`B{p9g@_zcF{gb&P@G4 z!XEwKbg>w7q%MbutWwnCQ@vu0S!nU@f-PK(*%0*A(tdG6C7mgDP^>`M3gF$uEdylc zEn4Vz@VoMwGY=^a4##YH*-Mf$o3CKUl=ruC+0P4i7YJ=KRfBATdKff|h8-e1U=e%a z{DqYTK6e32?<V{S9qHS16sB#eFT*S$-MC1daHxG0sta$K0@ z{$j%{!(E}4$emHUNOD?pTiGyJLEfXAY=^zrF>PhxmT-7IE7q@shqUxg>Fy}oYXxm( zVY{nl$cez1WL&9N$VI!W^r5?xj0*Ww<0E*N?5@ybzHE%x0UvisRgfFw+Jvxb0DWqk5TYpI z*u4rT31O{LiW?%SB|hV#L+Q*hMqm$(nzu?CZL(P4im=b3HlAQ{PZkZS-AF)1`pMw; zEP*BA7^H)oHO9iS=`kOCz>ye0-(V($ZzWiPxZ#ihf~5+ZLOu+4QR!Gc&$LBZVb>kE zm?C)8s+tjDX$Joeu@)*HLhn`w?^)@cEA9Csh?qo~2i#pg6pOVgE zvLP~AU}Q&uhc+BzBgvPAQ>Pl^#OJOWpm)+x)J_5Kua4jT24p}tVC@O%z&x6gOvYk; zJ&(2NcRM%9<=lXk6?3xdW3MPN)lSAt!OA+|zB$0zt}kf9`Kc$)6pyolw=_kV7>P3; z&t%BtBpa!ALIY1tniixH0anoW{Su@f>U!EkXVa%VdF)<8NJ>*~vU?+}l%#cHCT0th zC)Z%Y?<$Xmd_3V~&ZC9|L$ZP9`Xz8HiAMT1UoXLq0V4|M{lT@CY9@UQ{<|=T@_cy6 zWc%H1ev2uf!S6I!j6S6z%X5C;+#otzFo-VI|#L2pW$VLgG@f<79h_U6O-efb(6}2Z=+h zG%ai`T%$ahn}NCMLvU)|cP!033jQo)3xW3pt1}I_6jg?q#<@d-%JQ`y^njf5ZAl7k8^>mt}s(cYteQ|z1SiEzxs%AWfJUK z+v!fo2fsJ)QfNREU_uf0&v}uZAsQO7%TM7wcHp5 z-(W9xMuCU;96V*sfdu9vV~25%k<(bT1Y93+!wut6qX6@@$ylfR$}Zgw&$t~@@HViM zgIy4Mwv}RM)@BzsG@DmI&V#GFY!>DcoX}yX7utu!zV8CniNAu;BR*8R$+D?!6SQZP zvCoc#MB~E z^)O1I!00f2=M-mrp4uGwxSA5=V2y&t=TV={+{-sGj5+f7!}B2yg7 zBFwquj7o#2X5v?m!VVM*a78Tn(6r7p*_2xi-55K38t^ii-dqk@p7OYbiO(^)?miPY zK{!clYtmhEtb-oRHgKi6Dbo6Iv;@Y!<00q6u>KZ~`E7nb)?%f!(Wt-VUI>e9ADGOh zJX1E4!xGuoR+lRlCpO5((+rpHVhZ}W30IxMj6_hx zOqVv&PFt8bKJ39QNzO6TdeaosA@urQlW@`vwDMrs3Nz2bDE3Xqt34!%_MnNdgKH(y zv`D*X&oLQpTpT-lG9X{pY~H|Xwt1a2w~tX0K|XoFEx{~B$1btUd+4aT!!x1>8W;9Y zJF_A6IRzyR50>H$ror=9mwS?bun!3){o>>yF(*i(r5L3BF=%JrQW7!J5KOx1 z6kA1&OZ2oPul6c?1nK|VHY0Co8`_dD^$G%QqY>{8x7;1fwO}YmJ-vap$z$zq2KIHQ zkmY7DCp1^Iq*uB#&?^6_i(AY627GOGbfZNellNe^*d~}zp%?9$Dwn3kuy0S}+rc)G z21`P%q0=1Rjx>e2Z$JX+gKk(4O%^wwm5nfk9U5U8sisgkAUanO$ARvV>KJ8Uo})77 z;mvf8gQu091MbW|adYDnkT5ZmRJmgjqyl-zI>;~Tab|I|?Me6(NmV)|4O(MJ9pyud@{Ib)cjw7;kT_AQ zq5p2)Y_dDWNvrgE^63bhyx=p_CQ~3rzlKV{ppUKj#3_C==_x^KIArt5jtI;m@AV22 z?>H|3pIDmysl&YBZKn`Eb?Dk5#f|hzLg(fRQgQbot+yFzG7`MT^ql?}K+vAf@fTPp~+u70_8BV?f?gicmoObR@ z{>_S5|V#*DoIr4fcs7_)%F|?NXu^JI7mju8K_iBszLSCFlopVX*JnW$ojF4Hvy@Q6l zhFXw-&pn=%(u{P{y!>7XS*<7IhCy;5lXSULV83;8VCx9^#?~4ns;tqDj!M*8eH{Q~Ia;gf6yiO~Q-1D0n%ah55$cPw9m? zMl^)DW*t|gTh zG0Lc(reoC7FP6}a_u zB<7q@&nHcDDdt7U8-zL3GjuqJ#=aQ7JvX69h1p3`JkI=@~ zC9>Ls#Rsw%CHC0#}vC54&gBqb<2kT$hEA~Nx40~4&=jy6?gA}5% zL&+jC?<3<3lQQ=1MftzOdj4y@bz6D!#w!xbUod>5cY@q-4~f&y6_w={T9a^ zIUAwh{U-0!5{_O`)0BRhl0;Qd_C*pGWPfkwJ3)H0sLbsj6EJ{^pHaKxY!_5pjV1SJJ5 zmQ&u+06ZSjnh_CLoH3!3GhfQy+FTxfboy{3nw&_k*g!l1B}KU2n`*g zao@lojW6t@ockHZc%&(|D_NczFpg>mesS7ZjLIK|{x;11I&4Xt8p80q$9V^-oUs4i zvz_6Ffl3%K!}gMKM<_1%u`1G#>2og{_`6LY zJqhGiU?oG{kaKR?l=bV@Q(3II<;T`9THd?fx_rupbIaFnhYuwnnIL4*ZB~m^(jm5*0PljyyC28aYv9&9MTbH#Ikf$xRr@Bs7XH3Qt;)n582bZ zJ~>;#`?KNW#_%Pm8$ey`T*xTYV@%yjd)B~O=iMyk8N}c=6*uIVTTzA*MtjP7GG>v1 z)?CkAwR4H)?w&%1y&5@@+)^8Uce^LU*@b8+Cg#4mQ*(Py*9s0ZA90ABp$$_= zS!NBm>)~0IG9@@;e+iBmI>!I#$>`z6z-KX)2kaSc8)3~OjlfyqlaLTt*l;EMkZ?`f zD&^q^vEQxn-;9^QKCf`RsG~g?CimX~`5NB(L;TJ72I&=PKeV{k#{W|uYT zos7n86POcx?hpK!E8s_p&Ipp=oOy9BEUm$}!uoCzuocG1;2^-OJgn#BV4eKRLtCeF z?l0hNaGDyme#zz~xWzs?U-2qvGp{L#M!wFa~m`Ru^$odKOMfE77j{fdW zfL#Vr;qUG{dto&PzxrMw>@m>asN*}I=b}dZg^OAVTMU%Xqkrg`!{>~OYWRS#s9`ZA zlEBKjn#*~;mh3InuhxV2SKn3J4E;P#Njc-nT7j)bPW5Ug6Pb*&Cc2b9+%D$&Wd!r{ z6<9Ku@es8vLdM=^*Wi3Q+@V_0g;OKFnN1+{G)Y(GCivM~D9a>?F3zV}Q7+dkNhOa# zUv31nLU7v0*%e|$7FbVl&*z-#0EZYBoSmDnnsUH*X|y+IflFrhg(6fKwb}E|<2*=q^gQy#=<1VNH6<*%o}6 z9!E7{ve9ZzSP!>gu7{k;>#&VU&!?J)pi7JW9j}yja=B=?ymYith@GUvCjd0HqM&QV z)n}MC=KsU#Pyf+gqxlS)1$BFSfetAoFXxWM~=eh+c~{g+Q}=e*<)S59gmYlL%K$4eKe zlzbq+2Xt>ZelzDlCOTH%wE1E45tf&(&8Bs{h9{kmSoK_byj`lir!x$7JlqkDnK^-| zrg7tbZ%+t$eQjiNhPG>MvH5jb#v_6(LB^GKs{ebrz1A6x`_hZf8wo`HCvLC<=5=xLIj3Fc@>`(d51{O-sIky;`( zQ7W7kw0`#*p9B`f1j-1^D^lBokhXn`RLS{0u&ci$12QYHhHa)=IB&_Ka2Hz5TJ&Du zmI9J`2|OvHmR04GC~)Y-_4#ITgU|wh=5<NNx2RlY;0xo zv75-J_KO-`usfyupy>*U)v$EZQS0QvRpT;$8mg6dJ8x|@Vn5x(@6wJV?Q5}%jZ}{| zPoI{L8X@+T@LD6tDMVgIqdu-cr<|Ubh81y|9RVL+*ZNw+fD@AD+}fm zf5rSoT+Y3)1~O{y^o(C|3Y(q-d8~0?J6`W;hy3gQe+r|NCxuZp8lf`Kj(0i#J1@`l zG(AUmG2@(F>^BYV+VzA~2|gG0v_xaojcdQK;q?tAI8hNt9LjWs(`Jg z0<(}k8mFZiQsysYRcrT<`PF z5X%|Zt}0EmP7kdQZ6sT(#Yn4=o$G`&zg8P-+gNAd<_!97=$8+W zpX9^gAu*AV)Dd+hCqgEiOX6TTic%Z_io|iV^PBU6ka+nWV@U_+j7%13 zM}jv&cpyWmn_=u4t8yl6_q8sD51RxVV_O(E3I4az*5ddf6BBFFpO^z8n-5Ht6*!y^om~qRr? z)JL>bY$R$^xRuMiSAS;_m$gEFO!ob#Peh+Yd?E|8eiHM&g2KNozN2IbuomclW>n_O z!}iq2%m)oh;Z>7h!XYP@a|&ZgzPc1%Wa!--ykgrdknI#eZlX@hTZh5t^ax8#+#>z3 z2KW!cPBx-Gyj~EnF4QjX3B}EFdS^uAh=z5t>H38-qKPL7&_fV6815WyAJ!n1#nwrQ zxKnI?OI~1pP5!J|kZF_0?tK>8vW5aKb4x)?Lx{`?-xsH~|I(h(TEO2PVY=JomkF{l zPc%dm#p(}qU$u*wy^?4v)%Xn$-kX1fGZI}J>u?a67fs055Q*Q9b1fCAJx{u~Q|hw+#&OIoqm`YL8mYd2@TceNCjg=!{M!tN0d-${pbT)PyKYCn@> z71G=~d5x$hLRKL)2^ykg0eF@v3^hsHz*@1*B*^N5^%UuDX@f#BOTQ5IEyH9nt9KXR z#y&X~Qkk%=g|jNZH_~*!`7YBwvmoase6tt&kfAuGCCQe|Xx9DgxDQrZs=GPmyO(Y) zJFN>2J9R2wpos`oSaeinX`!3zO%>O2OQ0Py!&B!O-W`7zbo~9;8+RI4YRR zOu&&vsadBnAML*gdAyHcC&7Vz`&sbh2uB()NBtfmijpDhc{}b*LPb%-@o%CyL_})v z&*2|j9?05>$Tijz#-kmQ>{o+*Iuq>>i*&NdVV2_vz=JuK03OUS*GI=sJ)g?3dQppq zv#@vPOPuEzRRL_Y-fsV{WC|N8l`s$U1+0y#O^+saaO zu@pbWSFJ@S8T?T&#?Ic}Ma;3H_AIIMLza^hu&O-Qek52v8FJDDjBH|L*n1fK0fS!# zJeaHPfCqE+9LvYxT(Jc)uVJpBedVd%K%bb)-X0IWEe!UMhl1}lEY^tcUJkb862Lpr zl9WaT;JmC~dg@tjAHc2LRC{f(-fEHC*@z#^RRQ3w!JeTF*3RT$YI%s;9Hf~IxTa`& zFeU?UPX<#?2E0C4Z=(S}j+&ymkOQ`7B{&~pxky4T?y)Zq&YX0n4M99nA7;1$2480I zfcHOhl^gJ2PHzCdKbV`V-axAczP^N*vS1m0^xoR0-v{3UwP_E&6$VRj65q`Ue)k#R zS;3rt47fe36*k1_D)Uc|IB}XiFPL-M+HWEr2838{|H|OBAjN$wUxV%1fVlC&cCGgY z+BG_exh+@%dGLJ`%iCFA6?|WhZz*o4dR%7;%g1JqB(cao@|Ip_1Wq>TWcgUa;5r6Z zFt~xi_W&NO!MT73dtebuKQ-$tzXv{t+cC!J_%qL*v`b5uOU1_ zc!cq!4)Ha>`{J}PDjaY(%V9QZ3VtJkJ&o4XD5N-r1Zpap!FHCbFu+Q6pr42sT*kuv zp8w?53z+6M*J)?e1t|X{`rT|C_;C!J7QmL;K2Ln|y`1@)3$(XTwuAT@D+N#AXn%i& zQLE=eg6TGbhAXR8y{G$iMx)6uNsP7c#$F?5h{j*=P0lSeHhQv*^!rWSjqIDPxJQe$ zzjRBDt_Ib?InM~VI?L&NiQ%qA9<%LRZmFL##AgRU)r3qya-@zaKk= z?f8zUAGl;>;R&dVn~voS9)&W_u-_9b<8}9dzp^;ZsDKyBNe(mHm0X85_+aj@yRQKb z01(|Jfj|Y*IUh=5Q18AXL-&`?~uH|9^HW*WHieO{s3g zPUE`!Az)#oz-Qs-eF==V8Mlj*?Bby|xb9wzE!it5O?F>vK^ev^9oIYXOUE;Z(TtlI z@-fEyn^?mq;Qu7XFHau(YYY zXOVq9_OtJxbzv=}*UZAlqgDj=M-cvD)^BY7zY57-Nc7kr3f93v;9qx3Q5vQC0$^G; z4sR-TCWHHYbnlu8ns@arV>E^MUTD7`G*2P)KyM`r^@30NyW@Ta-vlhM-wTXSv)*@> zv#=}FH;8>c`d>%ZiJp5|*iQpu>|RR{b_JC7_0DIZ-vBejKJ%9L{t$V%k=4{w%;LYm zR|5MT_^L(|>72>JjtxjKD@?iNn|=5uFygMe8vzGK+;z7F@L->P0dQ(oO!p*4qXD@V z+OelWzWwg=-awCe0inD-sRXxl-rE@77KBLcql2r^b==@$hn%&bCym8E%5o<|?pm{o zdy-k$N|b1nJvNxTMpol@;j3&ycMsRyg}zp{`w5H?9b#&--sm31zAZs&oCE#5R{)xI znqA;)_M_ctUozqMZu}4K2@e4N0{@-(r~AUY@&7#jFXLZ`edOSNvJ?I43-q6mV$)H@ zitzXmgjdBV&%@`p*j0(^3sw9L_qsmQaj|O_E<;-jT4`FiTM^>k>n<${@RobP5y zTr>Q0HEl(>72ipAw&8uM|FgUDjCR~rul45{|5a$ul)9ex<{8@&vH~Gr7Pcc~GeW2h zl}i7y;%P?33TbX2Hz&Nby~VDTJ}y2LZTYB2X*^LV#TT=^5|zuCjQ+pCFU{p}fXBV4 zXE3aIC~T}p6vUez4D-8_AQ8S?MXB5adIuRjomXj$LJpLO^Q)o|Hw$rox6JQXDUDLs zbkB}rrBPlhb>(<=2B99$3&qK7)xqtb>p|}@q~v!;K!=FtCeo8{e6~ag`_Xh=q8Q77 zaTyr>KFp~NQkU41XOtn$9$&sOTqT3evvmv?@;D6dauDx3niG{QQ{wXZA7^P(_*eg9 zL0IYv@o0=IOJq4bz7s;e>~!$U2z<%mOQ~z5=Yb*YZNR3f-8Ymol~=}6{2TiYvodl- zF%}GA$b)&`%P=Ia{r&(($q+_#5aWd)#>@T~WwKH1S~DQa4Yb~P4;O5U4L*diT8c*w z_oEJ$`jp13ZTnHKul<4`meIGLVM!p*KNxo3P}slFQX5tDi&j7fKtl%_YqlLg$Xi4B z1-=788a9ScV`0bEs04nxFM+k6GB?mZA9|u#3ywtzXbZ-nebD;&Lg!Z$=b`l}oa5)z zQN@ZCv09+MxMci5w8660PSh{=q16J?`gJ`Kh5lz;2CejXza29J9Hirw33+s8@+=n{P1e@u4uY@2jG(i@z?3H7Jc=7nfyb82pg?QW{ScmZ40Q zXfch7LQ4P{&~~#CmqrW-DP`?Sp}PUKBJOs?ajI5?+<}k)vI zbAB0X^K9go)`hP>-*~X324y-JEE91#fJ4Wvl9fr~Qe$*bj8}#*P6aU{gBWsOp3#id zyr5k*ApR?;g$BgE1)9970X4KAAx4C}h7d?20D3YANg#s~2$Q(p z0c1kl_Wq@;_DsRrGy0{h_AJONt-bsED~fN&jA)uzRzk-VaT$O?>uwV;GST*121<+X zpcs<^@e70T4SOL2dr#hRd35f$UH{za(`ZsBF8Awm=fS>fg8_o zwFt>aNcA=fT?dq-qRu)xd!K^M zzjF~E!!Ri{5>Qqxg<1g}23}{M(il^C7$LMBKS0R$2qCHu5ONkFClT^h-|)`BUWd*Z zbS}~UNR)qEga35=R^yk>A9OCE^MwHQKL#!EY2V3-fi|dz_4`2B`$J)MD6b2&_an8m zZ7!tt2}1lT3Vq%$4&v|Yb1@oNyMgB}q_KZNt~&AMW`vwnbs}UJLM|g@JwnW?%LsX4 zKw~V6_an^Ir$K#D7<&VRMuPHvux#>hpFfzpB!qIR07fz>g=Et2?q>O-u*9WAXch}C z?AwIZxscE|i7OE~p3K6h^$nJ=pl|ZT0AWFCK$_OR0scV7Vx`Mvv?ZcvBB)p*@pB&Ze^*^!F-_Erk@8xU&0` z(SP6Ro1W_rt`es}xw&L|W_2}<{|aw~?5hjC!e9=6?kz-0({+?CEZp?c5m47h!vbT# zh5DGszWFCo;#3rtxE=+iU3bmPoXqn77~awt&QahH6@?|R-yRxF;>&3EWkc^^O}^3_J%l}ds0Z!3C3I6i9qY7ypBoDGyC3Wwto53qP>HJ+>B(6N z4 zxLiYRKWzxZ4}Z}y$}w2KM|;^){HY6zCNq^K#5g$LjO zj>J_4Djkf9+j|@9IUUH?tv$!<4U9%--`F{vDwAPLTs?i6C?EY&;*tO!UEC3D6L)VW zN)w1Vh?s+n`bqDo;z{V22PgT1GwO%^ffeQy=u_Q|r@fK?gYixfjO525=NI^WQ_h3;blsqA8<@VjSte?uu;#uT*v^In!4HlLqC z9m-WSub5E)|6F`9Sf0PJ+6}~f3iusX9s{e}0GxLVJls1-eX;i)T2@AV52H@8C9t-p zG@dPfCrG^pZ&FntrXKKzjCvNM7=S}=fxEE_J;gAT-p`7m$8A0}!9O8T7h_RdbYHJR zNvX6@hv%c&9~P%joS{0`px;uQ$Y6~+Jn#Guh9XGC=LxjRn@G{YQgnL$%5WV+)P@DA zT@K>z_w4x}3~>Bf_3sDVm@VQzQynZ@S0oTO28Kw z#%@44Dhgx%_r@qwu#9{0sY@!q_o**Rq^mVP%2uuC746Y!2r0 zPT*FuuU6q)7MLp@^;8ax*b&HKFY*r3nCPhvrjD~7zFf#?B;ceHNMnp=;ZW|DgTn1| zC`MMT1pEc1QJ|u4n7070VP6u^m|RO?tRFbNUS=ag;8{a!g!NfHdNK|5xjp_hlcwwZ zlR{c(jXLqAP!;%cviBrg*8*?XL46%4`XKkssgjHtE7qZRhC$vsx~otIy*Sr-oR8rp z%(cfme74f~G{gPKAH~|@X`~#6-59a^F48gUbAOBzD%JO>^-G2@X#5{6KKy_77IduB zxqyy)A9$66>m8*4`D5c&mf9Bom6E}7J@4N-RN6BrRaPy_IKTJTD36InM9+ulR$(`1vee0^4P${wsd}MY<-z7Dh0Btmo7J zihnuyeRhz3Cw793EGG*8(Gt2+(w5Tr8;45t4f5(`7@>Z;TGRMgzc(0Plj3v#8#F#4 zHyDlw@LvllEOwoMwV-yn51I@bV~p}AxyaQuKu1$e3f2ys$v+|O@{KBqD-5u7625HKBNsy8cHX62+Xs~j&%f;~K zslkr_GH9Uvec%Qr_JhCMvq($P29isg_ zFn*G+W~UZn7hI$#Bp-aBZAqs2cowyACotY3W$@FDe!|L82FjU$u)9Nv)(p{F?puU> z(%wUJ_aIK+l!Dmxb}(;QwPIHTU=B4Qb~OX~Q9d`A^1m(w`t*E!m5Cmi=zCVJG1im4 zvYA1Q&x07#8Ak0Gu?uzraI4>dw9=59z4B>6%%c|qr5Nk0OQF=nt^vf;+JRjmKz^3~ zRF?h#wG4{=g4mUT_Za1mXwClqKu8usAjXNjdI8ay=0{NASo&huy5RQ*gWqrU)0r>{ zwdWeRB&TbPn4a0yam8`q;X#trZn{8}*W9D}adw6jrqEU97rH9^vBmH^^lx4Rizl#A z>T`>HLh#B&*sZ75_}n9dZ(sHM+;P4E_rpFKn&=Ch8wS_)rAk8R*rvRRuOUN3xoslX ztBgXFkHYo%e!9;E{uH0VIcN)qqCKDYT^VmO_*gj{7I zmv5o0$4Sr!nfL$DIqj!(P9kJ5^)^3E-R^e<(}J%q@NE3JLmK=Fz8_gg>MbETEF=>l z0Xlx@euv_#skem8WFa#=E~A*0!tdVU;eoRqID;X(SxDn8Ax$h~|1EU%eU!4c?>}i3 zvyfT0ge+wtm3@P?3U7WaHiq-v=0};p20No@HP=|0nCD)DAkM}L4(tMz3%{I zXP@i&OAn6`3E@>cH_J4W_D#C?^-;&d0m0)!I3v-|gJbg;^Op110998a$lr)9MhwV>Miu=Vj8 zb<@fizOf}0+F^5XgBfXGt{GFEN{&2y9X_!R*U<1-f742gSx1XTU2S=oesPuyd@+gL ziuwazJbvBX?Ne8qHd~(Kax9xo$G5g9)%5!$V0~#PYE5;FlBT)5TIBky_wduLPR~&u zmO7u)Jve_RU*iM>~Yqu1G;@8+=4He$u*o_P;%&0IdRrj`PLT0iV&B{=Q*xk*-YAG^4eEl*bXgQUPaUk?>TnQcHqNv8sH-d zr(|1OVt9&Q=HqhTYH510S=ZGL8)vW#D+lhQIKcF_I)BYv9C zTwfaITale>G^~(hZEXp0eF~kspWQ$Cl;j%L5$b*Gs4lCGYMG^yg3KDClqD7kRj{_= zy6nBy@*$+XGd*Z0{MLHLt6zEH)q7}7M)~RUjIV}%&s}lq_$az=jmlfpOn?j%WsqTXR zMD=96Io+$liAg0_+|Q#tux|_+0#&%{v=@}HN?vn+)6XH^P0tKSqlu*vgEUU`XEWWg zpWUbXCKF1JQk&VEiq^d1UItq~@#+xVmpa|kdWkw7d3U<|y&m|$ke(86}7v34R;o_ynniDP?xZO2>X}A3qxJb-W(FIjz#I5?r88rsK>k0 z4C5o1^rO6X{2U^HGoE{`CjsCmH{y zqfYnVy^z;)@9n3$X&mN?RJ_^xc}>?nLbx5a!Fsv6mM;v4SflB9JKD;I@9B33p?i1@ zJYahFhSp#$wy{5>R#JE>Zfi@ZE2WQPVUPCns_J{V$uukh_qtBVG`sQrRxej~&AkL| zbqzdbK1qUp+_bk^!X{8XO3MBCZXgq7z2=_P&rJ;} zehn%aU1d__@UI^Cac=6;mY<#BW1%sDIVf!EB_}uG59fdKP3QjEunR!jXf8@l?K*Zs zJC$;}TYcOFu67CLd+^R-b&Qa}S}_556h99orWV0YqW)>GKj7ol!op4W6e=+0@xBe; zv=-3v!KYu*FYden(h_w%MmG4K`9JTe|MRY7?;P%p0^iHn`-q|Mqu6`Y(7W`1-pSCr z=jbpZOvxojRwU)7VjkcfBG<1T&vB8<@1dS3^RZ%Sar%!%uTc@~B+%nUuJB%Huo5X! z4<|{PQJ7PfB0LKGc9H9Tj~YFHRd(#tu{C^lY)$ObeD>0uz%PBm)}{KXoH)cSssY7p zYfWeopC4BvQP*aLK_@#7x-7AJsoDa+glgy#Zpkhu&rXP~(bPmyUoqIP!bfHiQT;+S zU{GtV1=*+vx^`^J*?O3RjaEgikUXc0=@^4?{eAD2i8-|rv;yonyAAysQk$bNi%6VA z_zj)GeSOrrD{oz|9~CnNI;hMSa>g15ZKc!xz_|0f$NKlHnzj`eEmow;o|PYIImJUJ z#_|j9DQaLndn?{>zu^C*B~H_Q-$>1c`!=@-EPXOt%c(f=p>la!jmS2yCZQI(IMbSS z@#pxxY2-eACf4L*eF9snqBTxvgSBdzxLH=i+ZyCQx!*=OOx(&~odTf^HFQS%*}c7w zYL@;LdXdoPo3>c5A)9g%YcZN{&jPI-L$qM6B1o$Yv}*sqv{v?Qf~6{Af5J&H_8>>% z%c-TB(UO>UIdtG_e}X5Z%`IF5Zz#Ob{c17Gu2HcArEY0^7T^HE|bf zoe%%bT*h>Vut8wM4TJvwG4}3pQCIo@_<6tQ$}lhkczH83;9Nw30YfMgDZ`l-1+2VP zDlUy;HGtcW+7@2QcbYY#6*6itqh;E*3To~o?QSif*laIm`~A#l?t*BcC~q&>PS*B@ z;WFRn8L(_W-^cIs`vc~E&ikD6K9|=y=XHNE`Cp2${YIYdPyuHJ_0Sg)XAK=sHoDt5 zntvU->=rkt%UfsUJLR34G8*xKtUwU^dF9H6l}=ZlvOK1d*UhkF7>F~qMfat6F$`aK zCQj#wwhMijh2kSUl zXiD#4tiqw7m5hgP7@0>3dFEb|s_q0!dz&yM$Jd5OjffGLc_ni0bL-vt#BQ%i)hA*; zd>s0N7QONVaLnZeAFbm5??ar}X+qAIe!RO(Gbyy6LH@02?itOCYZ9Q3$M@(hqibhwiQb%DE$1oz5XYZQy zx->Kf-f8cwqqeTEcVQ2#-H=Jz>$|wa50z+v1;|281BT`dkJd82NrySRV`mN`F@7?* zz^sNpRXStDJkP||-(Qk=n5kDc!G|E)$1PBQN29?j5B+M0wOlK&ai7-sxH7HRze$&L za3fdBCm}96G>Tr4c~A0)1LxMin(Zc;bAvzA-_XVJ$8}rzF<2KGojUGZ(gD`;akI-{u^ zeh1E}ycEy>S`;JWoAek*kGKr6-Vm|gBljw(#pUT4!reGM+Du6$^kn`@tm~8b)gBJL z2=y>|vjk;yR++T6&OSuZpn)6n+uo88=f>p9~&<is!%<}pTRz*jf>4T9GO~i=g9v#ZZ zz~`i#LOJGF)2Z{x8| zkEnf`rZ$fFV|-ek;}^LR2_0WK-i31l9>ZF@^zM_o`FxDe>d`c3p)c+{U5&z`E6gJj z#HfwK7lwD(@Y(!ybf1xWVp4gf@V71@xv)*AmSM7yo%MFtm?I0ZvvRPr2E%l;T8lZl zv#=WhL1PCNU_Yrw_SQos>`ta$HL|O;N3t7pu(Nd7S0{kauPWCx(-SzwU8v>#nYx67 zD!!^H9iwsczj79%2Qa`gdLS|03No>xgU0v4m(QGn2jCv z>wZ=91jI$8`!&W}rlqhj3VY}jS8G#uY7P>ksvMTVMl&EodM>G1;f-ndTAV#(9@$mD z>xZ4)-SDw>`aa=e5B1yt+CNO;cbq%cH`9I}a07~SB)h+W&alMassBRrJz(V-?HkE? z*l#Ldgqy09;B<%=%G`zU15L8opx#}^6(HR&z@pG!%9kadc$oY8a zF8AKrY~5kp9(VEA#L7rENB7y8K?}SJzlilUl6U4B%J7JrfnBi}< zC7-2ZD31mHR#!a^Pz-IUfq_YqRPj=Ja&%$@{!<15wXzX8vy=5i}qZ_`=*g^*J zh|OeUt`;pUw3lkzxG%&{huU#RvYBT_-Ym3#CnzT=f-Z9`D zLzyI#tOE*<1YC2HUKOBoP#6Z~6`hs0`kMX3q{cZ%wGKb-lSNOwRD3V4j-Gko9C)sZ zSxCp%QS2@M2xusrC5pk^C>3~ByfZ9mEW%y8pq~K;tISpu-AxNTGhd&*YyQqzJ0IFP zXJ?OC9iD8a>u_Csd+0dUR*tU?_T?c@i7#G<-t=FQdksE0G)P|))k7BYJTT)U;3s}^ z!9sXEQ-4;O@LN}ATL8?fC<^fpdFBA}?g1q(X{00b^)n++yZYIYr^tYG+wDwG7?>-zD08W<3GMEp-*^kU#IfjQL}c+q z=Pn|q^`+wXs`vuFaBJqIn7P-Grt=1m#ZmklG(T|Rp+S0fQ|u`Psa=B-@3=Ze;{<$@ zYW7zKvT$O5Ej~Q3*OUn?DcWvd{(-L%orX8%H&I&UinuDmV=rt04)xDo-gI2U0TYz? zPn6KNO58>v(1$eFu0`}=%T+{LjcL$rQ~KaH;e2(GciTx#8JFk>PGFOs*IKfg=B$<2 z=dWTiq(PdRyEYaniXq4w5JM;G0i515iSRM5f>pDRdjoe%l4o|*^CrbZ;=H49KGT^R z4J?a#C(z^ekcR%$2Mf`_dsxF9%)Asi0a%5Rz>J=*viCi$awz=CG1p1qjON*%{N@r*ZK=XL(<8G; zaLWM(0sEf~N`XDE18uL^MR6^*C*xg}dBVZ`BU6bKJlH$USqF3Q)EZ{Y*WCsDb@zL` zvH2m7sd5U?1y$=g=RdRyUU0%vJ~E! zs4w`7wG;w4-6q@<`)VgN>v;3l4E)dY(>TVgHMxVNDdFd4^!X2==}%W|NZb+mneAsY zvi+nC+$@I{3Ala>IVDeqS7$gI+ zzM>`$cWi3&!WY{&Yf5#dneYTK%QFG11&8QZuLZk$#Jt}8<}Abun1DILn%;G5mL~RQ z`L0a3xDax;2Y(K|~W_202CIxdZuq|rND=DCQmE#{YDY>P2AX>@E{$MDG3{V=k~ z(D29#FtU>)Bb$8N$fOtpgVPu!V3mhI9W6oO#Y8w8~;gcw&>bF(#I~oMY-^y{T``BiiyY-a_3RdxF=McPcsM%~Q$a-aMsG#BaUd0KW^q@^6V&<^lhsZydXrGTslWaA5^;a+cFOSRd<}bgKy?b-Pi-$ zigzy5m2uZWr8#+~fZiGOwjh?%pk?T;dc<>C92d!Nnt-ShUyB#}hGFEgI6C4G%+nhQwD>o4qfvNG-uUjfL;xM0aZQ*%u@}DaNRThYa|&fVUfR{%1m*PuftKx)5;s zZaB&3Kt%0LevZ;vQA$nfjmNY8wG2|g$NCz8TWsu)^(T8)J9VC9_<7QM^j=-mi;TvT zx9-*|+~Q|w8eMttUsOH@{ES)lVQ$73u)Z?*Qgjkuwm(Wed!OTdx_B>B;I)->f}*z0 z3}}7n50%0Hkanc)-9>TU(V)0yb|TsaM(`nGg&|Hx^eHDG^I8o%ZOmC}ZKCq(u?M1Q z+!*>-bbeKRe52Z1Ycm8)2TMUWat*#(W-9TUo0R-~c-N5ui{FZ~lF6ITo8Qf9o&Y#C z0Zs>c3*54uOkM%6+6j+X@H-^Mh_#+rfzoGm4^rHvx+wWotYXvObSF6vzr;kNuvZr8 z-CMS4dAgFPv66G5D>>YAtPrpRQ`1BB*s-R$poIT`w7F?ceMVDp{f}#$J+#`X^?J)c zKy)d+myTE#pnWqRqi7f9&`wNY$fZSMqN3Y2?E@vEzlrBLjE;sf#q*cXJR4-MlF z@F6)6Uzg|JJ5f1uhelXRsl~vTY-k_>Z-()Pi+zb`_nP=zU;dFKNXx#)y*SJRxdMG& zh56gHibjw9+f@E__&Ow)3{S4q0(qy3ogNlh&SsXJ!Rv)h&bXaIzXRe zy_EAZi432XkM`xItc-6+7 zhULt_uWJ#f#CwBF1huXNjMFnaqc5A2H!RpC34J)IAb`|6Cc)R<)OB1T2|NevN*Sdu zW9yQlC(?&Fky4xYY(~75hA+g}KKSSLe<42C8}CcUoqL>1ZPNRbUSa`@sZCQs9eHgF z&JFh=wfP=Eanx7jl=uC9!DTGilG>EWCDGlM{DpY3Z=Ey7UrfrlSWm%!?60}tbes7&S+GdlcVPHh61gBlxE7{};X~MeLk)_Hl^?fU6jA&sI~&#F?3enMTw=dV0R< zg)BG`yw7^Sy1uF?2N0k|tUVtWhrc8*y|>{FDD)CMi_uy91o#{2`MAR~G=W{lj8F+aH*o55YFDk?PHx*KDB<|B`hYG*Fr`Irh^iuGOAb;JDOZg8D% z=MP(*?T^Jr`NNXXgh4e>CF{DJ5e_viyCTo^124H6WpV!EUXp~gg9*M^jDyp;c#73t z5f4IRf!>qrOCQ}id~e>mF@aJ1a8oAZrrc_~`}8(&L}(AcgwEF5au+ExF_hVCn z+gF=$gr2N9{CoU-H}3OoM$)MBao^%pU3vTch?|a{osW2mcU=}=14cLjnDGs9-q0;5 z-rT=XSX^rM9L6nK;5Hq}13A5m#c6yY_(~BxI1o$b%T_jtq9N?WcbFQGu1kHYozRx3kjaw`xcl)~l1;qgcE$U!IF&kywzO9*tuH{}uW6zsZ+LEZeTZkpUZd4apJDWlYxNmwu6}^3!FyqOE;V2;L}!4 z5*Y#>^fmB6+9neJN9-q>d@`QnN@!l&5Nt&2#zdb#z%yGnD*Aj3&yu>t=<|^w>nlyQ zm9L!QmTRxq!aw1jdVd+0p!fNU_3WO>e6qe+zY>tXlpD|Gka?UT+0TE+Qw zXnh*SY7DT}^uVvTrTZnJH^MIa;=9_CjGJld^>C5BU(=avex*$NeUi`b<$THJ%@vzX z(QmCC`PTb`VrzHGF=OY3LP%qlo6d_L4Q}@TGa41)TR}wJw;D20-~JJr(#H&3kE0$;Z;}~Bc2vnzWitf zV-#EB)EM#h_;|Pfn2CA!2JS7ljqNxuK0oO8TMf&zNylhnc_4*V=AGSeJf&j; zzfBTKhX3kN%hp-VN7?Owe8|n2^m`Bo{jzujbTj>Z2Qu-b>^p;Prj0oFuZjOP*k*bG zPx2`5=66Ub{Le>kglpnaq}JnE7JYYcQ0k{GZ0##B{0_XYJcG{PgkLLu_u-B$NjHem&Iy$3?o6ka2axFcIp9pn}6(K%K3438Ob}fSHv&F!#tfS z+$0_nA>^Flj@eA%b7@)v8X-9BA4k9#z{**tun(Q{(iz|%VJ0P zvbd#xOApm`xh&fIHwhGXqI@QtO})oV#pJxWxxb>y?Z35pDTjyQH6H7Ss1A^(zSFbZ zG|Mi7j^uf9b^jID8$Id#?%VPz`wzHw^dw}*Vjo)J7SuOb8TW|k5TI5abo_q_`Eowf3um*aq#p`nTj>o3+*b2Uq%j=#Ck?e zCYG@Wz7gMtRE7S2A6D0mv4kNZSyz6*zq_clR)?pbC2J4H@sAg6+~{58C(bb^a>@ul#_SgNZ@ zY$h3#;Imu;8F6AW5A6z#MSV!0Og!-xJ>rN@9I$jT)=_~r<1y2R+uAS(bR~7+RkU5c zfaDqJ&R>X@z2OznmaB^-4aw^&hug+3Io73fshiKP_O2c`e$)|lb54!^`Mvf|C1+PR z1=r=c^4yMDTa?92{W?iutUZrEr7V-3B4wH+`)U`JL#C*tzTKSF&w(0XLzalcF88%1 zExwE6vi<62ZWFZNLR{p2yTW%V$&ieAOx`7%q`sJj-Jshp>DZ8Jqy~prO%2h~%x$I5 zZBlvjNYcSXPziB;FPl#hc+>SsK-o*cxr4`BkIb7-@z21$Ldqe!rcOiy_(ps@tZw)Q z{Q5Zj&ks{bTaS3T^!Isaq)`31f!;Qg8GLQ32}cG@r54^wvT#awDkNv3x>^H!`3y4l zKtycrH)CIoMGvHXS1z&Er2m-h3Ru?B+0HZe>AxRB(RWO5GmVWH54p4vH`*m}-yoCz*Wli2lKu(Kd!y-+*f{u+P#P_H zAk3!52FFFqy^3=0Mavw^|)K z)Jr8OI|N#9Z}s1WyQAgSpqvEd)S=$+OF~{W@0UO1T?wxj?uh0+{zD!KuR^pbIxl7L zGB_z(cRl#g^cyRBB{k44v1)=0z7Y%m0yJ0Xvm&Jq-3ti~&3!a7SJ+!^g+>WuiiLhR zeRrlW+w_%?5AD!dk?d&c34N6Y0ou8=Z%_43#r;NgaqHl}#({Oe2Y);8+<-qH{@%pj ze*FCge~0n+Tl}@)?+^HE#h--SnFpEmX72uX=5Yc5t;}QBoeEJ9hHWWnnRC;u3)8Fog-c z&;OM``xP0CK#xQVESX|7(h?tOMElc${lSj_FiYBh>bpjYHSG~ua0*BoVw9Nf$@_K1 zy}2o_q#7gHYEN=WCtIQ3B8a~ovO*tKUQ8k7#6Tu`K<~{5qwSrHxLS*IS*_9}HA9b2 zdcQ0(`R(}5_(*Q4eVM&Y-WE^eyh?J*66zB={ipnj9KAG=Elkh>1JK$d=0v&Hu5Cqs zW>Q*1N%kMr;4A9~BxH0!ryui#NaGi~rXuetXkv_phvSP~l0#G{B-q5R=!c_Z}axBM^V?}!*TN5q}c@{X;DE%3jT9~*IOqS5AQe~jBA;N4Ug z(H=cwXQhbmDUW zqG`w0ui%r0eqnYrZG7b`#5<=wyni^28TkiV{C-2GrK^0-beH{I(>eIzacs^(`dyRD zevYp7OLPq&umRan-xcQ+Ok~7kYc7sOo6sCYw8i_ z4o)WTESrd$e~i|g-E}og6gO|3W`=? z9$PHOe9FLg8~)0*kv7VEpFk;P$k?YTR)#YAjMd7}JA-npM32}$@J_|$WoeIFu#aP+ z`}lIWxAimJThx~q)xW2{U4s(|(HF4VIe1RUXR$7q#1F&AtEA8)jt%g*9h8AZRU~6{ zASU!K>|Xa)_lVsCmKF4E*NR(jRd~A>Z@X6XK(Aig%3v%F1J?!myJO&cVOAAgPwJ_S z4F$mMs8~i7zm7Z<{JsKD2MtlZC zz(SV6H+HdNi-tiYQj(DpU^8&_l7H-zJFGR(X3w*_-opEq zLE|rameKp!vI4!cW(In2;?cQ9>>|v?GMwbGHf3P%3cX_7nI7PjtZ6T1_MokCFnFN((i>P^(FB@lmfp5Kd5$CQ0=j?flVv+*zN!T zS%~BAX*ElMgV0+dA}#~vYza;v3#I_7L#@#Kr?!}Es130k$HM-GK0nh3z2wlR;er~( zB`7Fx(YzIX1-ON1ih9Lc7`^ZQ5EfgNQ62Rh%;1X{*?9c&h;%fZJ3eQ;i47@`Z-C}H z8)ES$)N<^B3rC^zhF%{+d_kN&fw&8F3?)%pfJ>sSPg+McW!Px$j6VI5qC=3E)=6Q* z_8Iu@*Tp*q_L}CJPq5O4t77ROjoB-;C<+~GbKMR0_uL<04JikrLvs>TqR&75;3-aF zSMf5>ldD#{5fiE5G;}OIkOfoS8F{0k?m?WN$NPATk1fObIR~C z8Xvl~OW)k!PIfPLce6t3Cxh#3*wW#TFbJv(+?nG&Z@7(qTcCERFdBVpOz0EkT(kA zy1uH?vYih>8cX}LUz!#bRy{75Vhos-k?kzfSU2GZJ3l1{P!8sI}TQV8ny$ZkS)kTUr{RaAVr3ZYk zzLL_IhKD?l?qEYldg%;QU(`46c0H*dt(!7-XjP|hqeSgt`X1#7G-6T}F19Bo=B`R}PJh=3 zIrX)zr#MpIR9RWM7ZmiAK4>ugB)1E>);?8T#a5a3!NaFH9kh6)4b3k<`ubx#y2T!P z(?d75=`~`UTCU&5?vlU3?0Twb$}42ob#W-1N%SUZL$`P;Vj?lvBN@FR_+g|zJD1`3 zV<5Aja*M}y9ori3df+pZIS0ynD%vyjYwK2Tq59$LFEEHp2`T;s=prIM z(&{a$MnvxkCS4$wSkHTv%rxRzT?u`DjPCW`Sf8@4ypGmWUdY>$=!u6;LJV|{n9$pi zM4t?r;R!x9XiAg_40MIIDts%WwgH4aCk})o7HOiSP~+L}AM454#@tEuCz#M7a4~YW zy^Vdtr_uD=5e<#+q+4kJrTspxAaNARj`c0h(Q_Q$?u?dx&b~Ou7_I$Eq^d~ctABN& zJ)5&8YCLJsi-5f3RZZh!esnahL&g1z?A+lElhfTNl9HQZxCDMwE2_pd-85rELg_e+p|cwlQ84V!On8z@suli`HEP*;^cT9p5{DXZm5K zZ)H^P8#`j~LEu=@hDAHOVR1+0c`~o=UADfeWGX0$MANeJMUA9>IwZTBUpa7LhPEMSy62;*zQcTKsx}Dl-(7W2}J)voS{`w*$3(Pu7^V3(r_;Rmxt*W z%EEMZa>L+}H87#y4t;c)0h|!Tr@hjX=T7vC+sK?L44tTi7oUmKlDNW1Rrl=;r$ z$z!|YoD3t^*XlVvG*}TEs5TD&;~L6pH`z=9#)zEfB!%Vxh#s`6#5a~iU>{SmsJ6`? zD^0e`dPS$=N6U@1CsbJg$o5U*$UKvyxQ^ajpqx)bi=A4ac>2J?uyQV!UJ%(;I* zrO`3pp>HCQ5HOb4j>a5G1eVN(CiLz@y!E{}i$07-a_+ zA}Sn>Z$;}!Jo*|9a|CYcgkvV*5| zOhbdMkCXlp1LjDa71~dJf_)PEj{(lGu0C(6quw`V@T)DAN$nuh0@uiSW zJrQ5}_b0YKAvetjj@4}6YG?DI;R%dQ6?!c~@itZHg~&!=+dbmAA&SK<1pe4o^yW(p zS-NHjaXnSA7Hxa#9CWzgyZC(96SPbbI17xW`-xsbWj_9twq>z>(^E5^IyY9ITv50c zQk+-<%Z|>EpNNQ)QBv~MpPsUz)DmuoE%qGAlAMR!<7}Bt@`U86MI3`tskA+^a&k<~ z35E2G2l^nJo{~IqQ(&J63AFY`T3d(Oov3{lwa<^#*3sG#`1Ac~ZTk1}1F&GV~_#KeSTgTr&QD)Oy>IAkNa z;eqR88*MkwF~I}2f3>SHcNZYLQiWo`l^+|bjaXJ(TQVurg0IJhDq&CM0)>;dA{H>Y zIMuR3iM_KKQKvP=7wlAG2=7cCq{M& zqoOGvQujq(6B07M4J2mt22`Q#5w}47JyV`i-BC(^Ul#v4=qw_kPlm>nRuv)6rR5j` zk(b##FDI2ci}X&iLxpIw&k(&+;Zb@jVI?2q!L}WW$6L84u2iv;@hEr3>>?pyXjm6m z0*72Lqvc{E2|X3j9;NX3-!ob5rHjP)**Rj|@(8Q_Gt%0YEs*36M)?Eu=?=gFwTV?* zvZmzLsEN)tCYVHE4*fH0y4zCXP&XF;f-kG3}jV{LuYHN~uz*v@zg*d@I)V zPQ%HPfc^9v_i(?>xCZN5i^crC$FNgv-C%ox0 zrH=%+tYFil4 zKP#f^LMfpq@dVw1qfEWz6)7x2a6+{IJeAs7@57jAEM$3VT3`&QrYqw1Aqo5@ve4~s zA4n{b)DiUKiulqH+bBWQs^k7;_rL4cf>Wpo)Yut6(pe+GC>rK&WkX)hKG`t(v9AsNd*g($&~$-Qx79okh1eC7h8h3C?(hm?L6S^!%fK z%va-H=|)s2DmSCQbRDmX12{FTlcXc1J(1O|s!0Pu<_L{DD~Q*Js13&2fl(zg%o*)_ z`p|VvSu!FW!fvQc%cOHbNU(Joq!WC1;+Gjv?JP;l_CN6o6Sb6x!1krZb{af)DuM16 zKkfUw!1=Y@Wnp*>-Qt&!#$OeGAGKDKh5kIin1_A1K7gK6eoHJ?NQGWJ364w52=sJg zj_Assz>L$Cz6n2&bOiQIzvIe7EXa-Hze%Oa1Cw@f?J&cOnQ=B5pj2|u%2{rC9^G_|ja zzZ^J<=wq5Ru8X#GReTg9=@DP;XX@zO{RWoOZ`!m$0u8db;N#1PS#}qli5nZb;j56| zSOWYJ&=qE;{1e;?%1yco_=Z1)5@U4VT?bE35TAzCdym-CuYIV%30qs(*f4;qrEJp!h z5ZT>GCOD5GI;AY2H8)2s7_uBgt;;J(*4M$XFs>zOq@IdYLaU}7Gz9$5LyOAih86Qs z(kiJ@)p(H8pmWVEtSPN&(}e|zTjl;C&t2-KdBh!y-(g<9%=z-s>Pm3HtZYE%tc9)= zF;>-{lAVf^)JqyS!b?kRJKz~ufi#fnSnR-N>{>!4Us%Oa6KC3+oJ>wIS>@d3_Urc9 zF1K%8&q8AJnfq<78d&Hx)LG&X1ZYPDPdfkR-o0czcN6-PNx^s{+YBtYl;u^m#Iwc8 zLYHnicq-k2X6V9w=o~-~3$>^@p21BxTsr0_r61_qYx``ZbepcT*#^>J5@*&bgeq zc9wfF?86fiNDQTa3lUvUnFl&2=0m=8jmB8;g50876Xs7ovhD?i<>VtDzRxn=zdH^3>7|Zd1weq~PbG=WV z_xXM1>uWuBE~seUT?8$1wvDSOn&jm8X6Iz$B`Kx#O5$-8(OLd&uO#(10bXCIt#;}k z*(VfQ-$cw~B5mWEos*nil2odwBc6Jt)H0bUpfTNu@+A1G!0UPKWue+B^?H{;;1qmO zXm%zqq0-n5LiIXk+G4xa3A-AODbUxH`JX}L?WKYqYjFquD6COla3Qd)ys)~|yx!tq zU=>#3AeQ|OWnPlK5S}M2Pg^SGCAz|mmQE(gZdp2D=_Hnysg6}46CxYPP^34ygT^9y z_jt4vA5L>T>G-vy$I;tL*G>)%xO-=j(1jszrm*XdKo^4v_4nmJFu`GUnn|kZ?pdrS z%fW_{`y7tpoyi*W)=O;az)hzF77)KHXK~g`8rRxSIJeuFQ=9C0Pn$`^l98L_n(y+s z`o(7u-OL`88A<4)K?Qu#5okzTN?B}>d;^q`NgsSV>~#?1W$|*aaVh=1(AyRLJ>RP< zF)joDy7G$X8yrimPQdZrHOM08vY1FEB2|~g_&!5>q&|N7jFmm&6VP0-Iw)Tv z%i#d8it>x;IodCd5C4_w^gO{BXXBhZ@h_siBA00+5ewhm#OS)##TDO;%mToixXS7NJdM8)eCgI~; zGih7IeB9|>dUh#=0fs`stmwXkM|$w|L$3|dHfaAP&UW;d!U^^()@>a0DlIOybpKMe zw0o(xRi%>T)-lV8q|${b^7O2ah_6J_muBI7ObWze-7gOgulqv42I*rh%hsehz)4+6 zS6(`c4W;%vml_GhNq0QX7!PkD+S~hMi}q(`v_JGc#gk?5u3|)AI(pNc5=4}M_pMs+ zNop&2J4VU`Or&9^tCdAxt~)Cn-w9Id&7d4!8erQ)J#&W zinKJ@r9-^+{s3Jcnor-;{Sgtrju5@JmA53dbb_ygbA@cIN`{Prz~5+h<+7?%&~oP! zIc^N7O(k>~m9um%61p^~D5Vm54zRHYI)U`}joz@(Oz$Dg?GE7HV#^~BGHE&B(|;OS zP@*77H4A1{7bc;!#=89froaX`XtP9qPLPQOd%Dk;sZ(bvpXoX}8y;EP?P zF}AP~XPT6Him_W=I)(o8i&Z3(I~TT%`J8x@Y^o^#K>=-whMC=!daiqEMHMDt+5YH^ z(Ojh^vnC03yQ})S?q$S!SLePeP@U&5F56#8-&>%au?aL#g%kS)vkd?FGvBJ}uG(rd zcCxf?p**%9pF3h57Z`;SvoP|F&@w2rbuA;A-=HoFc@s@7wAp8r0q?+VU(CiKOStdw&^ z&u+66@B#b{Ym+~p)zbB$^=KWeMd+)r!aKqhH|70wUo(;ced z@LTF>i-fu`Pwnt$Nj%K%F9q7C8P4b)%U}Zp@bXzCbv7;ccSNF=!17`DkRIcpIave4 zJFXD;FA4PyTAj^+lJO44h}lU?DxE%AUn42>lGvK&s3xrhT3eJm^*^Db0;?p&O2d*O zaG|ncW&~a@hxaP&&#n1&wZulp3&~`t3cVpgSF6PNo=qCGJNMgq10?JF0L7?DsAAw> zSQlD%i|*6065{6O6owIDUfVLqo=nb)lW>2MAd{nQy}Jb*XUh%jfFJi-+TaB<*(oor z2hK-A+XimmdDAiX?@I{zf7Oc_{Mtfx`baJnUx!@(QSW%wM!-4KSy+XAUpXMqNJikw zmrLPUpwL~f4{Ek>Rc@<05oBYrcAMX)*Tb+SEQ;A8Z@y38!GGk3w<+=%509xR88cGy9{m!uKS6EuTWa z^%MNSMfs8voSszXo`YE*gE{{ztTncl zZ$27FKD4pt5fuls$(lC-CaYi#_We1j$yQG4rAU#+THDv1a-^AhInoT$J)Mk^Ou7`1 z9D)fBw(Ugtt%A=N^s@uhkKR3;Ye8Nd^8PzY5#3&rMeZm6QL=aFj{@zR6uo%)DC431 zW4xfwCVFh#IXQAA9u|2L*s*HQ5!zRe6loS|CC0s}oc7LZV>`(tNsvs0H*t&!-1{xE zLuTGY5E+`#UVZ{z}SRO1Aq3DNy^~FSzjp+D~*M} zU@o!gcB8$wbt*ZA62&OLeZUI8UcCP-{4`q4ZT@*SoBf~3a`U71h<_Rp^!xRz?9W5` zIwf(R?rnXwy~@4*aj>4P|G1A#=lj zgXQe$_CE`mi1H498025VD3BW|z&WlVFO3+WSxouswCam@SS9hqiSCC=Wv_?p35+&R7eyRsyn0wt!@-ktgv;nu#X~ ze4WY812b`PWC82;njP@00RE_}<$k9eV?+B{iomZc(SEihpaR-VOS?e%(VMu?8S7Ay z*gTRh4}3yf&SDX*doNmpUJGa+@HS>sUKj5BUIw&}t5penwb>R1-a|s?d%wfj=~#MO z#u7Pr5V3I8s17J=qJG27(o}iCj{8>@-0zHmQjWClNX4+HLW=Y=l_JqF>GkCAKRi$K1NQxU-6|kl5Uor`PtBstt^$u_qv}6ge zVrG_zJ`7-fNe0I6{B#a*ec%@o=LxRFfoF?kGKFDDUZb5s+JzPg;?t4PZ{YP~G;Vch zyb}14h2&!y_z(1Hsgr=p&&0SR;^&e5&c~w^(ytxqn3Estzxe@6X%(fS`o-ny;+ zA0idbUq|adeye^e#^RKK4panBaK(ruJi|dU#s*(-xLP+l|Gtp=*4^wN*-Y?fj(-E= z&pAh0rFTMtJ4HqxpF7fk3In%O<=2i zcY=|QgCI~y=^*^__@(nREBgDlg`l}`b`vvQD+X%>*mp9yWn7u_dr;d^D-es#>9t9M zo17GX9oBj}X41CMeVaBAEkiWBKQXV z7CvE*K~k{@9^}eMU~!?1_^(H8TIgHUS^RITV4w>L|4{fbO&4r)iPKL=RaKFNEhGdQn9LwS1rE($8wES?FV9Zc=u#jnA5g2o=t$xOQn=IpEM@+_-9q}1A zJ0yAE2**$#-ZeA31INtsNH4gPa$wcWc#_7{Q~!?=aGf)V1ZO;Ww!S2r0y~SYashhy z2>8mlIefVUTw+fS^74^e3eTw;(uH+55UH=urabGmDbN2*$LXE+xw^CBvtdax-Mtpl zkMBwXx=JQj2P%0n)^xGM>zv1V9cKZ3|L*8;e2YECV;y5y3FwGz{VecrN&}4QCdMnE zA8Gtc2GJ-XHv)z(0gcIoegmD%7un(W1X{m};?uCBHaK4dw#=BkYijM@m5{#WYBO(w zyVzC~T25(RjCVpz=~v_uM{#ilu>D|!nD?(SJKnSJU%8KG?$Ty|4fq`{4?HwY3ier6 zVO-%MTUn4~#RepLDUs%p%te8?8fIFW3qD&X@3ws(G-f{BF3o(hos8dSD-Fc`Jmq2L z&OSk1W1MDi&8}JE+E%mM^;yk1mwJt1~u zZ0)&K>UDd|W0B1HW(+Ld)Am|%={qQ zFA~gY9qw7Lpmw5Xj@iy7j&07}j?bLu9O_EL(%F?umTs%uz4Wt6)Ld%J^9bgIApu~h2WRdvN_OCgmi2FQ)bS;XA{wS6@gmcforiD+kzqhh$?&kuN zr?p-M=a0g&#DdiTXV#dJ1Yf7p3`GZKH6Pq>b99Bk8=e83sKhRou2X)4?cc#G!v9!} zd}GcRf&?Yp&>g^Oj5bvmLz&H(F{+*Z{@8Bhwss>wX}9P9+3xw<+J)84Dfa^0dNV^U zh(f!aHAy}3&EskkeQaHFA-qKHiQBF5Y8zzR#|0DKU?wLQl1VY(Z!18{vqANQJm_{J ze|o~MoC%UHW0oW^3A<~rt*>jpeEYPi9xSi`+1FdT$Z+jdBdle93VT0Z*TI) zI?Df+;e;#60<*avpi?fn_1D?T*M`upQnVR73*7=gXwr|@1A`tkcVG4-n$`bZXsqgnQ z|4X>vz@og-C~0K(9GD4C9m*fqd2Kh_e-G?_=g}B=M}+pkNe$80DCH8IeTOKq_DRNLb{5;Cqaw%)vF!W*%6^epcU`)Zl=46sCVtla}$sHGPFaPP*` z-f29UB;I#c9PHgzq-i|mpUX+e34cr`dYBvZ8z(9cv?VhSFEcDJ;>gk>12hgkuq6i5 zd`!K}Gu|iPC55L+$xhaz1x6YRy*L%Lq+nw)l#D)(A_4T#cNCsox5w6}65}3VYQbZr zY7d#X>jE<+4Y$F1!!#1>Q@48z6x}YsPlfgfU&j6u&*wdOeuow5G&w2b`Z} zO=^35W3erMdkPstz7SNt)zNn0mzU^j7LL^Zwj-6Ox-v8SgH|UyMdj(VtGu0Kb%m;W z>0PT0@a0pp!WtKlwL4*_ zX*C6Sj18(CHRXoo>Ci-PUkHp{-<}3ulS7!3P69s{j24!7?b?EcnJWWxGM@-C(5s+z z%4#05J{!RdmbizxH(MX?U58ymIt&+7dw$pDN|&|&GW}1dD$$lfXcc~y{$Zdd{SSfF zNRJY%DPuiWrv{!RDPBoWHH~*PEOIizqhc#2 zL9Zki(5IbgB<6zB@=M4stPHR}t z>9GkOt*5jwzF`z}O%-+X3snuHJ@UFy@ROu%NN7ydZJj~tp`EfL);EpL51{fL*1P9=KmHXgi4b74~8))?v7=s4pWl{*yhZ~?Du+gVSNbAc0F*&RM1 zBPDVB1)1hde4}iK6z^G&WII!D#oHf8_|o7j0_}ASdd;G}TV)xP-HB0rcc$KdQ-D7) z^u-wMi^_K{naxYY%2Tahl{X%`nP0aDdNe+jCnWs1+l@xL-#_nR?)na6q7XM+Khd|? zkXRq@U9Z2y(KC9m#|rH>mFJg+OnOf2iEBJC^IoC>BXi-;DK?n|2nzvvRPc92GOq>4 z`0gN}tAk_rJpMnvmI%*sW%|x!kL{b&Uju(p9~;*qKcxIjMaT}s@tq~vLH$@uk81y@ z{3Cmmn|TK7s%ROev>C$AqBh&{z*A{HkjM&Ljso1cEZ}Tj9@Zh;g&+W`N0#?-=iF2Blg=-Y9z&+I>8c zEV?EzIh$?&Mr#*@{ZSvnTW#lph!6%nD=BE6QQ#}3VnoyXCxSjELFof>->)5(r3zn< zqXM$pVcEq4;F1{IC#O#iXmCDG!f9(vFAA7(df<@hnwXvz$Vu-D>eYH_e%Jl!VZ7H^ z^3wAH1?k@fZU{x`qXRP`f4?G(Evd6<0^0WZ>FR*A{Xv|%^U}Km=Y&M$e;L?{GpoUN zCK$1d>C(W;SA#O~`29W*S9(*3D~T_ygG4kAInwC=wxGI{>7r*mwHQ*B_6t;p|55x& zw1nKFB;;rKTLd)-Drb$KN{Af!RBxE-47aVZ+ZIv|{meF5TfD@eNGBZ%OFPm8_Qv)# zlujIjx!1J+X$_N6(4iuwsl-`EUL&2!$GLHCX4<=$<9ae?4)hYSL;f8sHONhi00*#H z!ni3Mc*#btjIafbhOxo!HKr1(tL^2wSI#5UiZW$h_nMRvSo)JxTsPE`lre8C+`lFX z)Z6F6KNknN*Z3}h$|5 zF6nLQHAqA2^@sN>k*4!_t9&KWD$Mh(^irf_Z%Z#idN|GoIGgz1T%@VbnOo(HkxslV zJp<{a+tT?+kGd^QbzP~h8O{$&RZ$XO>o?-Om=IBbL!lxjJR4Es$G2wWj2(GPzn_4& z6VSgOOXQ%0e5Ax=JQI}ov44G#HPiSRwDml^{RV0Jd?%i-k37?MFXMUIPueX&iL*nB z+uAyfG88Uvjr}Cj_adz#FH(*H10TW2`SJaSNZD>H{~przpM2wfeB;1RzVQ~yP`JPK zjYg!4e^TcG)Oi(kRAlqWS6@aMT7E9xynyE)=Vl&qYNGA`n8#wYPa&_Zi0-vp-+3JM z=w7>({yEZRx1}FO`sX8Q2U>jqXXc=ZCLSkJ&-zt$95@^F9ZPcoHr7cIn zFa!umh9#L%T%tA$C_RdATZ*D+t;M!8AQlorCJ8cCYNcvDNhX>3UiX<``}X_3pWpZQ z2jrYHXLY1MU{a>mnqftaJ^#*n&P;kYay8)X0lZyRhFI9z2yi@P z$DwbW!aaAFNykieTsGvmz^byTwX4dq>d3!vds$X(E{mKPM+7wk?noW@ZfSZASGYdU zbUwWjDWgiuR;1UKm8Rp3m&QwB9a?#-1=h_4{^j^y-#BNRUc)tI|8%Nd?RS)MUSs9o zpiK>gDr?52Q^<{ob@A+sjcgv*w(Z<#Oq&DFAZA6{~- zEeE1(&Y%5rvI+7*V{6Umqk-qW-YT7R*r)csR*@9M*X&g zQsnRX{J+Iol=IUpdt88OQ7PAgoyjsDgJimpfmsJ-s6-h~Kz8Ut|4|>VfDMG&ncAEB zqzO0=28_x_`1d+~=WL3frlS{OS+y#E>XDB~UKmF|*=l;7z%jt?7Q14I(y@{(u1-Q5 zA;(yLEXEX>=c6k8Hhk=6UbO(uW#ryTDAX+%hELFbQkn&?ft{Wgcy;MY z2WM|~D9=atpt@hx4>yFJ;rs>`_FXZiW5lf)pL5vU28DJ6B{ka9#8U zPn12aoBi2E&brExig&fyZBu>hEB>AuogI+^3tq76S>Zpu*|`T}5xI9zI+E~~M1L77laUpP5DVBx zk&qH-zf`85zYFs(RrVBo0%Sk+doOUN4*|QE?tB<61ok$H`YfDrTz@PG0%rEsL zl&dTeek`RWo9T*oIg{*@14fp3TjCPYk$&D?{!vsRL~gb>$J>HCoq zl%Vzmn;s6$hHvldt&p{BwZ{}pY0n5W0T1&56Dm(uD%WK!fLX(0tK7rxHgNMhs?9T@ zjTfjEh>ouy!!mOWQ9&rG{;0Z4!#?8=Li!uvqlll)#}`hPtO!S=bnPTh9wv;WEMQK+ zuz}ba)Wm`g1xE#Zuv#EVsEs(p<i@p=$L#qbX0=Dy2gWg+oqXndcdZIkqvy9!kfeN1s=!G z&nnvJ{>N}X#~ko^d7Y)G?~9RGJwxLMLO|D<*MN~dwPzYe8{?auCub)3cjFg@Ime4z_`twr8N)s`A$Ac=s9v-$^byh-i zVvE)@$&WrUZ*!#jpMXxOv1z?VXyJKeV>HDB9sNNt3IG2#$iWx%bs!zHRYCXIkuS}E ze;MiU$z5k_Q#>iYIL}pHg@{B#_wEZ4@|#_33KBo5C4jT(@t(WN^!rRTsr&Sus#e4i z__Sbj!Q5tOLl3OY`(P3B`PPEpBY<3Yh2`MI<_@vENfXWkRCQ-^|Kn!M7A&;cM5UVK4Sjw zO9b1k54bIbhrXr>BzhG-pD`Y524fDu_bb;Asto%I?`nx}+6f!KQWhm^idlMOhj6d#+5xRSiY zKx$bEYC@wG*U)Q8|2%Ik3mr1#)ukMWhm9#I?{EI@wei3oBmsqA7UCAA9QXuwi^U<* z)oC0sF&cg8PR3r3Qv*i{#BuW!#8-f0aTf2-xONEfA4M$Vnm4S;();7f=D=;swUHeB zf~gRZqFU5zIzM{fAYwfaIYtB0i96S>yPLb|@1fmzwtzI zYgF(L=kn+apUIfZx5M`%olvYLPsuRmA3aa2egacALyoa1fY{Js6>g3=GqsFX`3P)9 zG5v$t3fQT;xwbs~{seY#+7+Z@ao^`B?6d*}+#av#g{YS&R6 zyb+K&fP;f4*^}B$N808%PZ~-^R#Bzk6xhsM;8%0}80W}_ky8fNXGEB@85-i3-lfJ^ z?nBSByeR=TFVWB4lvfuIYkd-sEJ`{1MU}hyW@5e|ovl9WgRQHrjN6AJHIh9Ux;4_ zY!k~3%Pag-@YSbrh~FEfJev%Pe^ljBI6{iX94R48u49xeYAxju)*r`~HFw#Iy?nw`?(GYZe{}FE4R&`UTW_nbzppsm$>GdgpHTZcydXpM(Eo;Q zd!DOq-+>ZZ2Bn*097AkSdTcn!B7cW0w*tkJ?>(yVXql>6-IBnXAsxIKBs>Q+qYE3M zV^S6aHEi71&(xkGlyVOoI)%Q=*bGdZ$&}q+*DZNBr4mBg9~H3fWo&o5t%y=IV_c=OeHJ;1lE<#UiR-F~>wk+BWJ1&InU$Fe<`KwDJyskk~d_JyQ<$UsA_@YOKI#TTKceuub*dQ*(!Ws&$8&_uPz$`N0Y$e^WN z*mz^~#uvrBJ)iDg1D1G`$tUV5KTj^uN(IpZJurzlf}bo)EHn}iz-s&Jd8$5&fW9#N z*X^|@jyg1bg3Zc&3Yx`Zk*`BX9bfhch^qG~EbQz5@oQIi&)oBSd=38P|L3p0Fg*Jy z`kEGBgI#dqd+$cR!uS4;?@T z^&W6Co!PiBicH8>wg4Gk=7_7bEr?f#4Sd#eFr6;+(@a`p_&DVaz5w}#@~uCwP&EH1 zzq{mvlyx_+)IX|^7nLmq$S1D!zJUy7`kty1))J5X1$LeBCqy+OC8N^HXbgq+ljuu3 zuU>LrPq+zVLpr9Q55|Z{9FZKC}I2abDqC{9Ql=B*rOJoke@#o9sF;<9T;DS z-<}kKR>Pe8pL();&&ECf?>(tSPY%Ln^1xHndz;W!M;+=uhSsF>Ns%wny4QN(_pw>v zUHYHCw`ou3|Bt?meeXBX!}9kECJa0db1u+=#M?I zeNghkdRKdFuI;^wJ?K$qV33lbBW7m(KtFP=(~hsg(X$a%6Fn0NrXDdv zRZl+L59=~woH}U@VB?h*4YD61iomUy??Wc!Jb|(y#8{OJ*#fX2s1T)dLqL#Mlc@AQ zIGzNHs>#&w0Y@CLHg^%2m~Fy~Qj=L)q*3JrsyoL)H z@hq=$mh%f1crX(=TP#XtOxiJiwAuz9SoYD+gA6Rm3a}*0(O-D)q2TL#9^TVVvwuN! z0dXR!J>&4viMt=(BN$H_1yKQg5c57iny(OlvG=m^G-hhR7>70d^pp?yd+oc;g>1TL zN1dK<+|#GCQcmJEj@8S`9hr8O@93t>#xd!x@lnfHjXS~S`)6rEWIATVVTbzSCPy}V zTE-o!#R5nYKi;G9 z&_GHe_?f4RIg9q)(6uF4$@ zusK0FZ)!gf+`XZsIoXgq`lW-T%DTDM*DDN6VI{`(l)%Uy4oFcd!5+CC+8ytHTZa2a z-;}x1dm-apqdOOW3i;zo>2|Yyt zO}_BKpM^d*%oO7pU2To{Cw@4$?iQ(RWu}4SB%##+ANIR<9GYno!?5Xm;8ukX9Vl5XVs zz8jT_Cg$$7k^k+@OXN2fXDW~x(@}vutcb&b?$iU@nUE18UhmWp^~VPzu~p#oNSaO4 z<>M1xF)~%teAFQ8a8ybRtDubxN)L@{y3-&rgMqLw8N5_iq;7D(Qr)pSjWFA;((3B= zN=}QZm<~7u8VdgB% zZlFx8kJOn|rnM&I7Mio9FBv&1uSmCz36=s`W*L-j903AGk>@Ed%Q`#_+Ac&# zWK~P(E@Cr0FYU-V&@Y)rZp7?TSRSq*&GR84p+k|q?0%MQzd!lNZ+3@wQ*FS0w*RI* zE#i7`u0ea`2OM^m4NbQkC?G=Fu_I1<^7`OGo~{z)^& z(yjSp((fT*!zWU+%E2QZqNh^9ZiHnIad!_ms|LYFqCcTvx8llhz`0pj{g06T*xQw? zW>AX5FO20MYd)IEGGslIwD#1>L1`?UdNlvU5WHAffpkRAK3{2Osg?BAec_stG32IA zC<7}G*EZ{#m7dGenz8sMx~nVP8)~oVNBMugN1@+>f7gzk0$QVA znh73Bnn!uVsfTq<}jcoHR#oW z3Ke$UHxNCi!Dz28i9e9zj(=JZUp5?uoSd-lfsz*yFSw3R+?Uj(d|J`^2FCeLu|<5d zzIew-{o^~HbL3p)3hu(m;#~tdLM4#RRR4#t5-Yq)WDYa! zYyiI&BBpj?Wz=V3&t!d?Od;EL*vyV7LehI92wsuL{_n?hZTTGo(zWP=W%*t6VJj#= zzDJq|g`S)CFW7fUii71!*|tc0h>=v*9W37atHxMwdXVYTcDVg9wg{3fo5&YIq!0BYy0T zio~|b?nFaETfDd2nACQ_U^gn-CUxyDQMO?fLQe|fWZ^EsBlv~g%kQ|zkr3fJ2+KkE4B4K6zp425-VZtb zd8|KN;XM-tG5J^voFTYAC*o*kG$d7yRJ$23Uo%c&DD-?+SoD|zTIbF%1yf_ zzJ6H9d@@<>t-#3GWVv`iQ zFQ3&3$ZSK%1mO75#zE;~M8MyjIC@sbyl_mp0=fcZnE~ni2ugY4YqS;J?{OVtoqz^@%Ui~aSI^q*tOMlBE`Ebz+#RSsYj(xYQ+`grEmt!bTwPF>U0$4EYT zI8wa(#_h;9xV5mO(D_`>)yJ+#mm^snSEN6Ozflx+8)1W>`!0`UeS5qltg>F+YGEGd z)yJ?8H2k)-csuP8mBa61oX}35f^l;1@H-P{$v9gz{MN)-63)tob!|$~-jV1TkOszn zUH07r%aCpOX3ymA<(Q?8ecFB4)f!dgvp9d(z|UObceTEmz|UQ~C(d&LIl{HR`!d_X zfXZ^egw44e*~c~Bu*~ zgl6Gm0lsK|e{g}d5V?`Zq~+sgYgXrE9NEW5T$+DtoGNL6o&*BaR?wE`_QrgOa{M81Q{9kuy za0lf8N}hPfjsJc}*IDjvtZr$WXyuQMxV3ffOnhbK-KVbmdO*xzr;T6YbeJ3 zui@_a5JyOnkjfIyq@L<|Y&G_SlO=?Kq`mX{x|R`-d5eG7j(q~uz$NMD;3lILyK~fn zH7sL(R!0~}MzZQ`561Fd4}tj`+AzET5_sa@FHMzs`-Y@0TvcMFp5l?Dx{>Fy)8y+B z>16nGMLP5xy8i)iy77220rD0Hdf1Fw* z$wM5PDV}fmRP3zzMsxRhf%M?^@wQS^(_%b7B;6Xx>O3W`>PW!s9~|9RcK`m>p5@*D z;mPm*9%NZn;avx{2Q>#_x8JS73c#J;fVR~523_T>4H@12ZYTB_JMTw+RVCSy|TNv8?(m6#t^>UV+Fn<5lm+D)0z6VGepp4WJO zA8Kz%dFCpg_6&UdMvo8*X?;F9+h)7VhZP4lH9w+)V0%jN-pg#8?&Zzh+$>_3H@ff0 zY8B$#tBgii+_;;}9ctfMcpq8MTS2a%MKpJ7EEUM6s&CVRW3lSy7Ey~Fy9#7jg+-%p z#Q?(!GrdzMD6-ewuX~2FuckGY3aT0X_ZM|%czU<)6?~fB~T6xa9Mc4L5JrFE=F#UakJzWZ0lnTNAx;Jn}5`6?JA>-4%)6w^QO! z`&Gv2ouz_Nn|6+e9XTEOUb!U)9SJ?0xu`1>xt@vTdX=8Duj2n~nBH|zz*+_Gxe-#z z6iClp@gYZiPf>R!Rt?fk6PCrpW_HLhz59|d)JXmGgFt(u8h@(;l{PDMa&z&$j(*%dw8% zH)^)#cIM;gd!y5j+`YdY{E zq)fE`DTDAMG`wUD(~JMz1(NEyScuo{wtuxwZ_`(vwb_KB`5 zSig=bArTHq508;|^JEEOu&*6kShfQaMiL~jb^a$^r?FEq?2?MkctIim#R!)FHV7KX zuBum03yZO8d}lNl?~>>L7_D4{hWZn{btGZ-jfSNoBk`7xrQd*~l8H;*9I`TyEw;_A z=tjPBG0c}670BJF>MnN|WG;ff4KyOWy9%7Qh$yd70bX{eAh?(E9~cxJPY7>gk6y*M zi0=r`H+DL7fdSWMwsFl)welQzql$@5N6|^E*@I#7o5Q{mWsETA*MK$HdlWG~oh0?p z9ScU0j{tucjjk_^n^=E83s-$B6BF-iCF-U{t%jt&aK(faJp>u*zKOfYbL*G=2b56= ze57I?`$NiRe$ujZ%%imi()`nx>FtzDP5_o8FEeQl>r1kkfUZzxCP5>iV@O4rN%LaI zYENNi(%jfF!)Q`?O*?^U!F?>-ggk<_#%{-*7usE)F)#XObwy$aAWb>V_b(GvIS23m zVTt14qMgr*^@1j+<$mtazLNN^H1{FL(q63M?$~?J8pGfiVu#|p-D0^r@zqAh!d_ye zk$<(^Yg~r$1+JY|^`W?(J4}j0ilvDiZ#r^&)rVRPJNYMssuE3Wvl!>q8x=)~UE7zN zdm%gUAMglLv1;2AF(%a*lSV(4lm*hh3!W_Wgvxi;80EFXJ0WG;y+%7A48rElAwbVXE`_zS7rgPjjlWb+5*;|<$7?6nyV_%P?-31ng)+3VR6CDH9fBp8u0mAaMuxk61RXd#=QtWlGu9) zeZI@VUr@3|(0F^nH!onXr}Fkk2VD=#Z=cU*;r&#K-m&Xn_#4XezkeYhe?e#@OnnC8 zFNn2+xWSVBg^e5{_~OsPUdK*A$HC5F?uN$quBp8d9;4*F~Lf$3RHBI zJStQJVDjdw`~sL|=ArFDAvyqJ`kEI~Wkh1yRJ@9;^ z8@8Sw#yL4N=Xfu0Z)&eT!Krkd45(YwkTcDAXY$yu zLW(&~xeT+>PJPHTpuzu&Xe_5O%kA{5I;q9hPkenLN~&g0IG*vB-S!LgFn#lQ_@#O( z;c{?#vp`dbn=$12A@h~5!57n=g#WHb-buRi{O>@^2=EDRZ|V|9x_=G+M~s1WQT|lTf^+J+Nsjq}tp$h!5tMTF z)Y#1Wd*u1XLChZCntPz?Do}F;kejh`C^7%k&DU$*ETajQgksOF3HM1)M*6_PK5paf zkzzs(%nr5J&k70Fbmxa5&73rpD;ect0dweW*BZ8JO={{Lsho2$YBD911|)YzNbOk_ zQX&)a6Y?z24@;2SuIrgJwv*wp9K1rU`6%!TebVg_;N)S6%V(p~?c;rj!-}CA!Z`lT z_zR5(&%<#b{m!UFr7pz`bnQnm_1Qrp|PxI$i=+6bwg& zbnUyTf70LNoaB%K^Bw>2w}Kf&$Uz(@-t$E;R_lJ)t^1_>u(B>aZ#r~_EvO%GfwuN~ zYh!yO^u4om%vo4=(DicT!_2hie)MRuGr^&mSjpZTZM(u1UIAwGHL<$rOUrTR}p z8F`t37aD6&dhl!F4egj+EMRNII4u6eMdxV0@_>F-YP?h7xIkQ@$oJ4*|7FP5I2uaJ zy8~YFs8m0yXlif#50oh#9%|0~iR<}^C;ub$jJ^O*{sy&0UQzkWe?R|x{THFpZzG;57BHaHS{RXA=2yI#n3FZ-bUPw4%{&L5O42C{}L)_o@^ z`^G=~gd!47jQ{Qv+B<$VwyyDigR^ho%+Uv6>)>{R9m(4^h<#EGadeBzz_<^bzmPcH19L$Co`N&T2eOR3Pq%V-Qj{b&VQ=L7xLcSIn=`2;r za@e309@l|EP|IGDH5RpJQ2G)~`%3Wz`CNnZ&&HoC%{>ARM6coiYf*w(Z=EX_sIKoL z=aLWBl|kvkIQEIAHe^tvvoko;HXWEaJ56V7-^AIwbSG<`I6DD5iq`9EIAfUSUc|q} zYrKaHZ}BQ`zhR2tau)&_xJYb-?vtLW@~#$&v8Ja3drh^e2Lgcbh1BxD9Lf6^4D2l7 zGg#aIBHy){eB!wKMkMG2BLeo9+aT$&io4zL>FUPTl z-7Oz49Zza9b$lYVhfQ5%E9ys_tFCQR$?lTp8jgs@U2}l@O>C{cd3y<0d_+9UUxoY% zJ5htSEw|$|pU~zL*WJu5Caq7`rfw18FHU)-fftc$Y@xuiTN>Mp4+`qG)BG7;)%K+j zl-fs3-LpNj%5sqn30N&p-hqV&XYKEkP7Is62qpcAB!qKi-MCMB4VX#tlMG6KMXpe- zI88pjGL}`E{0i5i*v}3sq3f)30kApH=gWW=z!{E8Yc^CS@^JWI4l^OT1aMi;1K+?&O^nRGxs;emb_S8B(tQJb}Gl!)eBiYq7 z_a>yZ>Eug6ZfWr4oN7odwE(F-D6Jf$Ic8zW$mzo2d>L{Kl4Yq}-w&*E)X4dkiagJW zMeLmPi|}^wXd{^D&T~cEp=C!Pzg};LYw!^rJW7aS>u$u(w0IFWW!tW@4Q2+mk}X`Y z*h)GqC5qWqhZBD}IZAODyMAU19!v z@ItpYDBIEn+b&IqM;Ik9bZ&wleQ<5XD6=ZDHn5fqxU)2!mnAJSE5g#d^PhD{mFqxq z1&u+H+KJ6pla=KUN-xVROHg`qWV>T>UjkN#e6;i3;rLP=vD3So6UXh;c9H7La2nnQa^PsZ_x}kd8j`sR| zmwp@GP(^#+ z$&w$V-RkgfAO4+c)F0c0+_&2rchNj5ZWG_G=XL}o-6*t9XjjrPEwa!SLC2Yl7Wvx< zvtWmA;-FIl{46(F81 zn~*h3B0wZ*aj3`wV|Fr;okC5Ir;J%7s zidpQJzArz!c6fcM5_@{3YfwrZt&(>%I!+j^luRPOyP10uCgz z12+D=%&B6fYbHvx5IsfFw7R*~kWZ7W7KRb#fqx}J_4|D!1@WKcC+3Q|JmYz)|DUjC z(%-+pN;-o3Mi7H=)RB0x+Qr=jloKLhN2Jk6rzwt)6BVufc!zZpp>+nO*N}ULgSSSJ z>+ma~RdBf4FV)I%A0yzKpl7RhQM^18yO0&(NFY|9a#P2-5lO`Fe~kRIPP(2E?877A zO0M3e%QuvHfSV!zr{nBeD9%E0 z{zz@iWL^#IS!AonTn8c%*7GRou+=+|OU!Z!(Y)Z2mB+;hjQo6&P7Td}FB5RYLkJ z^IVjUjH!b&nSI4Yu(oo!$NbU>dgBXGCD6O)LbtfM*_kNYzNjke@BWM6Vc=jt+=wq+ zl)_k1izdEQJ65+NAMd_p_!4CLi_(*L{zBlhP#iKnPFRyflI;IR#m&+f82sL{IDi`*`@9h__#;Lx%Rwi0SB z+UbrXD*U1(MYwDg)@<@mbi(U-QR2{lk0O34DxDkWkXOzIPvlU2KWr6Ji0r<y*x;>Q7qx7z7w8ne>p~e?rMfNz(_YBq3)w_^eJOe(*R4{MR`5m}R#9b`! zeP~*L4Vf?|ZF`66e-Vn$dlTc#7~SspMc`M^zy3@9%1=;Bs_oChb)_0vqZyD|qK|%C zuHDg?JpZsPzw6+I-4-SJzE(bu!}*rz9KKuBcfmdz zR60Knn^+TvbvX+3k&Ue@y%CscGn-mBAgzg>6t#$h(D+jz6>>Lia;#l;6^IS8uixaq z3_Y7alF)>3ApcK-`mPN4C+^$|8Lauvm0WWg{G+U8z@_(&A%8ld1k^xU{;gtDNoxbF zxLqvoQGa`b4syItOc%J~Q@lq=@O{$oU!npl_LISQUvdZH-E2q1b2{(F3D(kqIV`K9@gAk%=mRUs2FkMI919Bjb*jv!5} zSOZ_(Nq)%n7Xg+9|IdQ$4T$LU^h?vn8Dy?^jD$H*d+mBXUoXyuocIb*2lxuI|Ef?T z;A7Bw^yK9$s@75XK7v=km5Q7~KO5%|AC(B(=w3^YK~kN8{?@vwYN{KJaA7 zvMUZ~i=Cp*$Su|bbFu?#Dak}6Gtqkbukt_Ho=GpDy7i3-Ch{zm>q%2eKEf^CB=j1n z1+EI0rCmT+FTs5~A-BFlx+7#?!i$#cj|*R=9D@9-mvz#JFd#h?DP~2&pi2XOfy>yz z%i$w0a1)=QZC4x+B!q&VC3FidGCIdj_at)yq{m)z#ITAVnQ_Zh{5il61SQ z`G3G&Lf$-*%J9zVMGN!ll9^53H?`+ixJIQF&`BP~S2CTmYbg?le3%1LY9!{vr1D(9 zrk%J(JYgi`)gJ}dQ}jxs>PU%`M)g3{*0?BbF8t*t$o{j8!zu|u;E{lHh{U}65@(Tjy;M#yCz4U?K;{om5ozd zaw9XKFBjdQ%uNXt*D2+CD6s#JN|#4Tw^~xCgdA90OVO}8c$hztzCWf0s&Gj_X)T_R z7h?B+IJyBywX&Nui}lc?)TtD{lY{?r-Goykk; z%5`1Nc&A;zq_(=AY`Oi=!)#b-5Di{9*ce4lUb43KOPSFA`jOl4II^4((;b(Wb^iOV zR~#lVsa!7wyTEdCnf{u8jLRRDd||9TvNvod@T>Z3C&n~Bc);c={A782bX1M-fu9F> zdCeJ+9OIKqwG(UAjpG>;UQ-R$qJ==VDLkoVaj!5SH(8Sg5kNDszKuyoM+)7#wsLh( ze0&+zSBH$)y^2*_Z!*=LYMw4U8lpKux-#i2a{R9{h&WUod;Vw&*2vEwS5C^+2a0eU z99FSebEX6cvsW~M*-Hv6b48`>s5Z#w{uT1WFR*jw4Rg6y{Iv4-OHCuAh-O(WKmS`< zMvY4T$PhA}E7Qz~mySwrMQn}a1*3IS6F?r_LQnWx=7cAiRshe7N z@~EVjAM%aQ8iDDA-1d0v0(+Cd$P>^xrOhIKXtnl&uroFh5 z!j_8j1Pz|>!eVm9_-kBS!e$9ChEnG|AeXgvSlL7){PBpUi6kWzO6o#MwOG-R>cDoT zqF?$Y*64c2?bw6n%I9y4);m@NG(Od#3S{_Rl-6$$Yz4?YS0X%r9GoI_J&wcsDK4P)mF^d0h$qK#$IU1!@N4n=OK3a zUVfv{36w{d@R{4kUq!wZW;GyEe?+=6ru6X-E|IPL*!>X|I2(Qo>PZe-g3`JeeW+%T zsL}3J*W^g9z!GZ&OQ?O1QW)Cf1TvbR!!8&?Em&=?+ItZPmmVrY{?L9%E%f)#kSEjT zZp1t3SXqa7KiHJHP~OA{G1?W_%N1anF0B3L%1_`~)nngQ<$V(<0d77Q-q(-AC&g&) z-yp+9rC*QdHJW&EOXOXV&wn$1RURirX#HO4=TQM!3bl+{GcEuwdvC`4BGhv3IA)Rm z{VN}aNU!{QMCvaRqkL>+C3{SDOGWvO7k(8~%Cy6J7gG=IuHRyEqh7& zP)6W!mTCdD-JQ{46E-!zA+`(MjYGhp8|!R8Jrf6Cvoo#B_K2n}-Ax&!R=c&3qnyam z6pvke8!|H~y}CA_Y1k=Y1S|%d_Dt^j3bKO%R_8kfFpTzmx~JT@T2Og4uxC<9&^}$O z-JkB^ipzn^P{MMzRGbWq+vJK$pa;MdsJ=uoEPsWc@6n?h0ZuEc&De}w{rj79Yyp(lrIJfAOt*V)cBU6G{kqiTp93fB3CgifmXL~kC(R! zFW_74!f`NNWh_v@@5*-!Nvp>BE?C7Nf1E%LH(+gCyo`Ar0%KD6GI)X82p2gd8OOf9 z9K)ggt2{<}F3mT}Dn|CQ6_8g{tXu={xNKn>k*-DT*1S5Bhv2t@-G-3eI?TzxL~U#Z z#+FH|_^8q~0$e!B1K_lS{Guzou%lm^H9~gWZByxZI*#f6T5IeJGm9yNN;ka>D()!o|!Wo9adlBc;GKy2z`rhZ4iWy8lN&R_-|i3`t8@K{r)&%-=XnBwm#3%n8h^N z{Yb3;hZh+O;jMW{miRWi5gUp87kQ%o2>D3jfT8?lq}nyht@d=g;c1Zjgm^dl5l>IM zcOa4=|2-8^`80BmXb~$wJ<_8&lcH$xX%y%aqf>!(fv`09qF1y5+ti+|DntbU^Wml6 zs$8((U^H4IY`T`^FtyJI+a6&oxWGbY3@YH0VUR`Q!7mer?yL31d58Fgz|b$gSW=d< z-&B**sRmC|JWyb2U-?>!AB5F#-h4tw;mJ)0GUC#g;O1tRgAZLqzrQ9)}DXU=_8b9VPbaM-l zZQKaF$T%U|VXhh1$bT=4$9i&(*sswxMJMLhG+76Gd;AS~eqHZL7MSML_;jyu`(ttb zmm1w6vUxg4f&+-x8kQbGp7yh_1MLtK z5tT3u{g7;KiTk>D%mtH4d?)WQ0#o;8#V&Uoda)cMeE&)>;w~Q#GPBS4mvy;SX11v+ zsTpzA5#;Yhgwl89Se}z9T`tJOeOIe0Y+TM~8#lUumqTA0>%gs8ODtY~QDIf!xVq%i zb(^XtdDG!98irqIGPvp!JBB4aEMB_q_)d!9IPG3J@%2aLuYVW>N2vdUpwFoG>JaAu z1hR3GCw+g$ek#e*NFMqzRu*;L5$)$Glf7#Alv4Yqc&Ie7a-_G3&Phl@&VcYZhq3^X zRh!;4srh+r+g2JIhF5SV zJ1c!We!Xq0!F3ql6>Htt`s6b*WO9b@)3K({Y*n|W;@uVSIXuY(BenXc>z*{uta4Qq zeHR{y{fO-!pUEa;tPD$k7*}R7wDx4L1~t?6RaiO86pyO=3?D<%Q49VEc0sfs-t*7) z%el?#nBB+b%mRDaDu)h|L=ih0a~$Q1b-K3V2|&o$YH)d+oF7oxAk zzA z-gR!i+V__DT~iSs_lgd&0!OeH^JReAcn{;^&6VMk>=ILR7k8e1nVj zwUld$@kM2tCR2?XcAVB*5}OhaRl2^))FLkT%S?}>64J$er75A8j~w@BP+ zv?h_yFc~BGz}N;Co67=o*)c~7bgz_aKZCt8CR?R{v@Daf$$P_<$vk~A_O*Y1D>uCq|7s7$o3Z5bavk^K5&$F#oK zS{MoCpcJdeDqSlU(F&lmEv&=(6c_=g`-UoAr?!=A4oe>m>#UVkg|K<FsoIr{j+y zcY+eR6NZ6$)Y(=nS_sK8g@GkHV2A9e@Q+Am@I0HR!W#?f$k+G-tV-a}#`j}f|C3e@ z15=+NkJMj=v*B(0byoHI6${OUidmD-$MQUDbMop6AuXx{LoTi`hOX-womqE-{TI%~ z&Y5zJ((uMvbzbKzutc6LxjtqoA6X*%E|9G7HJ}AnI$oZt%TKQxsQSl__jXvS<5#{^ zJy2~~|C}YkzM=Xhlr6pX(BeL6(W1uy>^Ngd!Ss1aU|#+GDB0VU)(cZo?H}+v^>qJt zhRN$bbKVvI?0F@)=a-|go#(mH*v|7ZED$sfv`xmiN%ojrHx>KNCG3gx_9sUVVfRr& zj_BQ5uC<+`Uy2|VfD6Er{HkLAIv4mFz2sZoIGm3%zZ)%fb3ooCLf4~c(fCY-u*JRX zzg=+%uZJ2|TntT`cNBH&f%l8-^*z$d(HTtB6yJ#ve#0ec{%CRCe=igIb#%+W?S)gF z#LY1XhN1SUy?YDTS5MlQuCRA6!#pY6_Q+#>Qgx(oD@iw8Vc}x~o2(B!Q1)P@SlNb% zA}>&if@PzOB?wASgaymBC(Kqt83d)r!}(8YWy_ud{>Z843%Al=!}$zYy30!y`^ifF zP(|XatYw`m8TB8PK8?mt$ey&eKQ6EB9Jq!GADcls$qmJI@vo%YnN{7Q%!~Jb<$g$B z6U$0X$iS=Uv$6a_nj28 zwXC>dNnN!oUbe$jo>zMlJ6TI|7qv)d#KyGdrFFVOtsU#zLFGK=AHI_O3e{lNw>5}E z4T@N@H~z>vSX_6&Z#rDj?Vcr<%_O!ureJq!pW44S6`X^~t&)@&(O~U$I){0!@7j~p z;)UCQN$O;tYWU{{!I2-=9p6Da_bK#xOl}~l;rJEmpTy3uo=o^K%H6G8+GJP5-Lb&{OJ>)$&+_UbA3uLa$-d zXRt}|uc*E3fC@XvDD1Yy&>WzPpvF2MNsI}7I>@ZbXJaz!b>_#*0p-CsXe_W=Lr%T` zjYSPc$5G@Y`2UcTvq?^#S_^6QVDkQy{oRg5fvGGer%H&mRr}rn=Mz`J;JbzO#(WhP zQC05|{&y)?r|bb2F$ZKV$OVvspK6<=Nn} zPI^`)_R4$x$xT49BQl)$Oo5h{5hcoreaQCFCCM@J0~eyFugx3bauy9=6n?X6iHr7X+MN#9{RS9B|HT@rDfK{4z-fM zD0RvCF0LKBcf}rHBYUK`WxV=i>~%e0BrD5Ujw4w4Ed;EdJ=ji;mj+dEJx84*D)yF8;$Ft)&WLx?1-p5 zXoI!tkmK2&D%Wf5&-`LHYgH94<5h?ngA|D~O(&v11RI-$nW1dm>Q=(Ot?J%t=!d=R zDj)Z18F)3oKh&wlyKji9tXm%E7I~ao9(qFzgrEm@khiVh^uDml?K9GTc@1-UrH*VL zablnJ4N$IhtSANY30966CM;$<2?Bc(v&X6LxDYXTbHR%&tdn^5E_>hmcq&&@mv z*n5G9r2nxKQw+yoN`|3YKbE5OQj3~Qzu~{!ZMf|&gd8h;)4^;JyE`o~A0?2alqlJ# z`=A3*7C|c8tckK2BNpRpAytQj95J~}wO@SzXk*xCpLJ`>5}L3dl_fT*I+FG!AB;x? z_mt?R(A0AZ{pxp_{?7kUz(=?PHZQO>NV9?2f6kGKeL5Gt9|bpqU`diOjAR@Cc~mVD z-g;9cu1x(3#}xbEA={USECA$VGs9Z>H8jLnd?VTCXfGk(*Irq^dH^_qNx4Q@2B`u< zA|0p|l0&NSO=|rG5%?_7mQ+Jg_Hmnyt(dpS8!xDX^I86i9_b};-CgpNwQc5Xbs#7i zfzUuaN%S9~NwdF_-?k8M4#M|>Jqxqt@Tg{DCQd;dKo9DtWr|mjO&hK6j&wJu4wKiy zifrq7yB4!{c-&!G6(ngtFc5@NjKFqq9i?btny!reLFx6;ZaiT_4DDk1IWwNyw2Pj4 z98VpUpX&Mcsf>J0mjyd@+h}{}9>fWgt!f9>z*t^|NN60KZOk@{DVl(5eX4zTY7A#M zGd5P_LrgG)a^1_uiz4{GIRn`aJ2q=iGD8Irl8@ zdG}XZZ%;x0K2cf|*TA-sW`7*)+r}3}NqO+QCc%(ZkkU~EzPy42_Yiy@NLEm=vFZV> zL=gNt_-`Uu(?4|HlUv}0HB*dR292uW(``uHHuy}12;Yjmurf+<$Gy=b{wF{YpO*~D zpy|Q#|KlRKv=TM|C&cu?BaL~*q(Mi!H`i}$NH5E>{~b0#%(cC52tE`P8E?CK#C{r;)=-vZsRiEdgmDGlIE zmddwH!E@?6@CE5x6+@#TA5DS3rfWAiQ?89bYKJ5(j)l(N*Bg7qvmv=NM|&-NCTT&> z9})A14wm(f(U!JuUIV;xZib>gr;l2z4e;JjG;&iBNC(@js`3w*V4 zMI&qzQdT(jY%FTb!CjFfDCS9LeNe0n5NL>7+c^XE))zbq5A|`N z#3P(fcu093c75FBg7!EkH$~ob))NoO>v6H$kFUml?}5j;9>_!bH_H)Gk`*Z3hCcuc zc8~C!S#r(o8)3j-qojmaX$GjMt{VZ;3>!CiL&@_0E`&QsnK;`@W$1EUHc=frG&1{)}> zA;{?I`W5KNQ3YXm_mwwhcX;j12*d$KEd(VLw}GqgARWTav$^mc_0@1g5Wgq z7pTrXQl0-so%G&~(5H#pL-f;e$PrYa<6vtUP~rV3oCC$gQ*v(|ptU#ME8h|nxA;p9 z@Z}GQt8A}R%bPmAYjp>aqYICSO@2@`-A@gtaXf$)YnLHTlA6C08+9o8IjZ} zr1&jqkyIB_N|qc+x&3do8ym&sQ>h%RjxT9j8^<}GPnJ1faeM%uhE8~?;hoSfYt(A{ z9OPBHqH#m&CV03ZDdtFE+(w6%@NP$Yg!i5VxuOO?k}nS1dI%kdXLbPAc8lGRfzxj4 z79Rm_M%Vj8Dy+wwah@k)uTsu3;;&ezf?sJZ6vbZ!WEna4tK2f2<5O9#)q=dqft>p% zqc6nCe5>z9K#~Wph4qxL2vBmeof|LfDq)#L_x8!gpLZKx?-5hM*Xa>A_{c7E#~|B6 zSLfiKN^nag4dmbWnUgfi@9aI$&Wslplwh`}xt0`>kF!=&S8oZkMDC{@m+rIfzNds) zi?G{Jb|JJ2s}@XSRjJ(xhv3nqA~`BG>}j}!p$?RdYA;ARpHP)trAgJMrgn`<)s~ea zo@;yNqz4Ljm`0wMwpeE1A!+69O&-)LwfY=dLe0|shdm|WLzFCD>j__FMj6(x2hn}M zMEkZ#KUSI6_TDSCSHgCi29DQAZ-1TgRl=O)IT~19q)?>V`K2XnnN(`T6}_rT=^j(1 zHJ1|STX}*;uVisiLn}CUm60}!ptn|RFT>fzTs^`0L1U6W&M?Knf3tJq_Z zd`tI0dvOkSC24oR;FC+^eZnh~uBW`SB;9v<*5or+vdA3#!B=s4KGyqYR4O9*t9(J* zyEgb^YykvGZ8BZg%UX883g=Kt47_cS1`_Cn$GQA0x7Ij>dpYLfe2O!rx_oZg5wUM@ z8Y{W4aFPx&Me^Lgw;>XJuN)S`>_jn3vAzfx-!qVAq4nSz4Ess$7Ndi%fss;OG_U8i zM^m~m(qAn|$$IRbxOVt?N`V%Yb6$!9eTZuR#B+W9(TE@A68H6tGqCIjijDB4+*D?? z-?$jI%7di)^DLlokN8_J+k(;Y_K2T*6a?)5^7Gj&TDRx;|ZA9w&9t|sW| z-8+yAO=0TE>Y!yH3A6Zk-vRwU00n3!4i5rCv>%jGJhW^6A*ByUX&KUgm(rb5nnU_6 zDg8Go&5+(FrQep)q8uxd8oglmQOX@UleL7k9?PszV0Jg+!6M7;aaeIpBd`on!{qpaxeWN7a-)|RD> zC`itSMPflaBB{Y5k#~5`QX4OXex1BjGahpmS1?I}HB*Q92AP54lqKela+k0NKv_?P zrMe2%Irn;}r*Q`2p{l&XfL~m6IbG^KH!z~4sjL@}nz{aZ_NVuFyjSU+o^i(G7iZx* zAX%Tbouw}cz|Nko!N7gk8w@HbOEf0I{BmJ>f@E!P`e$wAP(bD$@zV^93u8-yax))J%@_!9qL9Gjv z@K2+LztfvSI6Ihn59v%FhYttZQ%VUNcrT!YHyi7=;kRbvE%hF@1K#5!Z*`010p-3oOyi|5$#&6~ z6gjeh!Bf8phgldXYP3ww2Q5}?sCWFian$a;ptaQd&O7Lw{S>mjaP65*Sx;v_QwR@z z=>hOG!5`f3p}u^MzN~=nmRcLet#=`OEA8)v&!|1OITruISw_0J!{-_8N7|R15!Q;< zDpOevs2FgrG#%4%w^zCYTSb3Kti(N)ibd2VbBzwxT)pDdAb1hD24G)HR#Ux@WRicx zKh4|=daqlY;g@aUa_#_!sT;ASiRSGVPl6^+ns6Ipd9-0yorGWL1Nv8Sr^M!~rU%SoYI>7@ zOh|iA>F>%?+6tmmw(FlUJd^qKCGiuC-*M3!{Ls^ov3~lmWG6k2?1xw{xN`4EV>T1C zJN3TOUmH1TPJ-t)U-E4;6`Fo0#ovbJN_v7*FX=J}H_*w@cOtl>h6{Xrphz zOYMqnTI1k?6x_eFk=wqroO4FKw)3Xia^*Hfi_x(cF_dc@N<`6+H?3*kkg8~kYdf0K z?|8v+THHKDcsIe<i``eO6?Wbz*ix~ zRGFVP$5mT)e9RZ^UuZK&WVS=D14&77YG(TZ{a-e6&T-INB))FUYdS}cc9&ylqufcc zbQU=j&W23~Qu-Y91z!XSBTUCSpwtPZlq@xp`Y%#sldY|!Xa5Nr8#!qH86B;S&nMS5 zzT&t$wZCzZgK)kSK#p-k2lOexjtMU3ds8A`a^nyWt|DLRY@eI4Mv9)W2m59V_QlnD zW{U=7nmh2LeM5Y;xTci7N(8b;#3tx1rb@A!5}MMatEMSE9LuRGL%OP))@)X{%q!aj z%|>XQ>?AwnSa9~!H^e&0nxX)ng8sHS#_81VG|75%7;(JbvBC5Aj#f4g-p+Kcl6scC z6Fgo>Yo}GQ)CGx{xoyeO+oGEjTeg@+_sVq94YJbhiICw0O>CEsoD~e+Sy4t?YrMOE8tTr0z`)ZOL&^F%u!scDJd1V`rp9#L)t{UC~ zh{ZU}Qykl+-@5;hOwPWCUFR-++?GSw`J{chOCK-Ye=qJse!`XslC18exOZq5AkTOy z6^nh=Dy4I!bPUo?DV;5)qmgbxI%-SU4*Dea3%wn-A*Nlrc4!&w+50!|HOXO>bX+VA zkd<%0ZFjpfS=|&14JbMEPDz^`V~gl>TvN1@HN_y()~ASkp>_1zT9OkRW74A9|BBPI zBu&+v+`dZk-sao{`<%(LYh75ciQ1p^@JSC)p$W%k7dx6}62;L?8JS{QEnPnB11f~bDr#a_+zQ! zCej-D%Hy%!!Y(1@Oipe8(o>&7_6v);y2XS3Zs@9z_Z2SZu$$Z0E&k0v5k1HW=-A}O z6XMLk(#irY!OfH4I~{0;*RPyX^hd|WZ5kA#eZNZiU25y*0tr7(VSj9Y_t&a!ef?Zk zI-e_AtsT+6$MnMq#Ck+cQv+u=GW~<81zH{ZPW)%6fAi~+w+d1U+IO^X#+!Y%1?*b9 z*^W1#HvP~8Pc@M9^uu14xmS8#ed6>JG&_ZXM_^;a^d#f>4jj(cL0!BHyf_p57ek;M zdJNs-1^)|A{>m(ahrU>Mw>TR)w@1E`x#oLF`=qw^PS5ElcbL9)v7E2nY51aU_!uDC zqS8a$oI|d-f?K88sPew@_cR{NesLfBWwS>qwbx0iOE<1#{E$1b? zPXHgrhgdQffX9>XN67{%1e=~2|AN)A9hsWb$ zf?ot)^9RU<5icmT3Ro}kvrdZ7`c+#jw(KQC;(XuZ=7|h3Cbu-tSPTDc@IG~uqNxE9 z9Ku{ZHFzHU7G+ahj-u-UGiNwhs?#HmG2+Saz~g=tw*;f!;2{Z`25F-Vae#___e!2F zCiqBJQwR+E5%OHWsm7*kV(=J*=IH%l&m#2 z^pT}7^{*7s3}sDy;G&mT_Aey(c~aE+`!Eh=5tx~X6xlsK(Ow$KQ6q=!9&eD+JRo7n zM>*@;uZxrreNoU*FVJ!~oJzeLyc$H|(sEn(w$Evl!6V%>sdF=w&Jo%cc=sfFK@I-? zjgSBvF?))p8^N!`ND58_50yaxRzIhWaBH}@@O zal8+j?TxMJJ?m|lp|{#kt{<^M0UvslRywzB=vfcT@0R9`V-OMe8mt11mWOYOHpfxG zlx2?ds3FEj5?N+=5b&1dholchyh<*UG17}7e%mn5Xc%`O4u2Qy(n-$KB`$y`u2b-N zn0x&f?cffLkLn_hHr5Yp)d=3x|9d6AK97@&JezNTq^e3aA9xyMGjK9ZE4nqJdL28CR}3PUsv|F-sW-F4LRvwWwtL7QR{5bP(FOGUrY} zihgjp(@L4~@v@>jCNe8(*A5k8Pu3x#ILV5l@TJojx8sty89LsurNB4u!Z#XpjC~0h za27wJ8eq>Gk#+M+)=7R#H<^~YrkYD_8Hh`N*t>rQG%9-vv`W?no<)(FV!%&e*$WBQ zhJXQshYLw2|9V)?J|w>F1(y~UA!=g?a>eSwCrpYS;tvt8`~+xEdhZ4=2da}woe*b3 zhJPvf+LY&^t60~_84e{AH-pL!pe&Qh{86ffB5;Lkd0MJPF4Yn)@#Gb?z4kl?#THvJB+d)uL)$I}o*BBtI$+#HQT2$o zL}ISZh9o{D&I6D2I0Tm%JoW{~|4-k^K)cBdvkPI<(@+KKKe>!U{9dx$Rkcie!;_Q!ye5zO6j@6XHk^$LHi1vWJ6EM>r zg_8CldF-c>zlAJIfwIt^8lv9jvU8H&1@%Xcwa)_vr8a0fs#N@E@Xikp3y{9UOF!vk zkSBhoIsi}nG-h%pt>+Nrs;n7aGgRnF0QzbQ>ADY+G7DB@a;VMpo!jdn-8GUUZjI=? zE7@I$@>PXcsEC&rG}e=RxfcINLN@|F{+!|H&V*$Zo9oKM@p30cARM|XZ1P@^tlF5c z5NGmN;67Nuc~H3m;zO`PquOYd<$Lp(ehKyCb7`Hv6rwg$j(Kd*nHA!^MA60xQQnD? z2FWGyTyWSwDZS@~ow@NTmY;~aLZUX9WQJv{HG4_(j8(~$vl!zaK5efJ?Dkm8e-s^| z7_+sUYrXvs?3P#iI~Yh!tX?{hv3ai_|abc!#CkG@DJb1;J<}s#oruF z`iuH3ixRLVI*@7QjITix&Crm~_Q1O!`FuJG{EjoWLE~JHb0s9+7RqN@=Iv}dgNH_< zYPhYkt+L$|jW#5H2Hy&|yR+C`u&POg$4L&6iEl<^*-Dq`7N#$^j!-VfnIKfLG|tJ;)G>gIGZql&VDK+9YU`U#9~~vCi5cZhx_Y_u zAZ#rzxe#x7H|#{nTeBT#yn(PqGR(AzxR2_u){O5)ZYW$f*-}V zgE3}#n*uW;-yV+{iD`<(jKo2^AR0dvX5_0N!9|*rtLKAXLLM4eewk~fk=q^P2!W3T ziF8hho4(%!-w4Jfli0ir#1n%yH?6X{J{qO_gFlVZHCK$%7ePAVQ!z4{W5y+%VO~a` z%?sYZS?I;Z3jYX_mhC0+6-dEiTzxgtH)TLK?eaJA{uP};P-1eXSW<_t9f$8GYZq#B zH})Gn*%H}b*~lxvzPjt$;hlAzs|Y)DNL2bJVgH9j_0XgSW}Jf^c*d4wAKr8D6?A!q z-QY-ucTz7rFw)M+Jw`pfA3g1}UBZb)yJa+HaqQ(intpkYhQz-HKf@lSHa{60CAE1t z@E_#F3NwQ=dtu)VO9I1l*5nIgkUt`RW$Z8RBQ^GsTG~em!F~_HPlDgW`{~NP1YMye zv?87kfQDRxQ!W?246j2RK%}Ku+50%mT`A_#GL#5xkRaw(NgpR9zU_Okk>BujGGfzf zTc0X`cbW$sMUGy?nOp}C?{vxq;Pdr*sRodLHAJP~DS; z;v;p}0&AeM8+`SRYy))NQ?)5pN9$8GKKYIS_-;SdSAzOhMCv179e;!!c9*ycG#>|f z`c&NOd}Mvw1<%FMl7mMX%(ZVU_D$S`GU@pUA7@R<<)z*6Xy`l7$jkTVJ&BR~J)yIn z5s~|cLZ>|H$o<-2w`XPK{t)EaGDMoE@qzDL|0f>LBL(1}H-D=p9zTMX)J|9qIyyl`_zYo0vy8d;LXR}d*oHTv?rk>BIzcrB#2evNZw=;_ zaPoLiWXJkv0l~npFy|L%}t0wbRe0tg4HgX3s}{tp=h|a?Sa?6_jj_ZwPA3OuW8q3+b=u;0bMFl#9K9F7t^g;XwJ+SFGvQesclc~$~ zRc-#lBc6%ybSrb`EoniN&GU#}H)=w)v=UU{5YSjh4az|01Vj(~tB|C?GeG;CGy+m7 z?LIX?vHAMMrC#!*7RBq(*5|OU49_qRyRqdflgd^+9QHA$<*K4TVH&yuZ;2-|5vi*&JUw5Z?@a+Uw{OM}qbV z^M_7|YXg1YScbVnC&b?&^;SFi%noyi_@)!^{}0?uf2~%9bFS6fzvL}gDkqyESp}_j z9g{H?ILe0xF$RsJz%k8nSR1Ld#kS0GLcAjowQoJNYaqJ{^u6P6{pLxd@gB`p+X@W#;hTKI6ha znC={YU*Pu{eqHz-$FC2+7+`}5;JL>a$*z;JX{E>7$1@gHSR4ia{Ho$K`vSYHWCt)u zp)*4VY7;w&1i0ZBNPR?Z&g9aPEmqRm;;mIu33`XhD9oJYpv7cC z3|51>Fh=MA7Ek)97qDJQ2a&Xt*|xE$YcJ}Wc7))7I~0P&!dlbhBUxqxcXYv29oM81 z-VAX&;D=jyX^=t7JI_6hKOd>%iNWJ|BG31@dHq=recMhW zMK3>imxAHYf?r_X+FRE=L(s>Xqc}ZmL(CaFrVB=6X<-T3ZzdR26GxT;Z<+>;2AAym z8dJ^mwmN1-ufg?YL!r=4NS3HR!j}~8);cYo{Tnt4gDy>HxUG-qS;0v6nmU#r>(XMh zqcGaN812?Nxjx;pt4<}%3B6p+jDh0*8nDo6?RZnXTx*`&krf)Zl!fcwjJowMm9W&; zTE`i**81|3>AZC!tHM_pS)gcs{T}!~r~ff71M9XGHsnm2eS43Mn>4Mor)GXVH)(#Y zN?7Ro+#`0b?AU1x_dO21pW=R^4qnUMa-B-(3GS*^TBt>qGv2+VP$jr=jvJtnrbArI ze9YQ&!PdGAOD1w|OH;ab)n!9djahlUTzDQ&=)DARh@ycX@rVEl{#TQ1n_QR$j}O4C zTu!UCym`jT&RoH=n$bT~(;e?$kr#fk{`tt@T8%`(4``bP0pflCQVz9yr?;ACHFKeo<+hy0_^-Q`YvVjY>v?KLpk zm2KHf@P`;YRLk~eraZ*blEZJD*Pg-~&zcflt3aEbvOWuY;rZ6ZckR(Wd&hh$BGI(Z zxAfrJW8o&A^-$zPng=G_3kzKMy9qTJovdGb0`~7rsP*UIOVn@jmwFyK-%w{l$L8qhJ4yjE72C ze7Rq-t`zj^rMptF&yTdH)MCF+qy4_b`(>n;)JF&QlAO%}<`N?ug0&+v;H%IN^azqC zbf;sQdD<*r_PYHnQ(eTG@+~^!TWpDCpXJ(__0_LcU#Jd=Cqg?7oNf+lyZv)9*GGC2 zpNm<(Yi8+;*R18nu^lT-RNlHae`c;F{LUL|zlApP`*<%I@4bfi;(Xke6y4`y6g;b^ z;i~ZQTT*f5d^%&sEViS*y1qQuvZHZ{C3kJ|hJBX0wL3PPTbn#{_u6nDoLAK4fn5yM z)jy~+CPvDykip7Ts>_|X&YUpzxM^(-&e z9WC`U9yKsSY8_bugUdj%Yrrp;3#Fi_U$TDV(K8Wi`pS1z(tGgh2IzwC2jqLn%CR5e zK|>)-@rJ+C3!ZU28^hF>%fb%5j?QK(O=UT~LU_{a#Wz#k0(?yqHlYxnfR`&~=y4b~ zaJye_Jkz)#J7z^{w0T8>`P*?HuaX-dV)2f|8$&l9w%>Ap-13dfVToVN-B=JkBKlwV z|9g4D{ZHOMYkAD-5#Y7P2%lj85pHmxoRcy5m{YP?`ucH&c=lv)Zz{ZUbmuoLwj1q` zK^9;1l(GZuVPC$n=8xvG0+lNtexy=i*9_dq{kqie-C0WW*R1w7rTMfL{v|`TcOTGN z?yw|>zgvc5h7=d<9WO}b%1}7`Q4lD|C6y-!d+tS=Zxn2-z)m~{%J)q%MTl)GM(@f{7)^vZ7Pd0#0WS0 zMwq`r)SfZmA(0%X5Tk#vVRb{QEU7H2gljqsAFxga$7R~6iCjyJQ0(KJZ&|<4p7l({ zD!y>L!kjtc!tFGIQL<2o=4l%GQi31R`D78H7PN!##K$;TDCRM!KVk;&@ySRx$@0+U z^&Af!k2P}<%f!8EHue3?T{9nvzW>Z!BeZ93kFly*6-L;&L95lR;&htMB-R3`?RW36 zoRiki_810x2_JD1no0=R^T5SSy!~rCpsc< zP28;fhW9R3Jr#R%uPX5~_?r^$@v@v)*8+oD;?Zn_^gty%>{V7OkyZhZrjz!78~!Uk zW4h@^#tMNyDpZ7{gvjTYwdy{?Oep0-%6U0;2&vvkN-k^$=LNkHOp)tyT*L6B%+^q( zZLrS>6jJn84p0Vj4LEUgJmJ_1=G?D(&1^`(*b=1v0e-y#MNXSSPZ6Y;Zo(r~rsUEU zX^>bq?R`wvl>ZptRR5T~X+5MAFZWeHbX$e8t$K|{U;S{*b*CTB)XzwdG7LVPHLm6X zWt(E!f#eq-;HSy#%C>)|^STPN_hF;sy^>H#t9_MG{f6&h`M4_B%B(KwzrW_eTS^QM zz4)-QO+9IZ*0?;ct*R-?-7B^Jhn3?L`lz;l zKAhOb*$Z^a-KE-0{lN0p6$1~nKG^>tXP+SDsqEM2O0{+6N_+exBifYqiP65e9Pe)Fny`-=d^>Fqwy|OJzYc0Pin?0t61VP#6Nah@g6=1ZiuQVv(4G^)*9#6EJ zrTZj%sUdl9ie1lQCdCM^dI1Np4-}ao(*R3k`0=H0Jj<@t(%y* z=(a^k_M{cv#j__RJ#hP?rbXCQy2Y%n-C*T|6VQDoAJNBO7_l?F!T42k|3X0t; z8Wc@jeu4X9gDyYYJ!OOH8Y8%G2}SU6Rx}Or9==)L6fL|FQalHKtZN#R@8FxGg-=8J z$NL_Ol0|7Pk9!_x@+j@D$Jw(?8Ku=(jlY{wU-LUUF)udg!T;g1uN+?_>4e=GBN%0sF59;bJ%C8|`f7Ph_pM%z#EbQ#A$rJ3fR<>MGn^UUo zKsk-iZ2bNgO+@3yve)mIy$(6T5O};pFFeK@OAQP*g>pdyc;*&YAb-`+=--Ss>mMsM zd~1P^!Kb0SzFm$IA;@gqVhu{zhZ4-y|L6I)((^fZZW%JLz$BC~j<6|&s6kHGRjjkq zxJ^a>UWn&4r}2}4wl2FLG7PrH5^Ej>E);K}bw3I#j`l$!uJo;OgM>#vhp{Lg(qqog z1J9u~LHojvZ=zUQRYOMBP?Qc&G$we`UkjNT=xb2+shAnS)X-!*%}o}*pXTTB$vK#z z1=uYYuwUiE8Sj4h-Fne5s$$g4Il!`Vd|4Q2nlGwjFhF(KLKCDq0!7_4zctL@LM`)a zK)*|M9Kh)ycfV?oSIi-cIM8bJE$;%)p?O(=-+j{D&^aR?V%WzaaTlb9;T;6qsDQkH ztiC9JJ8&xUx-lBxMm&=X0lBfr{uNd_)3tzCWozK_;@s!4B9$%!;(Y1ylih{((ZyWf zBzr=!N_V}*+qt_jv6Q(Iv1Ul;i8JhNWV)o%{(JW}Zqp`}w%$9*e!;_|)-OG@*EjA5 zXC`1R=Y?3n0iwh0g{&!RyIfd~a}9i&fD#%WDWJo7(4yAzkob?G=>3{bf-^VcNAnQR zo|N|F`T*C)3+Eu=ig^a!dd=MK*ry*ajC&p0UfU8!W_;pfULqMk*wZ2@vi~d#lv8Za+_}uz|~l zMh;0Q202DO3ZqV*4K$It zj?i zCSwFS?6Mmn={#fOnqIJRd$ICDobyH75$%gLhWbP+qNrQoZ3aFk^{l_9cw$roWLWMI zzzj(~OaAXC7aQ%zrIFnhVp*SiM(avVz@2ofz$s3i8pfo;dEx(w5&DhrE8>MZA<5QU z#dldZGED!6F*Bm|c!?iMdx_IE6f|Fibq%8hil$50(F=e3~DE zT6|OV-i*eWy>d3T5mt)ZRKnvv-U)kr_(|cOr9Ll2?YV`}WW`s=aq1!9O!jp6ncD__ z%mPb_IknOVC`Y4_T&croBv;;AIDetT5GtGlsybRY=MQt$7FeFQoV3t5^=nUBUWi;@ zj$C&~uCL=dF#D#Gf!Q4q3Hmv-PY@0C_*LUZ`d`qe0^PwfY4^9{OeGrRE?en%a5FPW z+sc76-Hx%bcRV5K7~Vg)(^y#PWM^j6x7|ND0TiL4X@Xg{9he8S8-Pm;QXkIFw26463gJG66SadhhC# zLZhE$E0`A0kGCkROAD34=g>sE9oPGY5G4^hE39b_C{wLoDcFL~Qk%0A%xZ(8DW2YG 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 literal 0 HcmV?d00001 diff --git a/examples/tutorials/lessons/01-programming-the-braccio-display/02_designing_the_button/sketch.json b/examples/tutorials/lessons/01-programming-the-braccio-display/02_designing_the_button/sketch.json new file mode 100644 index 0000000..abdab11 --- /dev/null +++ b/examples/tutorials/lessons/01-programming-the-braccio-display/02_designing_the_button/sketch.json @@ -0,0 +1,6 @@ +{ + "cpu": { + "fqbn": "arduino:mbed_nano:nanorp2040connect", + "port": "" + } +} \ No newline at end of file diff --git a/examples/tutorials/lessons/01-programming-the-braccio-display/03_creating_a_menu/03_creating_a_menu.ino b/examples/tutorials/lessons/01-programming-the-braccio-display/03_creating_a_menu/03_creating_a_menu.ino new file mode 100644 index 0000000..1a4f832 --- /dev/null +++ b/examples/tutorials/lessons/01-programming-the-braccio-display/03_creating_a_menu/03_creating_a_menu.ino @@ -0,0 +1,46 @@ +#include "Braccio++.h" + +#define MARGIN_LEFT 0 +#define MARGIN_TOP 0 + +// Arduino Colors +#define COLOR_TEAL 0x00878F +#define COLOR_LIGHT_TEAL 0x62AEB2 +#define COLOR_ORANGE 0xE47128 +#define COLOR_YELLOW 0xE5AD24 +#define COLOR_WHITE 0xFFFFFF + +static const char * btnm_map[] = {"OPTION 1", "OPTION 2", "\n", + "OPTION 3", "OPTION 4", "\0" + }; + +void customMenu() { + static lv_style_t style_bg; + lv_style_init(&style_bg); + lv_style_set_bg_color(&style_bg, lv_color_hex(COLOR_LIGHT_TEAL)); + + static lv_style_t style_btn; + lv_style_init(&style_btn); + lv_style_set_bg_color(&style_btn, lv_color_hex(COLOR_WHITE)); + lv_style_set_border_color(&style_btn, lv_color_hex(COLOR_YELLOW)); + lv_style_set_border_width(&style_btn, 2); + lv_style_set_text_color(&style_btn, lv_color_hex(COLOR_TEAL)); + + + lv_obj_t * btnm1 = lv_btnmatrix_create(lv_scr_act()); + lv_btnmatrix_set_map(btnm1, btnm_map); + lv_obj_align(btnm1, LV_ALIGN_CENTER, MARGIN_LEFT, MARGIN_TOP); + + lv_obj_add_style(btnm1, &style_bg, 0); + lv_obj_add_style(btnm1, &style_btn, LV_PART_ITEMS); +} + +void setup() { + // put your setup code here, to run once: + Braccio.begin(customMenu); +} + +void loop() { + // put your main code here, to run repeatedly: + +} diff --git a/examples/tutorials/lessons/01-programming-the-braccio-display/04_testing_it_out/04_testing_it_out.ino b/examples/tutorials/lessons/01-programming-the-braccio-display/04_testing_it_out/04_testing_it_out.ino new file mode 100644 index 0000000..1d4a705 --- /dev/null +++ b/examples/tutorials/lessons/01-programming-the-braccio-display/04_testing_it_out/04_testing_it_out.ino @@ -0,0 +1,46 @@ +#include "Braccio++.h" + +#define MARGIN_LEFT 0 +#define MARGIN_TOP 0 + +// Arduino Colors +#define COLOR_TEAL 0x00878F +#define COLOR_LIGHT_TEAL 0x62AEB2 +#define COLOR_ORANGE 0xE47128 +#define COLOR_YELLOW 0xE5AD24 + +static const char * btnm_map[] = {"OPTION 1", "OPTION 2", "OPTION 3", "\n", + "OPTION 4", "OPTION 5", "\0" + }; + +void customMenu(){ + static lv_style_t style_bg; + lv_style_init(&style_bg); + lv_style_set_bg_color(&style_bg, lv_color_hex(COLOR_LIGHT_TEAL)); + + static lv_style_t style_btn; + lv_style_init(&style_btn); + lv_style_set_bg_color(&style_btn, lv_color_hex(0xFFFFFF)); + lv_style_set_border_color(&style_btn, lv_color_hex(COLOR_YELLOW)); + lv_style_set_border_width(&style_btn, 2); + lv_style_set_text_color(&style_btn, lv_color_hex(COLOR_TEAL)); + + + lv_obj_t * btnm1 = lv_btnmatrix_create(lv_scr_act()); + lv_btnmatrix_set_map(btnm1, btnm_map); + lv_btnmatrix_set_btn_width(btnm1, 3, 2); // Make "Option 4" twice as wide as "Option 5" + lv_obj_align(btnm1, LV_ALIGN_CENTER, MARGIN_LEFT, MARGIN_TOP); + + lv_obj_add_style(btnm1, &style_bg, 0); + lv_obj_add_style(btnm1, &style_btn, LV_PART_ITEMS); +} + +void setup() { + // put your setup code here, to run once: + Braccio.begin(customMenu); +} + +void loop() { + // put your main code here, to run repeatedly: + +} diff --git a/examples/tutorials/lessons/01-programming-the-braccio-display/05_display_challenge/05_display_challenge.ino b/examples/tutorials/lessons/01-programming-the-braccio-display/05_display_challenge/05_display_challenge.ino new file mode 100644 index 0000000..50e760c --- /dev/null +++ b/examples/tutorials/lessons/01-programming-the-braccio-display/05_display_challenge/05_display_challenge.ino @@ -0,0 +1,46 @@ +#include "Braccio++.h" + +#define MARGIN_LEFT 0 +#define MARGIN_TOP 0 + +#define COLOR_BG 0xA69F80 +#define COLOR_BTN 0xF2C36B +#define COLOR_BORDER 0x591202 +#define COLOR_TEXT 0xA65221 + +static const char * btnm_map[] = {"BTN 1", "\n", + "BTN 2", "BTN 3", "\n", + "BTN 4", "BTN 5", "\0" + }; + +void customMenu() { + static lv_style_t style_bg; + lv_style_init(&style_bg); + lv_style_set_bg_color(&style_bg, lv_color_hex(COLOR_BG)); + + static lv_style_t style_btn; + lv_style_init(&style_btn); + lv_style_set_bg_color(&style_btn, lv_color_hex(COLOR_BTN)); + lv_style_set_border_color(&style_btn, lv_color_hex(COLOR_BORDER)); + lv_style_set_border_width(&style_btn, 2); + lv_style_set_text_color(&style_btn, lv_color_hex(COLOR_TEXT)); + + + lv_obj_t * btnm1 = lv_btnmatrix_create(lv_scr_act()); + lv_btnmatrix_set_map(btnm1, btnm_map); + lv_btnmatrix_set_btn_width(btnm1, 1, 2); // Make "Button 2" twice as wide as "Button 3" + lv_obj_align(btnm1, LV_ALIGN_CENTER, MARGIN_LEFT, MARGIN_TOP); + + lv_obj_add_style(btnm1, &style_bg, 0); + lv_obj_add_style(btnm1, &style_btn, LV_PART_ITEMS); +} + +void setup() { + // put your setup code here, to run once: + Braccio.begin(customMenu); +} + +void loop() { + // put your main code here, to run repeatedly: + +} diff --git a/examples/tutorials/lessons/02-navigatting-the-display-menu/01_playing_with_the_Joystick/01_playing_with_the_Joystick.ino b/examples/tutorials/lessons/02-navigatting-the-display-menu/01_playing_with_the_Joystick/01_playing_with_the_Joystick.ino new file mode 100644 index 0000000..db53831 --- /dev/null +++ b/examples/tutorials/lessons/02-navigatting-the-display-menu/01_playing_with_the_Joystick/01_playing_with_the_Joystick.ino @@ -0,0 +1,30 @@ +#include "Braccio++.h" + +String message = ""; + +String checkJoystick(int input){ + String joystick[] = { "", + "Joystick left was moved!", + "Joystick right was moved!", + "Joystick select button was pressed!", + "Joystick up was moved!", + "Joystick down was moved!"}; + return joystick[input]; +} + +void setup() { + Serial.begin(115200); + while(!Serial){} + Braccio.begin(); + Serial.println("Press any button or move the joystick."); +} + +void loop() { + int joystickPos = Braccio.getKey(); + message = checkJoystick(joystickPos); + if(message != ""){ + Serial.println(message); + message = ""; + } + delay(500); +} diff --git a/examples/tutorials/lessons/02-navigatting-the-display-menu/02_handling_events_in_the_menu/02_handling_events_in_the_menu.ino b/examples/tutorials/lessons/02-navigatting-the-display-menu/02_handling_events_in_the_menu/02_handling_events_in_the_menu.ino new file mode 100644 index 0000000..e1c118c --- /dev/null +++ b/examples/tutorials/lessons/02-navigatting-the-display-menu/02_handling_events_in_the_menu/02_handling_events_in_the_menu.ino @@ -0,0 +1,70 @@ +#include "Braccio++.h" + +#define MARGIN_LEFT 0 +#define MARGIN_TOP 0 + +// Arduino Colors +#define COLOR_TEAL 0x00878F +#define COLOR_LIGHT_TEAL 0x62AEB2 +#define COLOR_ORANGE 0xE47128 +#define COLOR_YELLOW 0xE5AD24 +#define COLOR_WHITE 0xFFFFFF + +static const char * btnm_map[] = {"Option 1", "Option 2", "\n", + "Option 3", "Option 4", "\n", + "Option 5", "Option 6", "\0" + }; + +static void eventHandler(lv_event_t * e){ + lv_event_code_t code = lv_event_get_code(e); + lv_obj_t * obj = lv_event_get_target(e); + if (code == LV_EVENT_PRESSED) { + uint32_t id = lv_btnmatrix_get_selected_btn(obj); + const char * txt = lv_btnmatrix_get_btn_text(obj, id); + + LV_LOG_USER("%s was selected\n", txt); + Serial.println(String(txt) + " was selected."); + } +} + +void customMenu(){ + static lv_style_t style_bg; + lv_style_init(&style_bg); + lv_style_set_bg_color(&style_bg, lv_color_hex(COLOR_WHITE)); + + static lv_style_t style_btn; + lv_style_init(&style_btn); + lv_style_set_bg_color(&style_btn, lv_color_hex(COLOR_YELLOW)); + lv_style_set_border_color(&style_btn, lv_color_hex(COLOR_LIGHT_TEAL)); + lv_style_set_border_width(&style_btn, 2); + lv_style_set_text_color(&style_btn, lv_color_hex(COLOR_TEAL)); + + + lv_obj_t * btnm1 = lv_btnmatrix_create(lv_scr_act()); + lv_btnmatrix_set_map(btnm1, btnm_map); + lv_obj_align(btnm1, LV_ALIGN_CENTER, MARGIN_LEFT, MARGIN_TOP); + + lv_obj_add_style(btnm1, &style_bg, 0); + lv_obj_add_style(btnm1, &style_btn, LV_PART_ITEMS); + + lv_btnmatrix_set_btn_ctrl(btnm1, 0, LV_BTNMATRIX_CTRL_CHECKABLE); + lv_btnmatrix_set_btn_ctrl(btnm1, 1, LV_BTNMATRIX_CTRL_CHECKABLE); + lv_btnmatrix_set_btn_ctrl(btnm1, 2, LV_BTNMATRIX_CTRL_CHECKABLE); + lv_btnmatrix_set_btn_ctrl(btnm1, 3, LV_BTNMATRIX_CTRL_CHECKABLE); + lv_btnmatrix_set_btn_ctrl(btnm1, 4, LV_BTNMATRIX_CTRL_CHECKABLE); + lv_btnmatrix_set_btn_ctrl(btnm1, 5, LV_BTNMATRIX_CTRL_CHECKABLE); + + lv_btnmatrix_set_one_checked(btnm1, true); + + lv_obj_add_event_cb(btnm1, eventHandler, LV_EVENT_ALL, NULL); + + Braccio.connectJoystickTo(btnm1); +} + +void setup() { + Braccio.begin(customMenu); +} + +void loop() { + +} diff --git a/examples/tutorials/lessons/02-navigatting-the-display-menu/03_navigate_challenge_I/03_navigate_challenge_I.ino b/examples/tutorials/lessons/02-navigatting-the-display-menu/03_navigate_challenge_I/03_navigate_challenge_I.ino new file mode 100644 index 0000000..8a25ba3 --- /dev/null +++ b/examples/tutorials/lessons/02-navigatting-the-display-menu/03_navigate_challenge_I/03_navigate_challenge_I.ino @@ -0,0 +1,70 @@ +#include "Braccio++.h" + +#define MARGIN_LEFT 0 +#define MARGIN_TOP 0 + +// Arduino Colors +#define COLOR_TEAL 0x00878F +#define COLOR_LIGHT_TEAL 0x62AEB2 +#define COLOR_ORANGE 0xE47128 +#define COLOR_YELLOW 0xE5AD24 +#define COLOR_WHITE 0xFFFFFF + +static const char * btnm_map[] = {"Option 1", "Option 2", "\n", + "Option 3", "Option 4", "\n", + "Option 5", "Option 6", "\0" + }; + +static void eventHandler(lv_event_t * e){ + lv_event_code_t code = lv_event_get_code(e); + lv_obj_t * obj = lv_event_get_target(e); + if (code == LV_EVENT_PRESSING) { + uint32_t id = lv_btnmatrix_get_selected_btn(obj); + const char * txt = lv_btnmatrix_get_btn_text(obj, id); + + LV_LOG_USER("%s is pressed\n", txt); + Serial.println(String(txt) + " is pressed."); + } +} + +void customMenu(){ + static lv_style_t style_bg; + lv_style_init(&style_bg); + lv_style_set_bg_color(&style_bg, lv_color_hex(COLOR_LIGHT_TEAL)); + + static lv_style_t style_btn; + lv_style_init(&style_btn); + lv_style_set_bg_color(&style_btn, lv_color_hex(COLOR_WHITE)); + lv_style_set_border_color(&style_btn, lv_color_hex(COLOR_YELLOW)); + lv_style_set_border_width(&style_btn, 2); + lv_style_set_text_color(&style_btn, lv_color_hex(COLOR_TEAL)); + + + lv_obj_t * btnm1 = lv_btnmatrix_create(lv_scr_act()); + lv_btnmatrix_set_map(btnm1, btnm_map); + lv_obj_align(btnm1, LV_ALIGN_CENTER, MARGIN_LEFT, MARGIN_TOP); + + lv_obj_add_style(btnm1, &style_bg, 0); + lv_obj_add_style(btnm1, &style_btn, LV_PART_ITEMS); + + lv_btnmatrix_set_btn_ctrl(btnm1, 0, LV_BTNMATRIX_CTRL_CHECKABLE); + lv_btnmatrix_set_btn_ctrl(btnm1, 1, LV_BTNMATRIX_CTRL_CHECKABLE); + lv_btnmatrix_set_btn_ctrl(btnm1, 2, LV_BTNMATRIX_CTRL_CHECKABLE); + lv_btnmatrix_set_btn_ctrl(btnm1, 3, LV_BTNMATRIX_CTRL_CHECKABLE); + lv_btnmatrix_set_btn_ctrl(btnm1, 4, LV_BTNMATRIX_CTRL_CHECKABLE); + lv_btnmatrix_set_btn_ctrl(btnm1, 5, LV_BTNMATRIX_CTRL_CHECKABLE); + + lv_btnmatrix_set_one_checked(btnm1, true); + + lv_obj_add_event_cb(btnm1, eventHandler, LV_EVENT_ALL, NULL); + + Braccio.connectJoystickTo(btnm1); +} + +void setup() { + Braccio.begin(customMenu); +} + +void loop() { + +} diff --git a/examples/tutorials/lessons/02-navigatting-the-display-menu/04_navigate_challenge_II/04_navigate_challenge_II.ino b/examples/tutorials/lessons/02-navigatting-the-display-menu/04_navigate_challenge_II/04_navigate_challenge_II.ino new file mode 100644 index 0000000..f3a9ca9 --- /dev/null +++ b/examples/tutorials/lessons/02-navigatting-the-display-menu/04_navigate_challenge_II/04_navigate_challenge_II.ino @@ -0,0 +1,70 @@ +#include "Braccio++.h" + +#define MARGIN_LEFT 0 +#define MARGIN_TOP 0 + +// Arduino Colors +#define COLOR_TEAL 0x00878F +#define COLOR_LIGHT_TEAL 0x62AEB2 +#define COLOR_ORANGE 0xE47128 +#define COLOR_YELLOW 0xE5AD24 +#define COLOR_WHITE 0xFFFFFF + +static const char * btnm_map[] = {"Option 1", "Option 2", "\n", + "Option 3", "Option 4", "\n", + "Option 5", "Option 6", "\0" + }; + +static void eventHandler(lv_event_t * e){ + lv_event_code_t code = lv_event_get_code(e); + lv_obj_t * obj = lv_event_get_target(e); + if (code == LV_EVENT_RELEASED) { + uint32_t id = lv_btnmatrix_get_selected_btn(obj); + const char * txt = lv_btnmatrix_get_btn_text(obj, id); + + LV_LOG_USER("%s was released\n", txt); + Serial.println(String(txt) + " was released."); + } +} + +void customMenu(){ + static lv_style_t style_bg; + lv_style_init(&style_bg); + lv_style_set_bg_color(&style_bg, lv_color_hex(COLOR_LIGHT_TEAL)); + + static lv_style_t style_btn; + lv_style_init(&style_btn); + lv_style_set_bg_color(&style_btn, lv_color_hex(COLOR_WHITE)); + lv_style_set_border_color(&style_btn, lv_color_hex(COLOR_YELLOW)); + lv_style_set_border_width(&style_btn, 2); + lv_style_set_text_color(&style_btn, lv_color_hex(COLOR_TEAL)); + + + lv_obj_t * btnm1 = lv_btnmatrix_create(lv_scr_act()); + lv_btnmatrix_set_map(btnm1, btnm_map); + lv_obj_align(btnm1, LV_ALIGN_CENTER, MARGIN_LEFT, MARGIN_TOP); + + lv_obj_add_style(btnm1, &style_bg, 0); + lv_obj_add_style(btnm1, &style_btn, LV_PART_ITEMS); + + lv_btnmatrix_set_btn_ctrl(btnm1, 0, LV_BTNMATRIX_CTRL_CHECKABLE); + lv_btnmatrix_set_btn_ctrl(btnm1, 1, LV_BTNMATRIX_CTRL_CHECKABLE); + lv_btnmatrix_set_btn_ctrl(btnm1, 2, LV_BTNMATRIX_CTRL_CHECKABLE); + lv_btnmatrix_set_btn_ctrl(btnm1, 3, LV_BTNMATRIX_CTRL_CHECKABLE); + lv_btnmatrix_set_btn_ctrl(btnm1, 4, LV_BTNMATRIX_CTRL_CHECKABLE); + lv_btnmatrix_set_btn_ctrl(btnm1, 5, LV_BTNMATRIX_CTRL_CHECKABLE); + + lv_btnmatrix_set_one_checked(btnm1, true); + + lv_obj_add_event_cb(btnm1, eventHandler, LV_EVENT_ALL, NULL); + + Braccio.connectJoystickTo(btnm1); +} + +void setup() { + Braccio.begin(customMenu); +} + +void loop() { + +} diff --git a/examples/tutorials/lessons/03-playing-with-the-motors/01_playing_with_the_motors/01_playing_with_the_motors.ino b/examples/tutorials/lessons/03-playing-with-the-motors/01_playing_with_the_motors/01_playing_with_the_motors.ino new file mode 100644 index 0000000..faa1e04 --- /dev/null +++ b/examples/tutorials/lessons/03-playing-with-the-motors/01_playing_with_the_motors/01_playing_with_the_motors.ino @@ -0,0 +1,41 @@ +#include "Braccio++.h" + +int motorID= 0; + +void setup() { + Braccio.begin(); + delay(500); + + Serial.begin(115200); + while(!Serial){} +} + +void loop() { + Serial.println("To start, send any key to the serial port:"); + while((Serial.available() <= 0)){}; + Serial.read(); // Clear the serial buffer + + for(motorID = 1; motorID <=6; motorID++){ + Serial.println("\nMoving the motor " + String(motorID)); + Serial.println("Current angle 0.0 (zero)"); + + Braccio.move(motorID).to(0.0f); + delay(2000); // delay between movements + + Serial.println("Current angle 90.0"); + Braccio.move(motorID).to(90.0f); + delay(2000); // delay between movements + + Serial.println("Current angle 180.0"); + Braccio.move(motorID).to(180.0f); + delay(2000); // delay between movements + + Serial.println("Current angle 270.0"); + Braccio.move(motorID).to(270.0f); + delay(2000); // delay between movements + + Serial.println("Current angle 315.0\n"); + Braccio.move(motorID).to(315.0f); + delay(2000); // delay between movements + } +} diff --git a/examples/tutorials/lessons/03-playing-with-the-motors/02_selecting_the_motor_with_the_enter_button/02_selecting_the_motor_with_the_enter_button.ino b/examples/tutorials/lessons/03-playing-with-the-motors/02_selecting_the_motor_with_the_enter_button/02_selecting_the_motor_with_the_enter_button.ino new file mode 100644 index 0000000..861dd5b --- /dev/null +++ b/examples/tutorials/lessons/03-playing-with-the-motors/02_selecting_the_motor_with_the_enter_button/02_selecting_the_motor_with_the_enter_button.ino @@ -0,0 +1,66 @@ +#include "Braccio++.h" + +#define BUTTON_ENTER 6 + +int motorID = 0; +boolean movement = false; +float initialAngle = 0.0; + +void setup() { + Braccio.begin(); + + delay(500); // Waits for the Braccio initialization + + // Sets the initial angle for the motors + for(int i = 1; i <= 6; i++){ + Braccio.move(i).to(0.0f); + delay(1000); // Necessary to set the motor ID correctly + } + + Serial.begin(115200); + + Serial.println("Press the Enter Button to select the motor 1."); +} + +void loop() { + // Check if the control key pressed is the Enter Button + if(Braccio.getKey() == BUTTON_ENTER){ + + if(motorID <= 6){ + + motorID++; // Increment the ID + + if(motorID > 6){ + motorID = 1; // Restart the ID to motor 1 + } + } + + movement = true; // Flag allows the motor to move + + while(Braccio.getKey() == BUTTON_ENTER); // Avoids more than one increment + Serial.println("Motor " + String(motorID) + " selected."); + } + + if(movement){ + + for (float angle = 0.0; angle <= 315.0; angle+=45.0){ + Braccio.move(motorID).to(angle); + + Serial.println("Motor " + String(motorID) + " - current angle: " + String(angle)); + delay(250); + } + + delay(500); + + for (float angle = 315.0; angle >= 0.0; angle-=45.0){ + Braccio.move(motorID).to(angle); + + Serial.println("Motor " + String(motorID) + " - current angle: " + String(angle)); + delay(250); + } + + movement = false; + + Serial.println("\n\nPress the Enter Button to select the next motor.\n\n"); + } +} diff --git a/examples/tutorials/lessons/03-playing-with-the-motors/03_moving_the_motors_with_the_joystick/03_moving_the_motors_with_the_joystick.ino b/examples/tutorials/lessons/03-playing-with-the-motors/03_moving_the_motors_with_the_joystick/03_moving_the_motors_with_the_joystick.ino new file mode 100644 index 0000000..30ad751 --- /dev/null +++ b/examples/tutorials/lessons/03-playing-with-the-motors/03_moving_the_motors_with_the_joystick/03_moving_the_motors_with_the_joystick.ino @@ -0,0 +1,63 @@ +#include "Braccio++.h" + +#define JOYSTICK_LEFT 1 +#define JOYSTICK_RIGHT 2 +#define JOYSTICK_SEL_BUTTON 3 +#define JOYSTICK_UP 4 +#define JOYSTICK_DOWN 5 +#define BUTTON_ENTER 6 + +int motorID = 0; +float initialAngle = SmartServoClass::MAX_ANGLE / 2.0f; // 315 degrees / 2 = 157.5 degrees +float currentAngle = initialAngle; + +void setup() { + Braccio.begin(); // Initialize Braccio + + delay(500); // Waits for the Braccio initialization + + // Sets the initial angle for the motors + for(int i = 1; i <= 6; i++){ + Braccio.move(i).to(initialAngle); + delay(1000); // Necessary to set the motor ID correctly + } + + Serial.begin(115200); + + Serial.println("Press the Enter Button to select the motor 1."); +} + +void loop() { + int pressedKey = Braccio.getKey(); + + // Check if the control key pressed is the Enter Button + if(pressedKey == BUTTON_ENTER){ + if(motorID < 6){ + + motorID++; // Increment the ID + + } else { + motorID = 1; // Restart the ID to motor 1 + } + + currentAngle = initialAngle; + + while(Braccio.getKey() == BUTTON_ENTER); // Avoids more than one increment + + Serial.println("Motor " + String(motorID) + " selected."); + Serial.println("Use the left and right joystick to move the selected motor."); + } + + // Check if the Joystick Left is pressed + if(pressedKey == JOYSTICK_LEFT){ + currentAngle = currentAngle + 5.00; + } + + // Check if the Joystick Right is pressed + if(pressedKey == JOYSTICK_RIGHT){ + currentAngle = currentAngle - 5.00; + } + + Braccio.move(motorID).to(currentAngle); // Moves the motor to the new angle + delay(100); +} diff --git a/examples/tutorials/lessons/03-playing-with-the-motors/04_servo_motors_challenge/04_servo_motors_challenge.ino b/examples/tutorials/lessons/03-playing-with-the-motors/04_servo_motors_challenge/04_servo_motors_challenge.ino new file mode 100644 index 0000000..11302ff --- /dev/null +++ b/examples/tutorials/lessons/03-playing-with-the-motors/04_servo_motors_challenge/04_servo_motors_challenge.ino @@ -0,0 +1,77 @@ +#include "Braccio++.h" + +#define JOYSTICK_LEFT 1 +#define JOYSTICK_RIGHT 2 +#define JOYSTICK_SEL_BUTTON 3 +#define JOYSTICK_UP 4 +#define JOYSTICK_DOWN 5 +#define BUTTON_ENTER 6 + +int motorID = 0; +float initialAngle = SmartServoClass::MAX_ANGLE / 2.0f; +float currentAngle = initialAngle; + +void setup() { + Braccio.begin(); + delay(500); // Waits for the Braccio initialization + + // Sets the initial angle for the motors + for (int i = 1; i <= 6; i++) { + Braccio.move(i).to(initialAngle); + delay(1000); // Necessary to set the motor ID correctly + } + + Serial.begin(115200); + while (!Serial) {} + + Serial.println("Press the up and down joystick to select one motor."); +} + +void loop() { + int pressedKey = Braccio.getKey(); + + // Check if the control key pressed is the Joystick Up + if (pressedKey == JOYSTICK_UP) { + + if (motorID < 6) { + motorID++; // Increment the ID + } else { + motorID = 1; // Restart the ID to motor 1 + } + + currentAngle = initialAngle; + + while (Braccio.getKey() == JOYSTICK_UP); // Avoids more than one increment + + Serial.println("Motor " + String(motorID) + " selected."); + Serial.println("Use the left and right joystick to move the selected motor."); + } + + // Check if the control key pressed is the Joystick Down + if (pressedKey == JOYSTICK_DOWN) { + + if (motorID > 1) { + motorID--; // Increment the ID + } else { + motorID = 6; // Select motor 6 + } + + while (Braccio.getKey() == JOYSTICK_DOWN); // Avoids more than one increment + + Serial.println("Motor " + String(motorID) + " selected."); + Serial.println("Use the left and right joystick to move the selected motor."); + } + + // Check if the Joystick Left is pressed + if (pressedKey == JOYSTICK_LEFT) { + currentAngle = currentAngle + 5.00; + } + + // Check if the Joystick Right is pressed + if (pressedKey == JOYSTICK_RIGHT) { + currentAngle = currentAngle - 5.00; + } + + Braccio.move(motorID).to(currentAngle); // Moves the motor to the new angle + delay(100); +} diff --git a/examples/tutorials/lessons/04-integration-of-previous-learnings/01_playing_with_a_joint_angle_gauge/01_playing_with_a_joint_angle_gauge.ino b/examples/tutorials/lessons/04-integration-of-previous-learnings/01_playing_with_a_joint_angle_gauge/01_playing_with_a_joint_angle_gauge.ino new file mode 100644 index 0000000..bad15f8 --- /dev/null +++ b/examples/tutorials/lessons/04-integration-of-previous-learnings/01_playing_with_a_joint_angle_gauge/01_playing_with_a_joint_angle_gauge.ino @@ -0,0 +1,97 @@ +#include "Braccio++.h" + +#define JOYSTICK_LEFT 1 +#define JOYSTICK_RIGHT 2 +#define JOYSTICK_SEL_BUTTON 3 +#define JOYSTICK_UP 4 +#define JOYSTICK_DOWN 5 +#define BUTTON_ENTER 6 + +// Colors +#define COLOR_TEAL 0x00878F +#define COLOR_LIGHT_TEAL 0x62AEB2 +#define COLOR_ORANGE 0xE47128 + +int motorID = 1; +float initialAngle = 0.0; +float currentAngle = initialAngle; +float angles[6]; + +static lv_obj_t * meter; +lv_meter_indicator_t * indic; + + +static void eventHandlerMeter(lv_event_t * e) { + /* Set the meter value */ + lv_meter_set_indicator_end_value(meter, indic, (int32_t)angles[motorID - 1]); +} + + +void meterScreen(void) +{ + meter = lv_meter_create(lv_scr_act()); + + lv_obj_center(meter); + lv_obj_set_size(meter, 200, 200); + + /*Remove the circle from the middle*/ + lv_obj_remove_style(meter, NULL, LV_PART_INDICATOR); + + static lv_style_t style_meter; + lv_style_init(&style_meter); + lv_style_set_text_color(&style_meter, lv_color_hex(COLOR_TEAL)); + lv_obj_add_style(meter, &style_meter, 0); + + /*Add a scale first*/ + lv_meter_scale_t * scale = lv_meter_add_scale(meter); + lv_meter_set_scale_ticks(meter, scale, 8, 2, 10, lv_color_hex(COLOR_ORANGE)); + lv_meter_set_scale_major_ticks(meter, scale, 1, 2, 20, lv_color_hex(COLOR_ORANGE), 20); + lv_meter_set_scale_range(meter, scale, 0, 315, 315, 90); + + /*Add a arc indicator*/ + indic = lv_meter_add_arc(meter, scale, 10, lv_color_hex(COLOR_LIGHT_TEAL), 0); + + lv_obj_add_event_cb(meter, eventHandlerMeter, LV_EVENT_KEY, NULL); + + Braccio.connectJoystickTo(meter); +} + +void setup() { + Braccio.begin(meterScreen); + + delay(500); // Waits for the Braccio initialization + + // Sets the initial angle for the motors + for (int i = 1; i <= 6; i++) { + Braccio.move(i).to(initialAngle); + delay(1000); // Necessary to set the motor ID correctly + } +} + +void loop() { + int pressedKey = Braccio.getKey(); + + Braccio.positions(angles); + currentAngle = angles[motorID - 1]; + + // Check if the Joystick Left is pressed + if (pressedKey == JOYSTICK_LEFT) { + if (currentAngle <= 315 ) { + currentAngle += 15.0; + } else { + currentAngle = 315.0; + } + } + + // Check if the Joystick Right is pressed + if (pressedKey == JOYSTICK_RIGHT) { + if (currentAngle > 15 ) { + currentAngle -= 15.0; + } else { + currentAngle = 0.0; + } + } + + Braccio.move(motorID).to(currentAngle); // Moves the motor to the new angle + delay(100); +} diff --git a/examples/tutorials/lessons/04-integration-of-previous-learnings/02_selecting_the_motor_in_the_LCD_menu/02_selecting_the_motor_in_the_LCD_menu.ino b/examples/tutorials/lessons/04-integration-of-previous-learnings/02_selecting_the_motor_in_the_LCD_menu/02_selecting_the_motor_in_the_LCD_menu.ino new file mode 100644 index 0000000..04ad83f --- /dev/null +++ b/examples/tutorials/lessons/04-integration-of-previous-learnings/02_selecting_the_motor_in_the_LCD_menu/02_selecting_the_motor_in_the_LCD_menu.ino @@ -0,0 +1,161 @@ +#include "Braccio++.h" + +// Joystick +#define JOYSTICK_LEFT 1 +#define JOYSTICK_RIGHT 2 +#define JOYSTICK_SEL_BUTTON 3 +#define JOYSTICK_UP 4 +#define JOYSTICK_DOWN 5 +#define BUTTON_ENTER 6 + +// Colors +#define COLOR_TEAL 0x00878F +#define COLOR_LIGHT_TEAL 0x62AEB2 +#define COLOR_ORANGE 0xE47128 +#define COLOR_YELLOW 0xE5AD24 +#define COLOR_WHITE 0xFFFFFF + +// Variables +int motorID = 0; // Selected motor ID +float initialAngle = SmartServoClass::MAX_ANGLE / 2.0f; +float currentAngle = initialAngle; // Selected motor current angle +float angles[6]; // All motors current angles + +static const char * btnm_map[] = {"Motor 1", "Motor 2", "\n", + "Motor 3", "Motor 4", "\n", + "Motor 5", "Motor 6", "\0" + }; + +lv_obj_t * btnm; // Motors button matrix +lv_obj_t * meter; // Gauge with selected motor angle +lv_meter_indicator_t * indic; // Indication of selected motor angle + + +// Event Handlers +static void eventHandlerMeter(lv_event_t * e) { + uint32_t pressed_key = Braccio.getKey(); + + if (pressed_key == BUTTON_ENTER) { + motorID = 0; // No motor selected + motorMenu(); // Load motor menu screen + lv_obj_del(meter); // Delete the object + } + else { + lv_meter_set_indicator_end_value(meter, indic, (int32_t)angles[motorID - 1]); + } +} + +static void eventHandlerMenu(lv_event_t * e) { + lv_obj_t * obj = lv_event_get_target(e); + uint32_t id = lv_btnmatrix_get_selected_btn(obj); + + motorID = id + 1; + currentAngle = angles[motorID - 1]; + meterScreen(); // Load meter screen + lv_obj_del(btnm); // Delete the object +} + +// Screens functions +void meterScreen(void) +{ + meter = lv_meter_create(lv_scr_act()); + + lv_obj_center(meter); + lv_obj_set_size(meter, 200, 200); + + /*Remove the circle from the middle*/ + lv_obj_remove_style(meter, NULL, LV_PART_INDICATOR); + + static lv_style_t style_meter; + lv_style_init(&style_meter); + lv_style_set_text_color(&style_meter, lv_color_hex(COLOR_TEAL)); + lv_obj_add_style(meter, &style_meter, 0); + + /*Add a scale first*/ + lv_meter_scale_t * scale = lv_meter_add_scale(meter); + lv_meter_set_scale_ticks(meter, scale, 8, 2, 10, lv_color_hex(COLOR_ORANGE)); + lv_meter_set_scale_major_ticks(meter, scale, 1, 2, 20, lv_color_hex(COLOR_ORANGE), 20); + lv_meter_set_scale_range(meter, scale, 0, 315, 315, 90); + + /*Add a arc indicator*/ + indic = lv_meter_add_arc(meter, scale, 10, lv_color_hex(COLOR_LIGHT_TEAL), 0); + + lv_obj_add_event_cb(meter, eventHandlerMeter, LV_EVENT_KEY, NULL); + + lv_meter_set_indicator_end_value(meter, indic, (int32_t)angles[motorID - 1]); + + Braccio.connectJoystickTo(meter); +} + +void motorMenu() { + static lv_style_t style_bg; + lv_style_init(&style_bg); + lv_style_set_bg_color(&style_bg, lv_color_hex(COLOR_WHITE)); + + static lv_style_t style_btn; + lv_style_init(&style_btn); + lv_style_set_bg_color(&style_btn, lv_color_hex(COLOR_YELLOW)); + lv_style_set_border_color(&style_btn, lv_color_hex(COLOR_LIGHT_TEAL)); + lv_style_set_border_width(&style_btn, 2); + lv_style_set_text_color(&style_btn, lv_color_hex(COLOR_TEAL)); + + btnm = lv_btnmatrix_create(lv_scr_act()); + lv_btnmatrix_set_map(btnm, btnm_map); + lv_obj_align(btnm, LV_ALIGN_CENTER, 0, 0); + + lv_obj_add_style(btnm, &style_bg, 0); + lv_obj_add_style(btnm, &style_btn, LV_PART_ITEMS); + + lv_btnmatrix_set_btn_ctrl(btnm, 0, LV_BTNMATRIX_CTRL_CHECKABLE); + lv_btnmatrix_set_btn_ctrl(btnm, 1, LV_BTNMATRIX_CTRL_CHECKABLE); + lv_btnmatrix_set_btn_ctrl(btnm, 2, LV_BTNMATRIX_CTRL_CHECKABLE); + lv_btnmatrix_set_btn_ctrl(btnm, 3, LV_BTNMATRIX_CTRL_CHECKABLE); + lv_btnmatrix_set_btn_ctrl(btnm, 4, LV_BTNMATRIX_CTRL_CHECKABLE); + lv_btnmatrix_set_btn_ctrl(btnm, 5, LV_BTNMATRIX_CTRL_CHECKABLE); + + lv_btnmatrix_set_one_checked(btnm, true); + + lv_obj_add_event_cb(btnm, eventHandlerMenu, LV_EVENT_PRESSED, NULL); + + Braccio.connectJoystickTo(btnm); +} + +void setup() { + Braccio.begin(motorMenu); + + delay(5000); // Waits for the Braccio initialization + + // Sets the initial angle for the motors + for (int i = 1; i <= 6; i++) { + Braccio.move(i).to(initialAngle); + delay(1500); // Necessary to set the motor ID correctly + } +} + +void loop() { + int pressedKey = Braccio.getKey(); + + Braccio.positions(angles); + currentAngle = angles[motorID - 1]; + + // Check if the Joystick Left is pressed + if (pressedKey == JOYSTICK_LEFT) { + if (currentAngle < 315 ) { + currentAngle += 15.00; + } else { + currentAngle = 315; + } + } + + // Check if the Joystick Right is pressed + if (pressedKey == JOYSTICK_RIGHT) { + if (currentAngle > 15 ) { + currentAngle -= 15.00; + } else { + currentAngle = 0; + } + } + + Braccio.move(motorID).to(currentAngle); // Moves the motor to the new angle + delay(100); +} diff --git a/examples/tutorials/lessons/04-integration-of-previous-learnings/03_learnings_challenge_I/03_learnings_challenge_I.ino b/examples/tutorials/lessons/04-integration-of-previous-learnings/03_learnings_challenge_I/03_learnings_challenge_I.ino new file mode 100644 index 0000000..517e3da --- /dev/null +++ b/examples/tutorials/lessons/04-integration-of-previous-learnings/03_learnings_challenge_I/03_learnings_challenge_I.ino @@ -0,0 +1,161 @@ +#include "Braccio++.h" + +// Joystick +#define JOYSTICK_LEFT 1 +#define JOYSTICK_RIGHT 2 +#define JOYSTICK_SEL_BUTTON 3 +#define JOYSTICK_UP 4 +#define JOYSTICK_DOWN 5 +#define BUTTON_ENTER 6 + +// Colors +#define COLOR_TEAL 0x00878F +#define COLOR_LIGHT_TEAL 0x62AEB2 +#define COLOR_ORANGE 0xE47128 +#define COLOR_YELLOW 0xE5AD24 +#define COLOR_WHITE 0xFFFFFF + +// Variables +int motorID = 0; // Selected motor ID +float initialAngle = 0.0; +float currentAngle = initialAngle; // Selected motor current angle +float angles[6]; // All motors current angles + +static const char * btnm_map[] = {"Motor 1", "Motor 2", "\n", + "Motor 3", "Motor 4", "\n", + "Motor 5", "Motor 6", "\0" + }; + +lv_obj_t * btnm; // Motors button matrix +lv_obj_t * meter; // Gauge with selected motor angle +lv_meter_indicator_t * indic; // Indication of selected motor angle + + +// Event Handlers +static void eventHandlerMeter(lv_event_t * e) { + uint32_t pressed_key = Braccio.getKey(); + + if (pressed_key == BUTTON_ENTER) { + motorID = 0; // No motor selected + motorMenu(); // Load motor menu screen + lv_obj_del(meter); // Delete the object + } + else { + lv_meter_set_indicator_end_value(meter, indic, (int32_t)angles[motorID - 1]); + } +} + +static void eventHandlerMenu(lv_event_t * e) { + lv_obj_t * obj = lv_event_get_target(e); + uint32_t id = lv_btnmatrix_get_selected_btn(obj); + + motorID = id + 1; + currentAngle = angles[motorID - 1]; + meterScreen(); + lv_obj_del(btnm); +} + +// Screens functions +void meterScreen(void) +{ + meter = lv_meter_create(lv_scr_act()); + + lv_obj_center(meter); + lv_obj_set_size(meter, 200, 200); + + /*Remove the circle from the middle*/ + lv_obj_remove_style(meter, NULL, LV_PART_INDICATOR); + + static lv_style_t style_meter; + lv_style_init(&style_meter); + lv_style_set_text_color(&style_meter, lv_color_hex(COLOR_TEAL)); + lv_obj_add_style(meter, &style_meter, 0); + + /*Add a scale first*/ + lv_meter_scale_t * scale = lv_meter_add_scale(meter); + lv_meter_set_scale_ticks(meter, scale, 22, 2, 10, lv_color_hex(COLOR_ORANGE)); + lv_meter_set_scale_major_ticks(meter, scale, 1, 2, 20, lv_color_hex(COLOR_ORANGE), 20); + lv_meter_set_scale_range(meter, scale, 0, 315, 315, 90); + + /*Add a arc indicator*/ + indic = lv_meter_add_arc(meter, scale, 10, lv_color_hex(COLOR_LIGHT_TEAL), 0); + + lv_obj_add_event_cb(meter, eventHandlerMeter, LV_EVENT_KEY, NULL); + + lv_meter_set_indicator_end_value(meter, indic, (int32_t)angles[motorID - 1]); + + Braccio.connectJoystickTo(meter); +} + +void motorMenu() { + static lv_style_t style_bg; + lv_style_init(&style_bg); + lv_style_set_bg_color(&style_bg, lv_color_hex(COLOR_WHITE)); + + static lv_style_t style_btn; + lv_style_init(&style_btn); + lv_style_set_bg_color(&style_btn, lv_color_hex(COLOR_YELLOW)); + lv_style_set_border_color(&style_btn, lv_color_hex(COLOR_LIGHT_TEAL)); + lv_style_set_border_width(&style_btn, 2); + lv_style_set_text_color(&style_btn, lv_color_hex(COLOR_TEAL)); + + btnm = lv_btnmatrix_create(lv_scr_act()); + lv_btnmatrix_set_map(btnm, btnm_map); + lv_obj_align(btnm, LV_ALIGN_CENTER, 0, 0); + + lv_obj_add_style(btnm, &style_bg, 0); + lv_obj_add_style(btnm, &style_btn, LV_PART_ITEMS); + + lv_btnmatrix_set_btn_ctrl(btnm, 0, LV_BTNMATRIX_CTRL_CHECKABLE); + lv_btnmatrix_set_btn_ctrl(btnm, 1, LV_BTNMATRIX_CTRL_CHECKABLE); + lv_btnmatrix_set_btn_ctrl(btnm, 2, LV_BTNMATRIX_CTRL_CHECKABLE); + lv_btnmatrix_set_btn_ctrl(btnm, 3, LV_BTNMATRIX_CTRL_CHECKABLE); + lv_btnmatrix_set_btn_ctrl(btnm, 4, LV_BTNMATRIX_CTRL_CHECKABLE); + lv_btnmatrix_set_btn_ctrl(btnm, 5, LV_BTNMATRIX_CTRL_CHECKABLE); + + lv_btnmatrix_set_one_checked(btnm, true); + + lv_obj_add_event_cb(btnm, eventHandlerMenu, LV_EVENT_PRESSED, NULL); + + Braccio.connectJoystickTo(btnm); +} + +void setup() { + Braccio.begin(motorMenu); + + delay(500); // Waits for the Braccio initialization + + // Sets the initial angle for the motors + for (int i = 1; i <= 6; i++) { + Braccio.move(i).to(initialAngle); + delay(1000); // Necessary to set the motor ID correctly + } +} + +void loop() { + int pressedKey = Braccio.getKey(); + + Braccio.positions(angles); + currentAngle = angles[motorID - 1]; + + // Check if the Joystick Left is pressed + if (pressedKey == JOYSTICK_LEFT) { + if (currentAngle < 315 ) { + currentAngle += 10.00; + } else { + currentAngle = 315; + } + } + + // Check if the Joystick Right is pressed + if (pressedKey == JOYSTICK_RIGHT) { + if (currentAngle > 15 ) { + currentAngle -= 10.00; + } else { + currentAngle = 0; + } + } + + Braccio.move(motorID).to(currentAngle); // Moves the motor to the new angle + delay(100); +} diff --git a/examples/tutorials/lessons/04-integration-of-previous-learnings/04_learnings_challenge_II/04_learnings_challenge_II.ino b/examples/tutorials/lessons/04-integration-of-previous-learnings/04_learnings_challenge_II/04_learnings_challenge_II.ino new file mode 100644 index 0000000..3593e5b --- /dev/null +++ b/examples/tutorials/lessons/04-integration-of-previous-learnings/04_learnings_challenge_II/04_learnings_challenge_II.ino @@ -0,0 +1,161 @@ +#include "Braccio++.h" + +// Joystick +#define JOYSTICK_LEFT 1 +#define JOYSTICK_RIGHT 2 +#define JOYSTICK_SEL_BUTTON 3 +#define JOYSTICK_UP 4 +#define JOYSTICK_DOWN 5 +#define BUTTON_ENTER 6 + +// Colors +#define COLOR_TEAL 0x00878F +#define COLOR_LIGHT_TEAL 0x62AEB2 +#define COLOR_ORANGE 0xE47128 +#define COLOR_YELLOW 0xE5AD24 +#define COLOR_WHITE 0xFFFFFF + +// Variables +int motorID = 0; // Selected motor ID +float initialAngle = 0.0; +float currentAngle = initialAngle; // Selected motor current angle +float angles[6]; // All motors current angles + +static const char * btnm_map[] = {"Motor 1", "Motor 2", "\n", + "Motor 3", "Motor 4", "\n", + "Motor 5", "Motor 6", "\0" + }; + +lv_obj_t * btnm; // Motors button matrix +lv_obj_t * meter; // Gauge with selected motor angle +lv_meter_indicator_t * indic; // Indication of selected motor angle + + +// Event Handlers +static void eventHandlerMeter(lv_event_t * e) { + uint32_t pressed_key = Braccio.getKey(); + + if (pressed_key == BUTTON_ENTER) { + motorID = 0; // No motor selected + motorMenu(); // Load motor menu screen + lv_obj_del(meter); // Delete the object + } + else { + lv_meter_set_indicator_end_value(meter, indic, (int32_t)angles[motorID - 1]); + } +} + +static void eventHandlerMenu(lv_event_t * e) { + lv_obj_t * obj = lv_event_get_target(e); + uint32_t id = lv_btnmatrix_get_selected_btn(obj); + + motorID = id + 1; + currentAngle = angles[motorID - 1]; + meterScreen(); + lv_obj_del(btnm); +} + +// Screens functions +void meterScreen(void) +{ + meter = lv_meter_create(lv_scr_act()); + + lv_obj_center(meter); + lv_obj_set_size(meter, 200, 200); + + /*Remove the circle from the middle*/ + lv_obj_remove_style(meter, NULL, LV_PART_INDICATOR); + + static lv_style_t style_meter; + lv_style_init(&style_meter); + lv_style_set_text_color(&style_meter, lv_color_hex(COLOR_TEAL)); + lv_obj_add_style(meter, &style_meter, 0); + + /*Add a scale first*/ + lv_meter_scale_t * scale = lv_meter_add_scale(meter); + lv_meter_set_scale_ticks(meter, scale, 22, 2, 10, lv_color_hex(COLOR_ORANGE)); + lv_meter_set_scale_major_ticks(meter, scale, 3, 2, 20, lv_color_hex(COLOR_ORANGE), 20); + lv_meter_set_scale_range(meter, scale, 0, 315, 315, 90); + + /*Add a arc indicator*/ + indic = lv_meter_add_arc(meter, scale, 10, lv_color_hex(COLOR_LIGHT_TEAL), 0); + + lv_obj_add_event_cb(meter, eventHandlerMeter, LV_EVENT_KEY, NULL); + + lv_meter_set_indicator_end_value(meter, indic, (int32_t)angles[motorID - 1]); + + Braccio.connectJoystickTo(meter); +} + +void motorMenu() { + static lv_style_t style_bg; + lv_style_init(&style_bg); + lv_style_set_bg_color(&style_bg, lv_color_hex(COLOR_WHITE)); + + static lv_style_t style_btn; + lv_style_init(&style_btn); + lv_style_set_bg_color(&style_btn, lv_color_hex(COLOR_YELLOW)); + lv_style_set_border_color(&style_btn, lv_color_hex(COLOR_LIGHT_TEAL)); + lv_style_set_border_width(&style_btn, 2); + lv_style_set_text_color(&style_btn, lv_color_hex(COLOR_TEAL)); + + btnm = lv_btnmatrix_create(lv_scr_act()); + lv_btnmatrix_set_map(btnm, btnm_map); + lv_obj_align(btnm, LV_ALIGN_CENTER, 0, 0); + + lv_obj_add_style(btnm, &style_bg, 0); + lv_obj_add_style(btnm, &style_btn, LV_PART_ITEMS); + + lv_btnmatrix_set_btn_ctrl(btnm, 0, LV_BTNMATRIX_CTRL_CHECKABLE); + lv_btnmatrix_set_btn_ctrl(btnm, 1, LV_BTNMATRIX_CTRL_CHECKABLE); + lv_btnmatrix_set_btn_ctrl(btnm, 2, LV_BTNMATRIX_CTRL_CHECKABLE); + lv_btnmatrix_set_btn_ctrl(btnm, 3, LV_BTNMATRIX_CTRL_CHECKABLE); + lv_btnmatrix_set_btn_ctrl(btnm, 4, LV_BTNMATRIX_CTRL_CHECKABLE); + lv_btnmatrix_set_btn_ctrl(btnm, 5, LV_BTNMATRIX_CTRL_CHECKABLE); + + lv_btnmatrix_set_one_checked(btnm, true); + + lv_obj_add_event_cb(btnm, eventHandlerMenu, LV_EVENT_PRESSED, NULL); + + Braccio.connectJoystickTo(btnm); +} + +void setup() { + Braccio.begin(motorMenu); + + delay(500); // Waits for the Braccio initialization + + // Sets the initial angle for the motors + for (int i = 1; i <= 6; i++) { + Braccio.move(i).to(initialAngle); + delay(1000); // Necessary to set the motor ID correctly + } +} + +void loop() { + int pressedKey = Braccio.getKey(); + + Braccio.positions(angles); + currentAngle = angles[motorID - 1]; + + // Check if the Joystick Left is pressed + if (pressedKey == JOYSTICK_LEFT) { + if (currentAngle < 315 ) { + currentAngle += 10.00; + } else { + currentAngle = 315; + } + } + + // Check if the Joystick Right is pressed + if (pressedKey == JOYSTICK_RIGHT) { + if (currentAngle > 15 ) { + currentAngle -= 10.00; + } else { + currentAngle = 0; + } + } + + Braccio.move(motorID).to(currentAngle); // Moves the motor to the new angle + delay(100); +} diff --git a/examples/tutorials/projects/p01-moving-braccio/01_aligning_braccio/01_aligning_braccio.ino b/examples/tutorials/projects/p01-moving-braccio/01_aligning_braccio/01_aligning_braccio.ino new file mode 100644 index 0000000..bf7f178 --- /dev/null +++ b/examples/tutorials/projects/p01-moving-braccio/01_aligning_braccio/01_aligning_braccio.ino @@ -0,0 +1,60 @@ +#include "Braccio++.h" + +// Variables +// Braccio ++ joints +auto gripper = Braccio.get(1); +auto wristRoll = Braccio.get(2); +auto wristPitch = Braccio.get(3); +auto elbow = Braccio.get(4); +auto shoulder = Braccio.get(5); +auto base = Braccio.get(6); + +float initialGripper = 160.0; +float initialBase = 90.0; +float initialAngle = 150.0; +float angles[6]; + +void setup() { + Braccio.begin(); + delay(500); // Waits for the Braccio initialization + + // You can choose the speed beforehand with + Braccio.speed(SLOW); // could be FAST or MEDIUM or SLOW + + // Send motors initial angle + gripper.move().to(initialGripper); + delay(100); + wristRoll.move().to(initialAngle); + delay(100); + wristPitch.move().to(initialAngle); + delay(100); + elbow.move().to(initialAngle); + delay(100); + shoulder.move().to(initialAngle); + delay(100); + base.move().to(initialBase); + delay(100); + + Serial.begin(115200); + while(!Serial){} +} + +void loop() { + // Fetch the joints positions + Braccio.positions(angles); + + // Print the joint angles + Serial.println("************* Joints Angles *************"); + Serial.println("|\tMotor ID\t|\tAngle\t|"); + Serial.println("----------------------------------------"); + Serial.print("| 1 - Gripper\t\t|\t" + String(angles[0]) + "\t|\n" + + "| 2 - Wrist Rotation\t|\t" + String(angles[1]) + "\t|\n" + + "| 3 - Wrist Vertical\t|\t" + String(angles[2]) + "\t|\n" + + "| 4 - Elbow\t\t|\t" + String(angles[3]) + "\t|\n" + + "| 5 - Shoulder\t\t|\t" + String(angles[4]) + "\t|\n" + + "| 6 - Base\t\t|\t" + String(angles[5]) + "\t|\n"); + Serial.println("*****************************************\n\n\n\n\n"); + Serial.println("\n\n\n\n"); + + delay(1000); +} diff --git a/examples/tutorials/projects/p01-moving-braccio/02_waving_with_Braccio/02_waving_with_Braccio.ino b/examples/tutorials/projects/p01-moving-braccio/02_waving_with_Braccio/02_waving_with_Braccio.ino new file mode 100644 index 0000000..57e081a --- /dev/null +++ b/examples/tutorials/projects/p01-moving-braccio/02_waving_with_Braccio/02_waving_with_Braccio.ino @@ -0,0 +1,55 @@ +#include "Braccio++.h" + +#define BUTTON_ENTER 6 + +// Braccio ++ joints +auto gripper = Braccio.get(1); +auto wristRoll = Braccio.get(2); +auto wristPitch = Braccio.get(3); +auto elbow = Braccio.get(4); +auto shoulder = Braccio.get(5); +auto base = Braccio.get(6); + +/* Variables */ +// initialAngles[6] = {gripper, wristRoll, wristPitch, elbow, shoulder, base} +float homePos[6] = {160.0, 150.0, 220.0, 220.0, 100.0, 180.0}; +float wavePos[6] = {180.0, 250.0, 145.0, 150.0, 150.0, 90.0}; + +bool movement = false; // Flag to initialize joints' movements + +void setup() { + Braccio.begin(); + delay(500); // Waits for the Braccio initialization + + // You can choose the speed beforehand with + Braccio.speed(SLOW); // could be FAST or MEDIUM or SLOW + + // Set motors initial angle + // Should move all the motors at once + Braccio.moveTo(homePos[0], homePos[1], homePos[2], homePos[3], homePos[4], homePos[5]); + delay(500); +} + +// Waving whit Wrist pitch +void loop() { + int pressedKey = Braccio.getKey(); + + if (pressedKey == BUTTON_ENTER) + movement = true; // Trigger joints' movements + + if (movement) { + Braccio.moveTo(wavePos[0], wavePos[1], wavePos[2], wavePos[3], wavePos[4], wavePos[5]); + delay(1000); + + for (int i = 1; i <= 10; i++) { + wristPitch.move().to(100.0f); + delay(300); + wristPitch.move().to(190.0f); + delay(600); + wristPitch.move().to(145.0f); + delay(300); + } + + movement = false; // Stop joints' movements + } +} diff --git a/examples/tutorials/projects/p01-moving-braccio/02_waving_with_Braccio_v01/02_waving_with_Braccio_v01.ino b/examples/tutorials/projects/p01-moving-braccio/02_waving_with_Braccio_v01/02_waving_with_Braccio_v01.ino new file mode 100644 index 0000000..f24c08c --- /dev/null +++ b/examples/tutorials/projects/p01-moving-braccio/02_waving_with_Braccio_v01/02_waving_with_Braccio_v01.ino @@ -0,0 +1,155 @@ +#include "Braccio++.h" + +#define BUTTON_ENTER 6 + +// Braccio ++ joints +auto gripper = Braccio.get(1); +auto wristRoll = Braccio.get(2); +auto wristPitch = Braccio.get(3); +auto elbow = Braccio.get(4); +auto shoulder = Braccio.get(5); +auto base = Braccio.get(6); + +/* Variables */ +// initialAngles[6] = {gripper, wristRoll, wristPitch, elbow, shoulder, base} +float homePos[6] = {160.0, 150.0, 220.0, 220.0, 100.0, 180.0}; +float wavePos[6] = {180.0, 250.0, 145.0, 150.0, 150.0, 90.0}; +//float limAngles[1000]; +//int sizeArray = 0; + +bool movement = false; // Flag to initialize joints' movements + +void setup() { + Braccio.begin(); + delay(500); // Waits for the Braccio initialization + + // You can choose the speed beforehand with + Braccio.speed(SLOW); // could be FAST or MEDIUM or SLOW + + // Set motors initial angle + // Should move all the motors at once + Braccio.moveTo(homePos[0], homePos[1], homePos[2], homePos[3], homePos[4], homePos[5]); + delay(500); +} + +// Waving whit Wrist pitch +void loop() { + int pressedKey = Braccio.getKey(); + + if (pressedKey == BUTTON_ENTER) + movement = true; // Trigger joints' movements + + if (movement) { + Braccio.moveTo(wavePos[0], wavePos[1], wavePos[2], wavePos[3], wavePos[4], wavePos[5]); + delay(1000); + + for (int i = 1; i <= 10; i++) { + wristPitch.move().to(100.0f); + delay(300); + wristPitch.move().to(190.0f); + delay(600); + wristPitch.move().to(145.0f); + delay(300); + } + + movement = false; // Stop joints' movements + } +} + +//void calcAngles(float initial, float final, int gripper = 0){ +// sizeArray = 0; +// +// if(gripper){ +// for(float angle = initial; angle <= final; angle++){ +// limAngles[sizeArray] = angle; +// sizeArray++; +// } +// for(float angle = final - 1; angle >= initial; angle--){ +// limAngles[sizeArray] = angle; +// sizeArray++; +// } +// } else { +// for(float angle = 130.0; angle <= final; angle++){ +// limAngles[sizeArray] = angle; +// sizeArray++; +// } +// +// for(float angle = final-1; angle >= initial; angle--){ +// limAngles[sizeArray] = angle; +// sizeArray++; +// } +// +// for(float angle = initial+1; angle <= 130.0; angle++){ +// limAngles[sizeArray] = angle; +// sizeArray++; +// } +// } +//} + +// Waving whit Wrist pitch +//void loop() { +// int pressedKey = Braccio.getKey(); +// +// if(pressedKey == BUTTON_ENTER) +// movement = true; // Trigger joints' movements +// +// if(movement) { +// Braccio.moveTo(0.0, 30.0, 130.0, 130.0, 130.0, 170.0); +// delay(1000); +// +// for(int i = 0; i <= 10; i++){ +// calcAngles(90.0, 180.0); // Calculates elbow angles +// for(int i = 0; i <= sizeArray - 1; i++){ +// wristPitch.move().to(limAngles[i]); +// delay(10); +// } +// } +// +// movement = false; // Stop joints' moviments +// } +//} + +//void loop() { +// int pressedKey = Braccio.getKey(); +// +// if(pressedKey == BUTTON_ENTER) +// movement = true; // Trigger joints' movements +// +// if(movement) { +// Braccio.moveTo(0.0, 30.0, 130.0, 200.0, 80.0, 170.0); +// delay(TIME); +// +// for(int i = 0; i < 10; i++){ +// wristPitch.move().to(90.0f).in(100ms); +// delay(TIME); +// wristPitch.move().to(180.0f).in(100ms); +// delay(TIME); +// } +// +// movement = false; // Stop joints' moviments +// } +//} + +// Workout +//void loop() { +// int pressedKey = Braccio.getKey(); +// +// if(pressedKey == BUTTON_ENTER) +// movement = true; // Trigger joints' movements +// +// if(movement) { +// Braccio.moveTo(0.0, 130.0, 130.0, 130.0, 80.0, 170.0); +// delay(1000); +// +// for(int i = 0; i <= 10; i++){ +// calcAngles(90.0, 180.0); // Calculates elbow angles +// for(int i = 0; i <= sizeArray - 1; i++){ +// elbow.move().to(limAngles[i]).in(100ms); +// wristPitch.move().to(limAngles[i]).in(100ms); +// delay(TIME); +// } +// } +// +// movement = false; // Stop joints' moviments +// } +//} diff --git a/examples/tutorials/projects/p01-moving-braccio/03_moving_challenge/03_moving_challenge.ino b/examples/tutorials/projects/p01-moving-braccio/03_moving_challenge/03_moving_challenge.ino new file mode 100644 index 0000000..5667946 --- /dev/null +++ b/examples/tutorials/projects/p01-moving-braccio/03_moving_challenge/03_moving_challenge.ino @@ -0,0 +1,53 @@ +#include "Braccio++.h" + +#define BUTTON_ENTER 6 + +// Braccio ++ joints +auto gripper = Braccio.get(1); +auto wristRoll = Braccio.get(2); +auto wristPitch = Braccio.get(3); +auto elbow = Braccio.get(4); +auto shoulder = Braccio.get(5); +auto base = Braccio.get(6); + +/* Variables */ +// initialAngles[6] = {gripper, wristRoll, wristPitch, elbow, shoulder, base} +float homePos[6] = {160.0, 150.0, 220.0, 220.0, 100.0, 180.0}; + +bool movement = false; // Flag to initialize joints' movements + +void setup() { + Braccio.begin(); + delay(500); // Waits for the Braccio initialization + + // You can choose the speed beforehand with + Braccio.speed(SLOW); // could be FAST or MEDIUM or SLOW + + // Set motors initial angle + // Should move all the motors at once + Braccio.moveTo(homePos[0], homePos[1], homePos[2], homePos[3], homePos[4], homePos[5]); + delay(500); +} + +void loop() { + int pressedKey = Braccio.getKey(); + + if (pressedKey == BUTTON_ENTER) + movement = true; // Trigger joints' movements + + if (movement) { + Braccio.moveTo(160.0, 150.0, 220.0, 220.0, 100.0, 270.0); + delay(1000); + + for (int i = 1; i <= 10; i++) { + wristPitch.move().to(190.0f); + delay(200); + wristPitch.move().to(250.0f); + delay(400); + wristPitch.move().to(220.0f); + delay(200); + } + + movement = false; // Stop joints' moviments + } +} diff --git a/examples/tutorials/projects/p01-moving-braccio/moving_workspace/moving_workspace.ino b/examples/tutorials/projects/p01-moving-braccio/moving_workspace/moving_workspace.ino new file mode 100644 index 0000000..aeb0169 --- /dev/null +++ b/examples/tutorials/projects/p01-moving-braccio/moving_workspace/moving_workspace.ino @@ -0,0 +1,215 @@ +#include "Braccio++.h" + +#define BUTTON_ENTER 6 +#define TIME 10 + +// Braccio ++ joints +auto gripper = Braccio.get(1); +auto wristRoll = Braccio.get(2); +auto wristPitch = Braccio.get(3); +auto elbow = Braccio.get(4); +auto shoulder = Braccio.get(5); +auto base = Braccio.get(6); + +// Variables +float initialPos[6] = {0.0, 135.0, 130.0, 130.0, 130.0, 135.0}; +float limAngles[1000]; +int sizeArray = 0; + +bool movement = false; // Flag to initialize joints' movements + +void calcAngles(float initial, float final, int joint, int gripper = 0){ + sizeArray = 0; + + if(gripper){ + for(float angle = initial; angle <= final; angle++){ + limAngles[sizeArray] = angle; + sizeArray++; + } + for(float angle = final - 1; angle >= initial; angle--){ + limAngles[sizeArray] = angle; + sizeArray++; + } + } else { + for(float angle = initialPos[joint - 1]; angle <= final; angle++){ + limAngles[sizeArray] = angle; + sizeArray++; + } + + for(float angle = final-1; angle >= initial; angle--){ + limAngles[sizeArray] = angle; + sizeArray++; + } + + for(float angle = initial+1; angle <= initialPos[joint - 1]; angle++){ + limAngles[sizeArray] = angle; + sizeArray++; + } + } +} + +void setup() { + Braccio.begin(); + delay(500); // Waits for the Braccio initialization + + // You can choose the speed beforehand with + Braccio.speed(SLOW); // could be FAST or MEDIUM or SLOW + + // Set motors initial angle + gripper.move().to(initialPos[0]); + delay(TIME); + wristRoll.move().to(initialPos[1]); + delay(TIME); + wristPitch.move().to(initialPos[2]); + delay(TIME); + elbow.move().to(initialPos[3]); + delay(TIME); + shoulder.move().to(initialPos[4]); + delay(TIME); + base.move().to(initialPos[5]); + delay(TIME); +} + +void loop() { + int pressedKey = Braccio.getKey(); + + if(pressedKey == BUTTON_ENTER) + movement = true; // Trigger joints' movements + + if(movement) { + calcAngles(0.0, 270.0, 6); // Calculates base angles + for(int i = 0; i <= sizeArray - 1; i++){ + base.move().to(limAngles[i]); + delay(TIME); + } + + calcAngles(45.0, 215.0, 5); // Calculates shoulder angles + for(int i = 0; i <= sizeArray - 1; i++){ + shoulder.move().to(limAngles[i]); + delay(TIME); + } + + calcAngles(30.0, 240.0, 4); // Calculates elbow angles + for(int i = 0; i <= sizeArray - 1; i++){ + elbow.move().to(limAngles[i]); + delay(TIME); + } + + calcAngles(30.0, 240.0, 3); // Calculates wrist pitch angles + for(int i = 0; i <= sizeArray - 1; i++){ + wristPitch.move().to(limAngles[i]); + delay(TIME); + } + + calcAngles(0.0, 270.0, 2); // Calculates wrist roll angles + for(int i = 0; i <= sizeArray - 1; i++){ + wristRoll.move().to(limAngles[i]); + delay(TIME); + } + + calcAngles(0.0, 70.0, 1, 1); // Calculates gripper angles + for(int i = 0; i <= sizeArray - 1; i++){ + gripper.move().to(limAngles[i]); + delay(TIME); + } + + movement = false; // Stop joints' moviments + } +} + + +//void loop() { +// int pressedKey = Braccio.getKey(); +// +// if(pressedKey == BUTTON_ENTER) +// movement = true; // Trigger joints' movements +// +// if(movement) { +// for(float angle = initialAngle; angle <= 270.0; angle++){ +// base.move().to(angle).in(100ms); +// delay(TIME); +// } +// +// for(float angle = 270.0; angle >= 0.0; angle--){ +// base.move().to(angle).in(100ms); +// delay(TIME); +// } +// +// for(float angle = 0.0; angle <= initialAngle; angle++){ +// base.move().to(angle).in(100ms); +// delay(TIME); +// } +// +// for(float angle = initialAngle; angle <= 215.0; angle++){ +// shoulder.move().to(angle).in(100ms); +// delay(TIME); +// } +// +// for(float angle = 215.0; angle >= 45.0; angle--){ +// shoulder.move().to(angle).in(100ms); +// delay(TIME); +// } +// +// for(float angle = 45.0; angle <= initialAngle; angle++){ +// shoulder.move().to(angle).in(100ms); +// delay(TIME); +// } +// +// for(float angle = initialAngle; angle <= 250.0; angle++){ +// elbow.move().to(angle).in(100ms); +// delay(TIME); +// } +// +// for(float angle = 250.0; angle >= 30.0; angle--){ +// elbow.move().to(angle).in(100ms); +// delay(TIME); +// } +// +// for(float angle = 30.0; angle <= initialAngle; angle++){ +// elbow.move().to(angle).in(100ms); +// delay(TIME); +// } +// +// for(float angle = initialAngle; angle <= 250.0; angle++){ +// wristPitch.move().to(angle).in(100ms); +// delay(TIME); +// } +// +// for(float angle = 250.0; angle >= 30.0; angle--){ +// wristPitch.move().to(angle).in(100ms); +// delay(TIME); +// } +// +// for(float angle = 30.0; angle <= initialAngle; angle++){ +// wristPitch.move().to(angle).in(100ms); +// delay(TIME); +// } +// +// for(float angle = initialAngle; angle <= 270.0; angle++){ +// wristRoll.move().to(angle).in(100ms); +// delay(TIME); +// } +// +// for(float angle = 270.0; angle >= 0.0; angle--){ +// wristRoll.move().to(angle).in(100ms); +// delay(TIME); +// } +// +// for(float angle = 0.0; angle <= initialAngle; angle++){ +// wristRoll.move().to(angle).in(100ms); +// delay(TIME); +// } +// +// for(float angle = initialGripper; angle <= 70.0; angle++){ +// gripper.move().to(angle).in(100ms); +// delay(TIME); +// } +// +// for(float angle = 70.0; angle >= initialGripper; angle--){ +// gripper.move().to(angle).in(100ms); +// delay(TIME); +// } +// +// movement = false; // Stop joints' moviments +// } +//} diff --git a/examples/tutorials/projects/p02-controlling-braccio-manually/01_controlling_manually_Braccio/01_controlling_manually_Braccio.ino b/examples/tutorials/projects/p02-controlling-braccio-manually/01_controlling_manually_Braccio/01_controlling_manually_Braccio.ino new file mode 100644 index 0000000..a3adb85 --- /dev/null +++ b/examples/tutorials/projects/p02-controlling-braccio-manually/01_controlling_manually_Braccio/01_controlling_manually_Braccio.ino @@ -0,0 +1,191 @@ +#include "Braccio++.h" + +#define BUTTON_ENTER 6 + +// Colors +#define COLOR_TEAL 0x00878F +#define COLOR_LIGHT_TEAL 0x62AEB2 +#define COLOR_YELLOW 0xE5AD24 + +// Variables +String selectedJoints; +float homePos[6] = {160.0, 150.0, 220.0, 220.0, 100.0, 180.0}; +float angles[6]; // All motors current angles + +// Braccio ++ joints +auto gripper = Braccio.get(1); +auto wristRoll = Braccio.get(2); +auto wristPitch = Braccio.get(3); +auto elbow = Braccio.get(4); +auto shoulder = Braccio.get(5); +auto base = Braccio.get(6); + +String jointsPair[] = {"Shoulder", "Elbow", "Wrist"}; + +static const char * btnm_map[] = {"Shoulder", "\n", + "Elbow", "\n", + "Wrist", "\0" + }; + +static const char * directional_map[] = {" ", LV_SYMBOL_UP, " ", "\n", + LV_SYMBOL_LEFT, " ", LV_SYMBOL_RIGHT, "\n", + " ", LV_SYMBOL_DOWN, " ", "\0" + }; + +lv_obj_t * btnm; // Joints button matrix +lv_obj_t * directional; // Direction button matrix + + +// Function +void moveJoints(uint32_t btnID) { + if (selectedJoints == "Shoulder") { + switch (btnID) { + case 1: shoulder.move().to(angles[4] - 10.0); break; + case 3: base.move().to(angles[5] - 10.0); break; + case 5: base.move().to(angles[5] + 10.0); break; + case 7: shoulder.move().to(angles[4] + 10.0); break; + default: break; + } + } + + if (selectedJoints == "Elbow") { + switch (btnID) { + case 1: elbow.move().to(angles[3] - 10.0); break; + case 7: elbow.move().to(angles[3] + 10.0); break; + default: break; + } + } + + if (selectedJoints == "Wrist") { + switch (btnID) { + case 1: wristPitch.move().to(angles[2] - 10.0); break; + case 3: wristRoll.move().to(angles[1] - 10.0); break; + case 5: wristRoll.move().to(angles[1] + 10.0); break; + case 7: wristPitch.move().to(angles[2] + 10.0); break; + default: break; + } + } +} + +// Event Handlers +static void eventHandlerMenu(lv_event_t * e) { + lv_obj_t * obj = lv_event_get_target(e); + uint32_t id = lv_btnmatrix_get_selected_btn(obj); + + selectedJoints = jointsPair[id]; + + directionScreen(); + lv_obj_del(btnm); +} + +static void eventHandlerDirectional(lv_event_t * e) { + lv_event_code_t code = lv_event_get_code(e); + lv_obj_t * obj = lv_event_get_target(e); + + if (code == LV_EVENT_KEY) { + uint32_t pressed_key = Braccio.getKey(); + + if (pressed_key == BUTTON_ENTER) { + mainMenu(); // Load motor menu screen + lv_obj_del(directional); // Delete the object + } + } + if (code == LV_EVENT_PRESSING) { + uint32_t id = lv_btnmatrix_get_selected_btn(obj); + Braccio.positions(angles); + delay(5); + moveJoints(id); + } +} + +// Screens functions +void mainMenu() { + static lv_style_t style_bg; + lv_style_init(&style_bg); + lv_style_set_bg_color(&style_bg, lv_color_white()); + + static lv_style_t style_btn; + lv_style_init(&style_btn); + lv_style_set_bg_color(&style_btn, lv_color_hex(COLOR_YELLOW)); + lv_style_set_border_color(&style_btn, lv_color_hex(COLOR_LIGHT_TEAL)); + lv_style_set_border_width(&style_btn, 2); + lv_style_set_text_color(&style_btn, lv_color_hex(COLOR_TEAL)); + lv_style_set_text_letter_space(&style_btn, 8); + + btnm = lv_btnmatrix_create(lv_scr_act()); + lv_obj_set_size(btnm, 240, 240); + lv_btnmatrix_set_map(btnm, btnm_map); + lv_obj_align(btnm, LV_ALIGN_CENTER, 0, 0); + + lv_obj_add_style(btnm, &style_bg, 0); + lv_obj_add_style(btnm, &style_btn, LV_PART_ITEMS); + + lv_btnmatrix_set_btn_ctrl(btnm, 0, LV_BTNMATRIX_CTRL_CHECKABLE); + lv_btnmatrix_set_btn_ctrl(btnm, 1, LV_BTNMATRIX_CTRL_CHECKABLE); + lv_btnmatrix_set_btn_ctrl(btnm, 2, LV_BTNMATRIX_CTRL_CHECKABLE); + lv_btnmatrix_set_btn_ctrl(btnm, 3, LV_BTNMATRIX_CTRL_CHECKABLE); + + lv_btnmatrix_set_one_checked(btnm, true); + lv_btnmatrix_set_selected_btn(btnm, 0); + + lv_obj_add_event_cb(btnm, eventHandlerMenu, LV_EVENT_PRESSED, NULL); + + Braccio.connectJoystickTo(btnm); +} + +void directionScreen(void) +{ + static lv_style_t style_bg; + lv_style_init(&style_bg); + lv_style_set_bg_color(&style_bg, lv_color_white()); + + static lv_style_t style_btn; + lv_style_init(&style_btn); + lv_style_set_bg_color(&style_btn, lv_color_hex(COLOR_LIGHT_TEAL)); + lv_style_set_text_color(&style_btn, lv_color_white()); + + directional = lv_btnmatrix_create(lv_scr_act()); + lv_obj_set_size(directional, 240, 240); + lv_btnmatrix_set_map(directional, directional_map); + lv_obj_align(directional, LV_ALIGN_CENTER, 0, 0); + + lv_obj_add_style(directional, &style_bg, 0); + lv_obj_add_style(directional, &style_btn, LV_PART_ITEMS); + + lv_btnmatrix_set_btn_ctrl(directional, 0, LV_BTNMATRIX_CTRL_HIDDEN); + lv_btnmatrix_set_btn_ctrl(directional, 1, LV_BTNMATRIX_CTRL_CHECKABLE); + lv_btnmatrix_set_btn_ctrl(directional, 2, LV_BTNMATRIX_CTRL_HIDDEN); + lv_btnmatrix_set_btn_ctrl(directional, 3, LV_BTNMATRIX_CTRL_CHECKABLE); + lv_btnmatrix_set_btn_ctrl(directional, 4, LV_BTNMATRIX_CTRL_HIDDEN); + lv_btnmatrix_set_btn_ctrl(directional, 5, LV_BTNMATRIX_CTRL_CHECKABLE); + lv_btnmatrix_set_btn_ctrl(directional, 6, LV_BTNMATRIX_CTRL_HIDDEN); + lv_btnmatrix_set_btn_ctrl(directional, 7, LV_BTNMATRIX_CTRL_CHECKABLE); + lv_btnmatrix_set_btn_ctrl(directional, 8, LV_BTNMATRIX_CTRL_HIDDEN); + + if (selectedJoints == "Elbow") { + lv_btnmatrix_set_btn_ctrl(directional, 3, LV_BTNMATRIX_CTRL_HIDDEN); + lv_btnmatrix_set_btn_ctrl(directional, 5, LV_BTNMATRIX_CTRL_HIDDEN); + } + + lv_btnmatrix_set_one_checked(directional, true); + lv_btnmatrix_set_selected_btn(directional, 1); + + lv_obj_add_event_cb(directional, eventHandlerDirectional, LV_EVENT_ALL, NULL); + + delay(50); + Braccio.connectJoystickTo(btnm); +} + +void setup() { + Braccio.begin(mainMenu); + delay(500); // Waits for the Braccio initialization + + Braccio.speed(SLOW); + + Braccio.moveTo(homePos[0], homePos[1], homePos[2], homePos[3], homePos[4], homePos[5]); + delay(500); +} + +void loop() { + +} diff --git a/examples/tutorials/projects/p02-controlling-braccio-manually/02_manual_control_challenge/02_manual_control_challenge.ino b/examples/tutorials/projects/p02-controlling-braccio-manually/02_manual_control_challenge/02_manual_control_challenge.ino new file mode 100644 index 0000000..557afb6 --- /dev/null +++ b/examples/tutorials/projects/p02-controlling-braccio-manually/02_manual_control_challenge/02_manual_control_challenge.ino @@ -0,0 +1,203 @@ +#include "Braccio++.h" + +#define BUTTON_ENTER 6 + +// Colors +#define COLOR_TEAL 0x00878F +#define COLOR_LIGHT_TEAL 0x62AEB2 +#define COLOR_YELLOW 0xE5AD24 + +// Variables +String selectedJoints; +float homePos[6] = {160.0, 150.0, 220.0, 220.0, 100.0, 180.0}; +float angles[6]; // All motors current angles + +// Braccio ++ joints +auto gripper = Braccio.get(1); +auto wristRoll = Braccio.get(2); +auto wristPitch = Braccio.get(3); +auto elbow = Braccio.get(4); +auto shoulder = Braccio.get(5); +auto base = Braccio.get(6); + +String jointsPair[] = {"Shoulder", "Elbow", "Wrist", "Gripper"}; + +static const char * btnm_map[] = {"Shoulder", "\n", + "Elbow", "\n", + "Wrist", "\n", + "Gripper", "\0" + }; + +static const char * directional_map[] = {" ", LV_SYMBOL_UP, " ", "\n", + LV_SYMBOL_LEFT, " ", LV_SYMBOL_RIGHT, "\n", + " ", LV_SYMBOL_DOWN, " ", "\0" + }; + +lv_obj_t * btnm; // Joints button matrix +lv_obj_t * directional; // Direction button matrix + + +// Function +void moveJoints(uint32_t btnID) { + if (selectedJoints == "Shoulder") { + switch (btnID) { + case 1: shoulder.move().to(angles[4] - 10.0); break; + case 3: base.move().to(angles[5] - 10.0); break; + case 5: base.move().to(angles[5] + 10.0); break; + case 7: shoulder.move().to(angles[4] + 10.0); break; + default: break; + } + } + + if (selectedJoints == "Elbow") { + switch (btnID) { + case 1: elbow.move().to(angles[3] - 10.0); break; + case 7: elbow.move().to(angles[3] + 10.0); break; + default: break; + } + } + + if (selectedJoints == "Wrist") { + switch (btnID) { + case 1: wristPitch.move().to(angles[2] - 10.0); break; + case 3: wristRoll.move().to(angles[1] - 10.0); break; + case 5: wristRoll.move().to(angles[1] + 10.0); break; + case 7: wristPitch.move().to(angles[2] + 10.0); break; + default: break; + } + } + + if (selectedJoints == "Gripper") { + switch (btnID) { + case 3: gripper.move().to(angles[0] - 5.0); break; + case 5: gripper.move().to(angles[0] + 5.0); break; + default: break; + } + } +} + +// Event Handlers +static void eventHandlerMenu(lv_event_t * e) { + lv_obj_t * obj = lv_event_get_target(e); + uint32_t id = lv_btnmatrix_get_selected_btn(obj); + + selectedJoints = jointsPair[id]; + + directionScreen(); + lv_obj_del(btnm); +} + +static void eventHandlerDirectional(lv_event_t * e) { + lv_event_code_t code = lv_event_get_code(e); + lv_obj_t * obj = lv_event_get_target(e); + + if (code == LV_EVENT_KEY) { + uint32_t pressed_key = Braccio.getKey(); + + if (pressed_key == BUTTON_ENTER) { + mainMenu(); // Load motor menu screen + lv_obj_del(directional); // Delete the object + } + } + if (code == LV_EVENT_PRESSING) { + uint32_t id = lv_btnmatrix_get_selected_btn(obj); + Braccio.positions(angles); + delay(5); + moveJoints(id); + } +} + +// Screens functions +void mainMenu() { + static lv_style_t style_bg; + lv_style_init(&style_bg); + lv_style_set_bg_color(&style_bg, lv_color_white()); + + static lv_style_t style_btn; + lv_style_init(&style_btn); + lv_style_set_bg_color(&style_btn, lv_color_hex(COLOR_YELLOW)); + lv_style_set_border_color(&style_btn, lv_color_hex(COLOR_LIGHT_TEAL)); + lv_style_set_border_width(&style_btn, 2); + lv_style_set_text_color(&style_btn, lv_color_hex(COLOR_TEAL)); + lv_style_set_text_letter_space(&style_btn, 8); + + btnm = lv_btnmatrix_create(lv_scr_act()); + lv_obj_set_size(btnm, 240, 240); + lv_btnmatrix_set_map(btnm, btnm_map); + lv_obj_align(btnm, LV_ALIGN_CENTER, 0, 0); + + lv_obj_add_style(btnm, &style_bg, 0); + lv_obj_add_style(btnm, &style_btn, LV_PART_ITEMS); + + lv_btnmatrix_set_btn_ctrl(btnm, 0, LV_BTNMATRIX_CTRL_CHECKABLE); + lv_btnmatrix_set_btn_ctrl(btnm, 1, LV_BTNMATRIX_CTRL_CHECKABLE); + lv_btnmatrix_set_btn_ctrl(btnm, 2, LV_BTNMATRIX_CTRL_CHECKABLE); + lv_btnmatrix_set_btn_ctrl(btnm, 3, LV_BTNMATRIX_CTRL_CHECKABLE); + + lv_btnmatrix_set_one_checked(btnm, true); + lv_btnmatrix_set_selected_btn(btnm, 0); + + lv_obj_add_event_cb(btnm, eventHandlerMenu, LV_EVENT_PRESSED, NULL); + + Braccio.connectJoystickTo(btnm); +} + +void directionScreen(void) +{ + static lv_style_t style_bg; + lv_style_init(&style_bg); + lv_style_set_bg_color(&style_bg, lv_color_white()); + + static lv_style_t style_btn; + lv_style_init(&style_btn); + lv_style_set_bg_color(&style_btn, lv_color_hex(COLOR_LIGHT_TEAL)); + lv_style_set_text_color(&style_btn, lv_color_white()); + + directional = lv_btnmatrix_create(lv_scr_act()); + lv_obj_set_size(directional, 240, 240); + lv_btnmatrix_set_map(directional, directional_map); + lv_obj_align(directional, LV_ALIGN_CENTER, 0, 0); + + lv_obj_add_style(directional, &style_bg, 0); + lv_obj_add_style(directional, &style_btn, LV_PART_ITEMS); + + lv_btnmatrix_set_btn_ctrl(directional, 0, LV_BTNMATRIX_CTRL_HIDDEN); + lv_btnmatrix_set_btn_ctrl(directional, 1, LV_BTNMATRIX_CTRL_CHECKABLE); + lv_btnmatrix_set_btn_ctrl(directional, 2, LV_BTNMATRIX_CTRL_HIDDEN); + lv_btnmatrix_set_btn_ctrl(directional, 3, LV_BTNMATRIX_CTRL_CHECKABLE); + lv_btnmatrix_set_btn_ctrl(directional, 4, LV_BTNMATRIX_CTRL_HIDDEN); + lv_btnmatrix_set_btn_ctrl(directional, 5, LV_BTNMATRIX_CTRL_CHECKABLE); + lv_btnmatrix_set_btn_ctrl(directional, 6, LV_BTNMATRIX_CTRL_HIDDEN); + lv_btnmatrix_set_btn_ctrl(directional, 7, LV_BTNMATRIX_CTRL_CHECKABLE); + lv_btnmatrix_set_btn_ctrl(directional, 8, LV_BTNMATRIX_CTRL_HIDDEN); + + if (selectedJoints == "Elbow") { + lv_btnmatrix_set_btn_ctrl(directional, 3, LV_BTNMATRIX_CTRL_HIDDEN); + lv_btnmatrix_set_btn_ctrl(directional, 5, LV_BTNMATRIX_CTRL_HIDDEN); + } + + if (selectedJoints == "Gripper") { + lv_btnmatrix_set_btn_ctrl(directional, 1, LV_BTNMATRIX_CTRL_HIDDEN); + lv_btnmatrix_set_btn_ctrl(directional, 7, LV_BTNMATRIX_CTRL_HIDDEN); + } + + lv_btnmatrix_set_one_checked(directional, true); + lv_btnmatrix_set_selected_btn(directional, 1); + + lv_obj_add_event_cb(directional, eventHandlerDirectional, LV_EVENT_ALL, NULL); + + delay(150); + Braccio.connectJoystickTo(btnm); +} + +void setup() { + Braccio.begin(mainMenu); + delay(500); // Waits for the Braccio initialization + + Braccio.moveTo(homePos[0], homePos[1], homePos[2], homePos[3], homePos[4], homePos[5]); + delay(500); +} + +void loop() { + +} diff --git a/examples/tutorials/projects/p02-controlling-braccio-manually/project02_test/project02_test.ino b/examples/tutorials/projects/p02-controlling-braccio-manually/project02_test/project02_test.ino new file mode 100644 index 0000000..c3a2049 --- /dev/null +++ b/examples/tutorials/projects/p02-controlling-braccio-manually/project02_test/project02_test.ino @@ -0,0 +1,174 @@ +#include "Braccio++.h" + +#define BUTTON_ENTER 6 + +// Colors +#define COLOR_TEAL 0x00878F +#define COLOR_LIGHT_TEAL 0x62AEB2 +#define COLOR_ORANGE 0xE47128 +#define COLOR_YELLOW 0xE5AD24 +#define COLOR_WHITE 0xFFFFFF +#define COLOR_BLACK 0x000000 + +// Variables +String selectedJoints; +float homePos[6] = {0.0, 135.0, 200.0, 200.0, 80.0, 80.0}; +float angles[6]; // All motors current angles + +// Braccio ++ joints +auto gripper = Braccio.get(1); +auto wristRoll = Braccio.get(2); +auto wristPitch = Braccio.get(3); +auto elbow = Braccio.get(4); +auto shoulder = Braccio.get(5); +auto base = Braccio.get(6); + +String jointsPair[] = {"Shoulder", "Elbow", "Wrist", "Gripper"}; + +static const char * btnm_map[] = {"Shoulder", "\n", + "Elbow", "\n", + "Wrist", "\n", + "Gripper", "\0" + }; + +static const char * directional_map[] = {" ", LV_SYMBOL_UP, " ", "\n", + LV_SYMBOL_LEFT, " ", LV_SYMBOL_RIGHT, "\n", + " ", LV_SYMBOL_DOWN, " ", "\0" + }; + +lv_obj_t * btnm; // Joints button matrix +lv_obj_t * directional; // Direction button matrix + + +// Event Handlers +static void eventHandlerMenu(lv_event_t * e) { + lv_obj_t * obj = lv_event_get_target(e); + uint32_t id = lv_btnmatrix_get_selected_btn(obj); + + selectedJoints = jointsPair[id]; + + directionScreen(); + lv_obj_del(btnm); +} + +static void eventHandlerDirectional(lv_event_t * e) { + lv_event_code_t code = lv_event_get_code(e); + lv_obj_t * obj = lv_event_get_target(e); + + if (code == LV_EVENT_DRAW_PART_BEGIN) { + lv_obj_draw_part_dsc_t * dsc = (lv_obj_draw_part_dsc_t *)lv_event_get_param(e); + + /*Change the draw descriptor the 1nd button*/ + if ((dsc->id) % 2 == 1) { + dsc->rect_dsc->bg_color = lv_color_hex(COLOR_LIGHT_TEAL); + dsc->label_dsc->color = lv_color_white(); + } else { + dsc->rect_dsc->bg_color = lv_color_white(); + dsc->rect_dsc->shadow_width = 0; + } + } + if (code == LV_EVENT_KEY) { + uint32_t pressed_key = Braccio.getKey(); + + if (pressed_key == BUTTON_ENTER) { + motorMenu(); // Load motor menu screen + lv_obj_del(directional); // Delete the object + } + } + if (code == LV_EVENT_PRESSING) { + uint32_t id = lv_btnmatrix_get_selected_btn(obj); + Braccio.positions(angles); + delay(50); + + if(selectedJoints == "Shoulder"){ + switch(id){ + case 1: + shoulder.move().to(angles[4]-5.0); + break; + case 3: + base.move().to(angles[5]-10.0); + break; + case 5: + base.move().to(angles[5]+10.0); + break; + case 7: + shoulder.move().to(angles[4]+5.0); + break; + default: + break; + } + } + } +} + +// Screens functions +void directionScreen(void) +{ + directional = lv_btnmatrix_create(lv_scr_act()); + lv_btnmatrix_set_map(directional, directional_map); + lv_obj_align(directional, LV_ALIGN_CENTER, 0, 0); + + lv_btnmatrix_set_btn_ctrl(directional, 0, LV_BTNMATRIX_CTRL_DISABLED); + lv_btnmatrix_set_btn_ctrl(directional, 1, LV_BTNMATRIX_CTRL_CHECKABLE); + lv_btnmatrix_set_btn_ctrl(directional, 2, LV_BTNMATRIX_CTRL_DISABLED); + lv_btnmatrix_set_btn_ctrl(directional, 3, LV_BTNMATRIX_CTRL_CHECKABLE); + lv_btnmatrix_set_btn_ctrl(directional, 4, LV_BTNMATRIX_CTRL_DISABLED); + lv_btnmatrix_set_btn_ctrl(directional, 5, LV_BTNMATRIX_CTRL_CHECKABLE); + lv_btnmatrix_set_btn_ctrl(directional, 6, LV_BTNMATRIX_CTRL_DISABLED); + lv_btnmatrix_set_btn_ctrl(directional, 7, LV_BTNMATRIX_CTRL_CHECKABLE); + lv_btnmatrix_set_btn_ctrl(directional, 8, LV_BTNMATRIX_CTRL_DISABLED); + + lv_btnmatrix_set_one_checked(directional, true); + + lv_obj_add_event_cb(directional, eventHandlerDirectional, LV_EVENT_ALL, NULL); + + Braccio.connectJoystickTo(btnm); +} + +void motorMenu() { + static lv_style_t style_bg; + lv_style_init(&style_bg); + lv_style_set_bg_color(&style_bg, lv_color_hex(COLOR_WHITE)); + + static lv_style_t style_btn; + lv_style_init(&style_btn); + lv_style_set_bg_color(&style_btn, lv_color_hex(COLOR_YELLOW)); + lv_style_set_border_color(&style_btn, lv_color_hex(COLOR_LIGHT_TEAL)); + lv_style_set_border_width(&style_btn, 2); + lv_style_set_text_color(&style_btn, lv_color_hex(COLOR_TEAL)); + lv_style_set_text_letter_space(&style_btn, 8); +// lv_style_set_text_font(&style_btn, &lv_font_montserrat_14); + + btnm = lv_btnmatrix_create(lv_scr_act()); + lv_obj_set_size(btnm, 240, 240); + lv_btnmatrix_set_map(btnm, btnm_map); + lv_obj_align(btnm, LV_ALIGN_CENTER, 0, 0); + + lv_obj_add_style(btnm, &style_bg, 0); + lv_obj_add_style(btnm, &style_btn, LV_PART_ITEMS); + + lv_btnmatrix_set_btn_ctrl(btnm, 0, LV_BTNMATRIX_CTRL_CHECKABLE); + lv_btnmatrix_set_btn_ctrl(btnm, 1, LV_BTNMATRIX_CTRL_CHECKABLE); + lv_btnmatrix_set_btn_ctrl(btnm, 2, LV_BTNMATRIX_CTRL_CHECKABLE); + lv_btnmatrix_set_btn_ctrl(btnm, 3, LV_BTNMATRIX_CTRL_CHECKABLE); + lv_btnmatrix_set_btn_ctrl(btnm, 4, LV_BTNMATRIX_CTRL_CHECKABLE); + lv_btnmatrix_set_btn_ctrl(btnm, 5, LV_BTNMATRIX_CTRL_CHECKABLE); + + lv_btnmatrix_set_one_checked(btnm, true); + + lv_obj_add_event_cb(btnm, eventHandlerMenu, LV_EVENT_PRESSED, NULL); + + Braccio.connectJoystickTo(btnm); +} + +void setup() { + Braccio.begin(motorMenu); + delay(500); // Waits for the Braccio initialization + + Braccio.moveTo(homePos[0], homePos[1], homePos[2], homePos[3], homePos[4], homePos[5]); +} + +void loop() { + // Fetch the joints positions + Braccio.positions(angles); +} diff --git a/examples/tutorials/projects/p03-learning-mode/01_Braccio_learning_mode/01_Braccio_learning_mode.ino b/examples/tutorials/projects/p03-learning-mode/01_Braccio_learning_mode/01_Braccio_learning_mode.ino new file mode 100644 index 0000000..c2b8ab3 --- /dev/null +++ b/examples/tutorials/projects/p03-learning-mode/01_Braccio_learning_mode/01_Braccio_learning_mode.ino @@ -0,0 +1,134 @@ +#include "Braccio++.h" + +// Colors +#define COLOR_TEAL 0x00878F +#define COLOR_LIGHT_TEAL 0x62AEB2 + +enum states { + LEARN, + REPEAT, + IDLE +}; + +int state = IDLE; + +float values[10000]; +float* idx = values; +float* final_idx = 0; +float homePos[6] = {160.0, 150.0, 220.0, 220.0, 100.0, 180.0}; + +static lv_obj_t * counter; +static lv_obj_t * btnm; + +static const char * btnm_map[] = { "Learn", "\n", "Replay", "\n", "Idle", "\n", "\0" }; + + +static void eventHandlerMenu(lv_event_t * e) { + lv_event_code_t code = lv_event_get_code(e); + lv_obj_t * obj = lv_event_get_target(e); + + if (code == LV_EVENT_KEY && lv_indev_get_key(lv_indev_get_act()) == LV_KEY_HOME) { + state = IDLE; + return; + } + + if (code == LV_EVENT_CLICKED) { + uint32_t id = lv_btnmatrix_get_selected_btn(obj); + const char * txt = lv_btnmatrix_get_btn_text(obj, id); + + if (state == LEARN) { + final_idx = idx; + } + + idx = values; + + FILE* f; + switch (id) { + case 0: + state = LEARN; + Braccio.disengage(); + lv_btnmatrix_set_btn_ctrl(btnm, 0, LV_BTNMATRIX_CTRL_CHECKED); + Serial.println("LEARN"); + break; + case 1: + state = REPEAT; + Braccio.engage(); + lv_btnmatrix_set_btn_ctrl(btnm, 1, LV_BTNMATRIX_CTRL_CHECKED); + Serial.println("REPEAT"); + break; + default: + state = IDLE; + delay(500); + Braccio.moveTo(homePos[0], homePos[1], homePos[2], homePos[3], homePos[4], homePos[5]); + + lv_btnmatrix_set_btn_ctrl(btnm, 2, LV_BTNMATRIX_CTRL_CHECKED); + Serial.println("IDLE"); + break; + } + } +} + +void mainMenu() { + static lv_style_t style_btn; + lv_style_init(&style_btn); + lv_style_set_bg_color(&style_btn, lv_color_hex(COLOR_LIGHT_TEAL)); + lv_style_set_text_color(&style_btn, lv_color_white()); + + btnm = lv_btnmatrix_create(lv_scr_act()); + lv_obj_set_size(btnm, 240, 240); + lv_btnmatrix_set_map(btnm, btnm_map); + lv_obj_align(btnm, LV_ALIGN_CENTER, 0, 0); + + lv_obj_add_style(btnm, &style_btn, LV_PART_ITEMS); + + lv_btnmatrix_set_btn_ctrl(btnm, 0, LV_BTNMATRIX_CTRL_CHECKABLE); + lv_btnmatrix_set_btn_ctrl(btnm, 1, LV_BTNMATRIX_CTRL_CHECKABLE); + lv_btnmatrix_set_btn_ctrl(btnm, 2, LV_BTNMATRIX_CTRL_CHECKABLE); + + lv_btnmatrix_set_one_checked(btnm, true); + lv_btnmatrix_set_selected_btn(btnm, 2); + lv_btnmatrix_set_btn_ctrl(btnm, 2, LV_BTNMATRIX_CTRL_CHECKED); + + counter = lv_label_create(btnm); + lv_label_set_text_fmt(counter, "Counter: %d" , 0); + lv_obj_align(counter, LV_ALIGN_CENTER, 0, 80); + + lv_obj_add_event_cb(btnm, eventHandlerMenu, LV_EVENT_ALL, NULL); + + Braccio.connectJoystickTo(btnm); +} + +void setup() { + Braccio.begin(mainMenu); + delay(500); + + Braccio.moveTo(homePos[0], homePos[1], homePos[2], homePos[3], homePos[4], homePos[5]); + delay(500); + + Serial.begin(115200); + Serial.println("Replicate a movement"); +} + +void loop() { + if (state == LEARN) { + Braccio.positions(idx); + idx += 6; + } + if (state == REPEAT) { + Braccio.moveTo(idx[0], idx[1], idx[2], idx[3], idx[4], idx[5]); + idx += 6; + if (idx >= final_idx) { + Serial.println("Repeat done"); + state = IDLE; + lv_btnmatrix_set_btn_ctrl(btnm, 2, LV_BTNMATRIX_CTRL_CHECKED); + } + } + if (idx - values >= sizeof(values)) { + Serial.println("IDLE"); + state = IDLE; + } + delay(100); + if (state != IDLE) { + lv_label_set_text_fmt(counter, "Counter: %d" , idx - values); + } +} diff --git a/examples/tutorials/projects/p03-learning-mode/02_learning_challenge/02_learning_challenge.ino b/examples/tutorials/projects/p03-learning-mode/02_learning_challenge/02_learning_challenge.ino new file mode 100644 index 0000000..d1eef79 --- /dev/null +++ b/examples/tutorials/projects/p03-learning-mode/02_learning_challenge/02_learning_challenge.ino @@ -0,0 +1,162 @@ +#include "Braccio++.h" + +// Colors +#define COLOR_TEAL 0x00878F +#define COLOR_LIGHT_TEAL 0x62AEB2 + +auto wristPitch = Braccio.get(3); + +enum states { + LEARN, + REPEAT, + IDLE, + DEMO +}; + +int state = IDLE; + +float values[1000]; +float* idx = values; +float* final_idx = 0; +float homePos[6] = {160.0, 150.0, 220.0, 220.0, 100.0, 180.0}; +float wavePos[6] = {180.0, 250.0, 145.0, 150.0, 150.0, 90.0}; + +static lv_obj_t * counter; +static lv_obj_t * btnm; + +static const char * btnm_map[] = { "Learn", "\n", "Replay", "\n", "Idle", "\n", "Demo", "\n", "\0" }; + + +void ciaoMovement() { + for (int i = 1; i <= 10; i++) { + wristPitch.move().to(100.0f); + delay(300); + wristPitch.move().to(190.0f); + delay(600); + wristPitch.move().to(145.0f); + delay(300); + } + + Braccio.moveTo(homePos[0], homePos[1], homePos[2], homePos[3], homePos[4], homePos[5]); + lv_btnmatrix_set_btn_ctrl(btnm, 2, LV_BTNMATRIX_CTRL_CHECKED); +} + + +static void eventHandlerMenu(lv_event_t * e) { + lv_event_code_t code = lv_event_get_code(e); + lv_obj_t * obj = lv_event_get_target(e); + + if (code == LV_EVENT_KEY && lv_indev_get_key(lv_indev_get_act()) == LV_KEY_HOME) { + state = IDLE; + return; + } + + if (code == LV_EVENT_CLICKED) { + uint32_t id = lv_btnmatrix_get_selected_btn(obj); + const char * txt = lv_btnmatrix_get_btn_text(obj, id); + + if (state == LEARN) { + final_idx = idx; + } + + idx = values; + + FILE* f; + switch (id) { + case 0: + state = LEARN; + Braccio.disengage(); + lv_btnmatrix_set_btn_ctrl(btnm, 0, LV_BTNMATRIX_CTRL_CHECKED); + Serial.println("LEARN"); + break; + case 1: + state = REPEAT; + Braccio.engage(); + lv_btnmatrix_set_btn_ctrl(btnm, 1, LV_BTNMATRIX_CTRL_CHECKED); + Serial.println("REPEAT"); + break; + case 3: + state = DEMO; + Braccio.moveTo(wavePos[0], wavePos[1], wavePos[2], wavePos[3], wavePos[4], wavePos[5]); + lv_btnmatrix_set_btn_ctrl(btnm, 3, LV_BTNMATRIX_CTRL_CHECKED); + Serial.println("DEMO"); + break; + default: + state = IDLE; + Braccio.moveTo(homePos[0], homePos[1], homePos[2], homePos[3], homePos[4], homePos[5]); + lv_btnmatrix_set_btn_ctrl(btnm, 2, LV_BTNMATRIX_CTRL_CHECKED); + Serial.println("IDLE"); + break; + } + } +} + +void mainMenu() { + static lv_style_t style_btn; + lv_style_init(&style_btn); + lv_style_set_bg_color(&style_btn, lv_color_hex(COLOR_LIGHT_TEAL)); + lv_style_set_text_color(&style_btn, lv_color_white()); + + btnm = lv_btnmatrix_create(lv_scr_act()); + lv_obj_set_size(btnm, 240, 240); + lv_btnmatrix_set_map(btnm, btnm_map); + lv_obj_align(btnm, LV_ALIGN_CENTER, 0, 0); + + lv_obj_add_style(btnm, &style_btn, LV_PART_ITEMS); + + lv_btnmatrix_set_btn_ctrl(btnm, 0, LV_BTNMATRIX_CTRL_CHECKABLE); + lv_btnmatrix_set_btn_ctrl(btnm, 1, LV_BTNMATRIX_CTRL_CHECKABLE); + lv_btnmatrix_set_btn_ctrl(btnm, 2, LV_BTNMATRIX_CTRL_CHECKABLE); + + lv_btnmatrix_set_one_checked(btnm, true); + lv_btnmatrix_set_selected_btn(btnm, 2); + lv_btnmatrix_set_btn_ctrl(btnm, 2, LV_BTNMATRIX_CTRL_CHECKED); + + counter = lv_label_create(btnm); + lv_label_set_text_fmt(counter, "Counter: %d" , 0); + lv_obj_align(counter, LV_ALIGN_CENTER, 0, 80); + + lv_obj_add_event_cb(btnm, eventHandlerMenu, LV_EVENT_ALL, NULL); + + Braccio.connectJoystickTo(btnm); +} + +void setup() { + Braccio.begin(mainMenu); + delay(500); + + Serial.begin(115200); + Serial.println("Replicate a movement"); + + Braccio.moveTo(homePos[0], homePos[1], homePos[2], homePos[3], homePos[4], homePos[5]); +} + +void loop() { + if (state == LEARN) { + Braccio.positions(idx); + idx += 6; + } + if (state == REPEAT) { + Braccio.moveTo(idx[0], idx[1], idx[2], idx[3], idx[4], idx[5]); + idx += 6; + if (idx >= final_idx) { + Serial.println("Repeat done"); + state = IDLE; + lv_btnmatrix_set_btn_ctrl(btnm, 2, LV_BTNMATRIX_CTRL_CHECKED); + } + } + + if (state == DEMO) { + ciaoMovement(); + state = IDLE; + } + + if (idx - values >= sizeof(values)) { + Serial.println("IDLE"); + state = IDLE; + } + delay(100); + if (state != IDLE) { + lv_label_set_text_fmt(counter, "Counter: %d" , idx - values); + } +} From 9d8805788011a4212b0b59bb65ac0e956504d3d5 Mon Sep 17 00:00:00 2001 From: Esquirio Date: Mon, 31 Jan 2022 11:54:17 +0100 Subject: [PATCH 2/2] fix: cleaning projects codes --- .../02_waving_with_Braccio_v01.ino | 155 ------------- .../moving_workspace/moving_workspace.ino | 215 ------------------ .../project02_test/project02_test.ino | 174 -------------- 3 files changed, 544 deletions(-) delete mode 100644 examples/tutorials/projects/p01-moving-braccio/02_waving_with_Braccio_v01/02_waving_with_Braccio_v01.ino delete mode 100644 examples/tutorials/projects/p01-moving-braccio/moving_workspace/moving_workspace.ino delete mode 100644 examples/tutorials/projects/p02-controlling-braccio-manually/project02_test/project02_test.ino diff --git a/examples/tutorials/projects/p01-moving-braccio/02_waving_with_Braccio_v01/02_waving_with_Braccio_v01.ino b/examples/tutorials/projects/p01-moving-braccio/02_waving_with_Braccio_v01/02_waving_with_Braccio_v01.ino deleted file mode 100644 index f24c08c..0000000 --- a/examples/tutorials/projects/p01-moving-braccio/02_waving_with_Braccio_v01/02_waving_with_Braccio_v01.ino +++ /dev/null @@ -1,155 +0,0 @@ -#include "Braccio++.h" - -#define BUTTON_ENTER 6 - -// Braccio ++ joints -auto gripper = Braccio.get(1); -auto wristRoll = Braccio.get(2); -auto wristPitch = Braccio.get(3); -auto elbow = Braccio.get(4); -auto shoulder = Braccio.get(5); -auto base = Braccio.get(6); - -/* Variables */ -// initialAngles[6] = {gripper, wristRoll, wristPitch, elbow, shoulder, base} -float homePos[6] = {160.0, 150.0, 220.0, 220.0, 100.0, 180.0}; -float wavePos[6] = {180.0, 250.0, 145.0, 150.0, 150.0, 90.0}; -//float limAngles[1000]; -//int sizeArray = 0; - -bool movement = false; // Flag to initialize joints' movements - -void setup() { - Braccio.begin(); - delay(500); // Waits for the Braccio initialization - - // You can choose the speed beforehand with - Braccio.speed(SLOW); // could be FAST or MEDIUM or SLOW - - // Set motors initial angle - // Should move all the motors at once - Braccio.moveTo(homePos[0], homePos[1], homePos[2], homePos[3], homePos[4], homePos[5]); - delay(500); -} - -// Waving whit Wrist pitch -void loop() { - int pressedKey = Braccio.getKey(); - - if (pressedKey == BUTTON_ENTER) - movement = true; // Trigger joints' movements - - if (movement) { - Braccio.moveTo(wavePos[0], wavePos[1], wavePos[2], wavePos[3], wavePos[4], wavePos[5]); - delay(1000); - - for (int i = 1; i <= 10; i++) { - wristPitch.move().to(100.0f); - delay(300); - wristPitch.move().to(190.0f); - delay(600); - wristPitch.move().to(145.0f); - delay(300); - } - - movement = false; // Stop joints' movements - } -} - -//void calcAngles(float initial, float final, int gripper = 0){ -// sizeArray = 0; -// -// if(gripper){ -// for(float angle = initial; angle <= final; angle++){ -// limAngles[sizeArray] = angle; -// sizeArray++; -// } -// for(float angle = final - 1; angle >= initial; angle--){ -// limAngles[sizeArray] = angle; -// sizeArray++; -// } -// } else { -// for(float angle = 130.0; angle <= final; angle++){ -// limAngles[sizeArray] = angle; -// sizeArray++; -// } -// -// for(float angle = final-1; angle >= initial; angle--){ -// limAngles[sizeArray] = angle; -// sizeArray++; -// } -// -// for(float angle = initial+1; angle <= 130.0; angle++){ -// limAngles[sizeArray] = angle; -// sizeArray++; -// } -// } -//} - -// Waving whit Wrist pitch -//void loop() { -// int pressedKey = Braccio.getKey(); -// -// if(pressedKey == BUTTON_ENTER) -// movement = true; // Trigger joints' movements -// -// if(movement) { -// Braccio.moveTo(0.0, 30.0, 130.0, 130.0, 130.0, 170.0); -// delay(1000); -// -// for(int i = 0; i <= 10; i++){ -// calcAngles(90.0, 180.0); // Calculates elbow angles -// for(int i = 0; i <= sizeArray - 1; i++){ -// wristPitch.move().to(limAngles[i]); -// delay(10); -// } -// } -// -// movement = false; // Stop joints' moviments -// } -//} - -//void loop() { -// int pressedKey = Braccio.getKey(); -// -// if(pressedKey == BUTTON_ENTER) -// movement = true; // Trigger joints' movements -// -// if(movement) { -// Braccio.moveTo(0.0, 30.0, 130.0, 200.0, 80.0, 170.0); -// delay(TIME); -// -// for(int i = 0; i < 10; i++){ -// wristPitch.move().to(90.0f).in(100ms); -// delay(TIME); -// wristPitch.move().to(180.0f).in(100ms); -// delay(TIME); -// } -// -// movement = false; // Stop joints' moviments -// } -//} - -// Workout -//void loop() { -// int pressedKey = Braccio.getKey(); -// -// if(pressedKey == BUTTON_ENTER) -// movement = true; // Trigger joints' movements -// -// if(movement) { -// Braccio.moveTo(0.0, 130.0, 130.0, 130.0, 80.0, 170.0); -// delay(1000); -// -// for(int i = 0; i <= 10; i++){ -// calcAngles(90.0, 180.0); // Calculates elbow angles -// for(int i = 0; i <= sizeArray - 1; i++){ -// elbow.move().to(limAngles[i]).in(100ms); -// wristPitch.move().to(limAngles[i]).in(100ms); -// delay(TIME); -// } -// } -// -// movement = false; // Stop joints' moviments -// } -//} diff --git a/examples/tutorials/projects/p01-moving-braccio/moving_workspace/moving_workspace.ino b/examples/tutorials/projects/p01-moving-braccio/moving_workspace/moving_workspace.ino deleted file mode 100644 index aeb0169..0000000 --- a/examples/tutorials/projects/p01-moving-braccio/moving_workspace/moving_workspace.ino +++ /dev/null @@ -1,215 +0,0 @@ -#include "Braccio++.h" - -#define BUTTON_ENTER 6 -#define TIME 10 - -// Braccio ++ joints -auto gripper = Braccio.get(1); -auto wristRoll = Braccio.get(2); -auto wristPitch = Braccio.get(3); -auto elbow = Braccio.get(4); -auto shoulder = Braccio.get(5); -auto base = Braccio.get(6); - -// Variables -float initialPos[6] = {0.0, 135.0, 130.0, 130.0, 130.0, 135.0}; -float limAngles[1000]; -int sizeArray = 0; - -bool movement = false; // Flag to initialize joints' movements - -void calcAngles(float initial, float final, int joint, int gripper = 0){ - sizeArray = 0; - - if(gripper){ - for(float angle = initial; angle <= final; angle++){ - limAngles[sizeArray] = angle; - sizeArray++; - } - for(float angle = final - 1; angle >= initial; angle--){ - limAngles[sizeArray] = angle; - sizeArray++; - } - } else { - for(float angle = initialPos[joint - 1]; angle <= final; angle++){ - limAngles[sizeArray] = angle; - sizeArray++; - } - - for(float angle = final-1; angle >= initial; angle--){ - limAngles[sizeArray] = angle; - sizeArray++; - } - - for(float angle = initial+1; angle <= initialPos[joint - 1]; angle++){ - limAngles[sizeArray] = angle; - sizeArray++; - } - } -} - -void setup() { - Braccio.begin(); - delay(500); // Waits for the Braccio initialization - - // You can choose the speed beforehand with - Braccio.speed(SLOW); // could be FAST or MEDIUM or SLOW - - // Set motors initial angle - gripper.move().to(initialPos[0]); - delay(TIME); - wristRoll.move().to(initialPos[1]); - delay(TIME); - wristPitch.move().to(initialPos[2]); - delay(TIME); - elbow.move().to(initialPos[3]); - delay(TIME); - shoulder.move().to(initialPos[4]); - delay(TIME); - base.move().to(initialPos[5]); - delay(TIME); -} - -void loop() { - int pressedKey = Braccio.getKey(); - - if(pressedKey == BUTTON_ENTER) - movement = true; // Trigger joints' movements - - if(movement) { - calcAngles(0.0, 270.0, 6); // Calculates base angles - for(int i = 0; i <= sizeArray - 1; i++){ - base.move().to(limAngles[i]); - delay(TIME); - } - - calcAngles(45.0, 215.0, 5); // Calculates shoulder angles - for(int i = 0; i <= sizeArray - 1; i++){ - shoulder.move().to(limAngles[i]); - delay(TIME); - } - - calcAngles(30.0, 240.0, 4); // Calculates elbow angles - for(int i = 0; i <= sizeArray - 1; i++){ - elbow.move().to(limAngles[i]); - delay(TIME); - } - - calcAngles(30.0, 240.0, 3); // Calculates wrist pitch angles - for(int i = 0; i <= sizeArray - 1; i++){ - wristPitch.move().to(limAngles[i]); - delay(TIME); - } - - calcAngles(0.0, 270.0, 2); // Calculates wrist roll angles - for(int i = 0; i <= sizeArray - 1; i++){ - wristRoll.move().to(limAngles[i]); - delay(TIME); - } - - calcAngles(0.0, 70.0, 1, 1); // Calculates gripper angles - for(int i = 0; i <= sizeArray - 1; i++){ - gripper.move().to(limAngles[i]); - delay(TIME); - } - - movement = false; // Stop joints' moviments - } -} - - -//void loop() { -// int pressedKey = Braccio.getKey(); -// -// if(pressedKey == BUTTON_ENTER) -// movement = true; // Trigger joints' movements -// -// if(movement) { -// for(float angle = initialAngle; angle <= 270.0; angle++){ -// base.move().to(angle).in(100ms); -// delay(TIME); -// } -// -// for(float angle = 270.0; angle >= 0.0; angle--){ -// base.move().to(angle).in(100ms); -// delay(TIME); -// } -// -// for(float angle = 0.0; angle <= initialAngle; angle++){ -// base.move().to(angle).in(100ms); -// delay(TIME); -// } -// -// for(float angle = initialAngle; angle <= 215.0; angle++){ -// shoulder.move().to(angle).in(100ms); -// delay(TIME); -// } -// -// for(float angle = 215.0; angle >= 45.0; angle--){ -// shoulder.move().to(angle).in(100ms); -// delay(TIME); -// } -// -// for(float angle = 45.0; angle <= initialAngle; angle++){ -// shoulder.move().to(angle).in(100ms); -// delay(TIME); -// } -// -// for(float angle = initialAngle; angle <= 250.0; angle++){ -// elbow.move().to(angle).in(100ms); -// delay(TIME); -// } -// -// for(float angle = 250.0; angle >= 30.0; angle--){ -// elbow.move().to(angle).in(100ms); -// delay(TIME); -// } -// -// for(float angle = 30.0; angle <= initialAngle; angle++){ -// elbow.move().to(angle).in(100ms); -// delay(TIME); -// } -// -// for(float angle = initialAngle; angle <= 250.0; angle++){ -// wristPitch.move().to(angle).in(100ms); -// delay(TIME); -// } -// -// for(float angle = 250.0; angle >= 30.0; angle--){ -// wristPitch.move().to(angle).in(100ms); -// delay(TIME); -// } -// -// for(float angle = 30.0; angle <= initialAngle; angle++){ -// wristPitch.move().to(angle).in(100ms); -// delay(TIME); -// } -// -// for(float angle = initialAngle; angle <= 270.0; angle++){ -// wristRoll.move().to(angle).in(100ms); -// delay(TIME); -// } -// -// for(float angle = 270.0; angle >= 0.0; angle--){ -// wristRoll.move().to(angle).in(100ms); -// delay(TIME); -// } -// -// for(float angle = 0.0; angle <= initialAngle; angle++){ -// wristRoll.move().to(angle).in(100ms); -// delay(TIME); -// } -// -// for(float angle = initialGripper; angle <= 70.0; angle++){ -// gripper.move().to(angle).in(100ms); -// delay(TIME); -// } -// -// for(float angle = 70.0; angle >= initialGripper; angle--){ -// gripper.move().to(angle).in(100ms); -// delay(TIME); -// } -// -// movement = false; // Stop joints' moviments -// } -//} diff --git a/examples/tutorials/projects/p02-controlling-braccio-manually/project02_test/project02_test.ino b/examples/tutorials/projects/p02-controlling-braccio-manually/project02_test/project02_test.ino deleted file mode 100644 index c3a2049..0000000 --- a/examples/tutorials/projects/p02-controlling-braccio-manually/project02_test/project02_test.ino +++ /dev/null @@ -1,174 +0,0 @@ -#include "Braccio++.h" - -#define BUTTON_ENTER 6 - -// Colors -#define COLOR_TEAL 0x00878F -#define COLOR_LIGHT_TEAL 0x62AEB2 -#define COLOR_ORANGE 0xE47128 -#define COLOR_YELLOW 0xE5AD24 -#define COLOR_WHITE 0xFFFFFF -#define COLOR_BLACK 0x000000 - -// Variables -String selectedJoints; -float homePos[6] = {0.0, 135.0, 200.0, 200.0, 80.0, 80.0}; -float angles[6]; // All motors current angles - -// Braccio ++ joints -auto gripper = Braccio.get(1); -auto wristRoll = Braccio.get(2); -auto wristPitch = Braccio.get(3); -auto elbow = Braccio.get(4); -auto shoulder = Braccio.get(5); -auto base = Braccio.get(6); - -String jointsPair[] = {"Shoulder", "Elbow", "Wrist", "Gripper"}; - -static const char * btnm_map[] = {"Shoulder", "\n", - "Elbow", "\n", - "Wrist", "\n", - "Gripper", "\0" - }; - -static const char * directional_map[] = {" ", LV_SYMBOL_UP, " ", "\n", - LV_SYMBOL_LEFT, " ", LV_SYMBOL_RIGHT, "\n", - " ", LV_SYMBOL_DOWN, " ", "\0" - }; - -lv_obj_t * btnm; // Joints button matrix -lv_obj_t * directional; // Direction button matrix - - -// Event Handlers -static void eventHandlerMenu(lv_event_t * e) { - lv_obj_t * obj = lv_event_get_target(e); - uint32_t id = lv_btnmatrix_get_selected_btn(obj); - - selectedJoints = jointsPair[id]; - - directionScreen(); - lv_obj_del(btnm); -} - -static void eventHandlerDirectional(lv_event_t * e) { - lv_event_code_t code = lv_event_get_code(e); - lv_obj_t * obj = lv_event_get_target(e); - - if (code == LV_EVENT_DRAW_PART_BEGIN) { - lv_obj_draw_part_dsc_t * dsc = (lv_obj_draw_part_dsc_t *)lv_event_get_param(e); - - /*Change the draw descriptor the 1nd button*/ - if ((dsc->id) % 2 == 1) { - dsc->rect_dsc->bg_color = lv_color_hex(COLOR_LIGHT_TEAL); - dsc->label_dsc->color = lv_color_white(); - } else { - dsc->rect_dsc->bg_color = lv_color_white(); - dsc->rect_dsc->shadow_width = 0; - } - } - if (code == LV_EVENT_KEY) { - uint32_t pressed_key = Braccio.getKey(); - - if (pressed_key == BUTTON_ENTER) { - motorMenu(); // Load motor menu screen - lv_obj_del(directional); // Delete the object - } - } - if (code == LV_EVENT_PRESSING) { - uint32_t id = lv_btnmatrix_get_selected_btn(obj); - Braccio.positions(angles); - delay(50); - - if(selectedJoints == "Shoulder"){ - switch(id){ - case 1: - shoulder.move().to(angles[4]-5.0); - break; - case 3: - base.move().to(angles[5]-10.0); - break; - case 5: - base.move().to(angles[5]+10.0); - break; - case 7: - shoulder.move().to(angles[4]+5.0); - break; - default: - break; - } - } - } -} - -// Screens functions -void directionScreen(void) -{ - directional = lv_btnmatrix_create(lv_scr_act()); - lv_btnmatrix_set_map(directional, directional_map); - lv_obj_align(directional, LV_ALIGN_CENTER, 0, 0); - - lv_btnmatrix_set_btn_ctrl(directional, 0, LV_BTNMATRIX_CTRL_DISABLED); - lv_btnmatrix_set_btn_ctrl(directional, 1, LV_BTNMATRIX_CTRL_CHECKABLE); - lv_btnmatrix_set_btn_ctrl(directional, 2, LV_BTNMATRIX_CTRL_DISABLED); - lv_btnmatrix_set_btn_ctrl(directional, 3, LV_BTNMATRIX_CTRL_CHECKABLE); - lv_btnmatrix_set_btn_ctrl(directional, 4, LV_BTNMATRIX_CTRL_DISABLED); - lv_btnmatrix_set_btn_ctrl(directional, 5, LV_BTNMATRIX_CTRL_CHECKABLE); - lv_btnmatrix_set_btn_ctrl(directional, 6, LV_BTNMATRIX_CTRL_DISABLED); - lv_btnmatrix_set_btn_ctrl(directional, 7, LV_BTNMATRIX_CTRL_CHECKABLE); - lv_btnmatrix_set_btn_ctrl(directional, 8, LV_BTNMATRIX_CTRL_DISABLED); - - lv_btnmatrix_set_one_checked(directional, true); - - lv_obj_add_event_cb(directional, eventHandlerDirectional, LV_EVENT_ALL, NULL); - - Braccio.connectJoystickTo(btnm); -} - -void motorMenu() { - static lv_style_t style_bg; - lv_style_init(&style_bg); - lv_style_set_bg_color(&style_bg, lv_color_hex(COLOR_WHITE)); - - static lv_style_t style_btn; - lv_style_init(&style_btn); - lv_style_set_bg_color(&style_btn, lv_color_hex(COLOR_YELLOW)); - lv_style_set_border_color(&style_btn, lv_color_hex(COLOR_LIGHT_TEAL)); - lv_style_set_border_width(&style_btn, 2); - lv_style_set_text_color(&style_btn, lv_color_hex(COLOR_TEAL)); - lv_style_set_text_letter_space(&style_btn, 8); -// lv_style_set_text_font(&style_btn, &lv_font_montserrat_14); - - btnm = lv_btnmatrix_create(lv_scr_act()); - lv_obj_set_size(btnm, 240, 240); - lv_btnmatrix_set_map(btnm, btnm_map); - lv_obj_align(btnm, LV_ALIGN_CENTER, 0, 0); - - lv_obj_add_style(btnm, &style_bg, 0); - lv_obj_add_style(btnm, &style_btn, LV_PART_ITEMS); - - lv_btnmatrix_set_btn_ctrl(btnm, 0, LV_BTNMATRIX_CTRL_CHECKABLE); - lv_btnmatrix_set_btn_ctrl(btnm, 1, LV_BTNMATRIX_CTRL_CHECKABLE); - lv_btnmatrix_set_btn_ctrl(btnm, 2, LV_BTNMATRIX_CTRL_CHECKABLE); - lv_btnmatrix_set_btn_ctrl(btnm, 3, LV_BTNMATRIX_CTRL_CHECKABLE); - lv_btnmatrix_set_btn_ctrl(btnm, 4, LV_BTNMATRIX_CTRL_CHECKABLE); - lv_btnmatrix_set_btn_ctrl(btnm, 5, LV_BTNMATRIX_CTRL_CHECKABLE); - - lv_btnmatrix_set_one_checked(btnm, true); - - lv_obj_add_event_cb(btnm, eventHandlerMenu, LV_EVENT_PRESSED, NULL); - - Braccio.connectJoystickTo(btnm); -} - -void setup() { - Braccio.begin(motorMenu); - delay(500); // Waits for the Braccio initialization - - Braccio.moveTo(homePos[0], homePos[1], homePos[2], homePos[3], homePos[4], homePos[5]); -} - -void loop() { - // Fetch the joints positions - Braccio.positions(angles); -}