From fce226c3c4d56dfb245b98cb23fea96e27578786 Mon Sep 17 00:00:00 2001 From: Philippe Roy Date: Fri, 28 Apr 2023 21:52:25 +0200 Subject: [PATCH] Tutoriel 3 : capteur imu mise en place --- .../3-arduino/3-labyrinthe-imu-debut.blend | Bin 0 -> 1153688 bytes labyrinthe/3-arduino/3-labyrinthe-imu.blend | Bin 0 -> 1153688 bytes labyrinthe/3-arduino/3-labyrinthe-imu.py | 214 ++ .../3-labyrinthe-imu/3-labyrinthe-imu.ino | 107 + .../3-arduino/3-labyrinthe-imu/GNU GPL-3.txt | 674 ++++ .../3-arduino/3-labyrinthe-imu/I2Cdev.cpp | 1466 ++++++++ .../3-arduino/3-labyrinthe-imu/I2Cdev.h | 270 ++ .../3-arduino/3-labyrinthe-imu/MPU6050.cpp | 3237 +++++++++++++++++ .../3-arduino/3-labyrinthe-imu/MPU6050.h | 997 +++++ .../3-arduino/test/imu-test/imu-test.ino | 236 +- 10 files changed, 6980 insertions(+), 221 deletions(-) create mode 100644 labyrinthe/3-arduino/3-labyrinthe-imu-debut.blend create mode 100644 labyrinthe/3-arduino/3-labyrinthe-imu.blend create mode 100644 labyrinthe/3-arduino/3-labyrinthe-imu.py create mode 100644 labyrinthe/3-arduino/3-labyrinthe-imu/3-labyrinthe-imu.ino create mode 100644 labyrinthe/3-arduino/3-labyrinthe-imu/GNU GPL-3.txt create mode 100644 labyrinthe/3-arduino/3-labyrinthe-imu/I2Cdev.cpp create mode 100644 labyrinthe/3-arduino/3-labyrinthe-imu/I2Cdev.h create mode 100644 labyrinthe/3-arduino/3-labyrinthe-imu/MPU6050.cpp create mode 100644 labyrinthe/3-arduino/3-labyrinthe-imu/MPU6050.h diff --git a/labyrinthe/3-arduino/3-labyrinthe-imu-debut.blend b/labyrinthe/3-arduino/3-labyrinthe-imu-debut.blend new file mode 100644 index 0000000000000000000000000000000000000000..50ec6196b4bc05a8c03ce537fb4ce610902d3309 GIT binary patch literal 1153688 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

H zXa8j32UBjV@vfrTkC%S-Pa1wO<+d8{DVqIw>1Y2W;RjQ0tMR^~*^ifg_D>vsFy*!y zA1IprcVMBxWhZmaR3qS=p^e)dloelX>>8XqZ|{dnnT{{-O&Q*NvAv7*_Jmwxt- zAAT_9wi=%(n*Dg`Xa9KN2UBjV@u{NOkC%S-cMd<8a$Akh6wQ9T^s|55@PjG0)%aY| z?8i$#`#XgnOu4Pb7m8*-Ui#TTPWZu;+iHBNX!hf!pZ#NpA56Ke##f4FKVJITKUVm` zl-p{2t!Vb+rJwy{h96A1t;RQsW=f`i$E{(I

^JW#NkB9hn!TZ;|*&t3I5AgxPw>M6lJ|5yb2H(Lr zar$_O4+=ieIC1)Thz}0FlX2qo@etoR_z>g7>Ej{3OYot_iPOhJe7E4c8YfO45Ai*M z?{1tpeLTeX3cjat;`H$l-zWIq#);F%LwvvB`x+-s9}n^2!G{?qP9G2P{ezD%PMkg- z;s*pDX`DEHJj4$QexPyU^zjfsB>2I`iPOhJ{IKAM8YfO45Ah>{A8wpDeLTdE3Vx(< z;`H$lKPLFm#);F%L;Sel#~LS29}n>pf*)_3IDI_CPYQmbapLsx5I-gO$u)0Qar$_O zpBDVonl~H7>Ej`OM)1>X-mK#E@en^N_?b0tHi*;5L;RfJXV<)0#p&ZAeqQi%Yu;=S zr;msD1;Nj+d9#Ys$3y(0;1|}s*&t3I5AjQaUtIHM6{nAf_+`N_t$DLSoIW1nR|LPj z=FKWj9}n@Xf?rwlW`j6=JjAaFezkGp^zjhCF8H;^iPOhJ{D$Dy8z)X55AmCV-&pfz z6{nAf_$|S2Hcp&A9^$tJztuQ#`gn-n5&U-J#OdQ9epm22jT5Jjhxn-AcN-^89}n?+ zgWqGEIDI_C?+<>TapLsx5PvZE1ICHd$3y(#;13xmP9G2Pe+7TUIC1)Th(8wmQRBqv z<01Y;@W+i4r;msDQ^B7!PMkg-;?D$s+Bk9gc!)n2{8{6~>Ej{(Lh$E}6Q_@d_)EcG zG)|m89^$VAf7v*3`gn-H7W`G?#OdQ9{zmZEjT5Jjhxl8;-!x8~J|5!l1b^E&ar$_O zzZd*n=)^w>{&CHlRh&L`h<_IR)0#IM z#OdQ9{zdT5Yu>El^zjh?D)^T*Z#Ib2$3y&^;9u9gS;gt&A^u(PZ)@Ic5T}oa_z%Iq zuX(eI)5k;nr{F)WM z{7>V=>Ej_j#+ZrogP@sL@zBx63O;7do7E4F(x(pb^qUOy^PP9G2P>4SGMPMkg-;xh)H!8mdHc!>Ej_jOYo*~;`H$lpEY>PIC1)Th|eB;Hsi$U;~_pr@UF&*)5k-6uHbVTCr%#^ z@p*#JZJaoLJjCYoiPOhJe4*eA8YfO45Aj8UFI@9x6{nAf_+r5q zt+{@lO`JX+;@yHTUUU5nl{kGo#Fq@dM9uYcP~!CQ5ML^I_nPZxnZ)ViA>JeS(lyu5 zBZB9^wOnZ*QD9eLTc>48DVL;`H$l9~69`apLsx5FZ?TC*#EF;~~Ct@FB*D z)5k-6m*7K<6Q_@d_-?^>HBOv99^!ih-`zNI`gn-%6?{+Q#OdQ9zEAMIjT5JjhxmTM z_cczOJ|5!3gAX%KoIW1n`v)IU^JW#NkB9gH!AI7-*&t3I5AlP7A6WBd6{nAf_#wd$ zu6eUToIW1nhXp^h=FKWj9}n>(f*)SQF(y5`LWar$_O z9~b=Cnm4OBeLTcZ2!4Fcn+@Xh@en^L_=z=dR&n}xh@TSt$N1Q$$;->{a)i`nb zc!-}7{B+~Q>El^b?|ZYSk9gMkw`p(7k^goa_cke$s{OmK_4}@|)sTN@_%CAR-@NQ1 z|AhZ0r_aiRcWSP*)i(X+>)UVWuKo7>H`aDT`EPCJAm@GS8roxwzrER40sdy(o7?Zu zD|>buHmK&8f45`J-Lvd?gKORW?wRn!A+^W-?s<8pp|!{T?z!NyU22c}-7|R6-D;2f z-LurF-D{8g-P5V}p0&sQ?s@k4y=ss9-E-C!`_vxyyJx_s`_>-!yJykehSeVTyGJ|N zwa5LgKhp2PrSkP{i+|@n(r?A3bF8iZZ%^L|Pc+Zp{^D4*$NlbEYSfRlN5`tUd-_f| zWsf`__q%73+vcr3?st#QtM<6xJtHUIy!N=?Jz5X7$Nld4^`=8=kNe%DIjKGFch3!5 zpIdv}KgFBd*Vo$p9j%8+Zo9Is<26@ace{4$bX0%fB)8RdyyiZS^lP_HNA-2B>pEWZ z+8*1sTc@M?v)}nlUB_#_fBn|&*6FDJ$jRTV>v+xS=G>~?Ivv%2bNf&0I$m>)v$klr zPDk~%&g(jDYi{0dosQ~1e)t$Y?cS+t-h9ZW?bgwHZdd>Hrg7^!Uh~u6H*VM8QT;jJ znW(PgHD?~WQM+|Is;_&zuH!Y={b+-B>vUBApl)62I$qQ7sT;O#)*kmCx@q5bkJZr_ z-Z`pkUB_$Q`OJFl*6FCep1bNgUh|uk)@`>=NA-KYzi?g0YtDY>+U?fqsQ$o7maOY| z&5agXtKB*s)jz#^uey%cJo@53?bhk2zMi-1I$ra>>DOqtPDk~BI(D_Xj@OjlZk>+m z>wN1vUUQyKz1ywRQGKnex{lY}a-UV&t$~TRSx%{s z<^F}%TCP5pdpy@Y2X#BWuH*jx4=z*J(d$UfJ=b-w;~uZ`;4g8*jy?<2b=ubK+HM`M?{zMD@|wDi*PME++1st7_dm7nb$Y&keOW+VA&; z*Y`Rv{Bl!W$7>GzVwQI6czv&<&p34*uc`Ne?bh-7UT3V?@2u;1&5vH1sogqW-|L*- zeN$`d;Vgi=V9Pc+J)+Q?*;i>w6u2CavpuO?_r* zw~p8MI(I(vd|k(D9^5QH|slLyLG(2*SWUG`*j_!dE8^;w_C^Sd!3cn z{iv?vHMco;?7EJ7Jol8T#%kB&x%w>MuE%rrKB8TZ=MMPv_j;T@9?yOD`Cr=gc&_$6 z+Vyzu1($u-uE%pHJn`#xJ)XPUurJ#6c&_$d+Vyy@@45Ltc}M%)!eJ~!3t!Oz|Gj`qV{?`S{V^^W$#UGHc=+;!g%_c6QfpJm$e{7zaw z6WM0}{O|p6*Y&xn-F-IfuUjsfT&OO)nx_wXEYkID8&-J}--_!P*p6lFm zwFc^Q_dRW|>AB85*Y~=8PupvHu5-`zy>8#r_L`pS+;e@e+xN7+rsq2MT&@3lezf-L z=PR%2xz0V;_qu&g+iQBRbI;XYLH#=7d)i*pbDevx?{)j0w%7Dr=bo#3zaEe8S9?v* zb?&*oAMPI4eXra1wEeiA>)dmFuiN*uy{6|n_gp=v)#vVe+FsLhoqMkDb^D&S*YsTH zp6h$vzNhUqJ=eMC`d+v1X?so2b?&)(KCkD;_q4sH=Q{UX-|O~0ZLjIM&OO)nx_wXE zYkID8&-J}--_!P*p6lFmb??{n<9pg(({r7BuJ3hg-s)zzNBiNfceEewdPn==u6MK_?s`Z2;ja6BxX+>MdS6k`kMCFewewu} zxZY76*L|d!Y5qCXJzmE>uKWI~?|b|B{aC*5 z?SA+8zPJ0`aL?KL~9wDe4r|mU6s^hu(Ojo})`JT4d?5K|C`d+v1 zX?x9%>Ugg2b^D&S*X*c{=lWi^?`eC@j_P=>?{(|*Oa1)gH9M-~xxUx!d)i*JqdK1J zd)>aL?KL~9wDe4r|mU6s^hu7*X?`SUbCY*p6h$vzGv<=JF4Tk zz8CHL-u^n}9^dzNzk7V&+x_nGeQ)=>$M?P6?;hXxcE5YHUs2!t?st#xd%NE~zVGdR z_xQfI``zPv=I(b-+EGpWrwev_KtGf0{O|qN%-VWZ(7tH)!_!ytWd65j+qq7t{fWCL zardZB?N8i2IrneRZ!7#z`xAFh;_lgYt|_!PmBydAdlGj~?`!9&{fWCLarZ3PZH3yO zxO)*+&$lXaB%HU+&ziAN7thEC+?oa-Sg7Gb83I$ z?n&G|y|2BZ_9yP1#NBh(cem93#NCs)d$eY1f8y>*+&$;-{dDb5+&ziAXR5njul2I>slpKXLaY?jEhx+Ml?45_eCx2lzGaX+0*+&!0%%g+p_ z`iZ+Iarfxnsr`w&Cvo@8xY~5JKXLaY?w*$h&RqKwcTeK(Iriw;Yk%VIN!&fUmur9G z?n&G|V?Dc2?N8i2iM!{n@4D6g#NCs)dv>3yXYEhiJ&C(V&n>k-arY$do=-OHUHcPv zPvY)5fA6(wf8y>*+&!C~*|+v5?w-WmqvyKXpSXJxch6IAZC(2lcTeK(IdqHxwLfw9 zB<`N&W*uDn6L(MI?$L8^?N8i2iM!{f{`=Ja#NCs)d%8U^qV^~5p2XcV0sr zxO?W{kf8y>*+&!0%%g@v1=aavGw$^jqbI7#(Y;E!0srxO-+??X=pTxO)2d-O%MKXLaY?w&#CTw41RcTeK((Q9|@Pux9;yQk~DSJ(c;-IKU`#(MU; z+Ml?45_iwr@7`GZ6L(MI?$LXR+Ml?45_ivOW8YEx6L(MI?%92+yK8^q?n&G|>vp}j z_9yP1#NDI!Hnl%-_ayF~30HZz_9yP1#NG4BhL6_%#NCs)dmb9_MD0)9J&C(V@3m@w z;_gY@J;RT9uJ$MHp2Xd=>6tIq{>0srxOXq7`xO)0srxO={R@~zsR zxO)*+&y|PTKf}sPvY+BH~HtaKXLaY?w;jl{i^mS z?w-WmGxMU~*8arZlel~I-njNB?w-Wm^YZ#X*Z#!alel|s>i=8qPux9;yXW{l{;d6p zyC-q?=)Jo3$I|Ov;_gY@Jr}P&X6;YhJ&C(#$`|;##8f|V_ayF~k(-TE`xAFh;_lIB zhuWXGdlGlg7CUvW{fWCLarZp&BmYh$jX!bsB<`N2hfh%Z6L(MI?$KwN+Ml?45_ivZ z$4*@P6L(MI?m1*yenvNqKXLaY?w%jcovijJ?w-Wmqt8~gKXLaY?w)6_V?Q>HCvo>A z?w)13PhI;HcTeK(x#m88W;@kS+&ziAN1yd-f8y>*+&xD;$Iqyz`iZ+IargYX$qcnW zarY$dp6%b~XYy11#NCs)d-U0}_9yP1#ND&v56#-2xO)3T2!b}5ZNarY$do|9Hxu=XeJp2Xdwy@J}GxO)xg?n&G|eRf>D_9yP1#NDI4i`t*KdlGlgJp1zR;L>;!cTeK( zIc@BvYJcMHN!&f1kK*6!rTU4xCvo>^FQxV;?w-Wm^Zr@0sr zxO*O*ZNu81xO)KO=^GQ?n&G|+8eC>iMuCp_Z+wqKcAe& zlel{lch9#^^1DQmKXLaY?w+kS;CGlLf8y>*+&$W>to@0*Cvo@m*q-0nlIkb!p2XdA z<=6dcf8y>*+&x|P;&;@f`iZ+IarbENwDu?Np2Xer(_uT*{>0srxO@6dKCt#D?w-Wm z^Ze<9YJcMHN!&f!%dP#1yC-q?Tzkck+Ml?45_iwci}Jg+(tIZFp2XdA)SbK3{>0sr zxO=p>T>BGuPvY*`;R*gdQ5sL;?n&G|FR#z<=1Ts=-IKU`R(^A@+Ml?45_gaGx@&*p z?n&G|vwpR2?N8i2iM!|cJ%-i(#NCs)d(ye4^Uddt%X9gCZci_w-(z>^W}kg9JpFxF zexKW^^6{&mPgmpj+MTAx7y4LgXQ+*>MjRjdIBI9ADZPs0LmyY|EVa&R#POkzr*^j5 z_-e%Qp--T8jvBw$jyOK_iPX+jn^=uFKJ-b{&Qs%e@13iL4}CJV^VKF-BaRP!3bhN= zrc@)24}B`N3)QApBaRP!8nuhmrd1=34}Chdi`DoYe8ln5pFxc|nNf|e>DAC@Qe!S> zRwIrNy{X1r&7wveA9_oTIi6LGcvB61HnnloW>+JQ5522eC$%}$h~q<_Q;oTuON}@_ z^tsizCiAEf$A>K7EmLO4}C#3uEj!X#POjotj0Ce@~Yza&=*zX z8ZD+q9N#Hw-PDLPugve_(O*KyHD6MVJn~Og;}_E5Cy)H@(O+7~wbnPIt32{gQtPFL zpFHw=Mt>P0YiC(C^2k3?ZFx2P!=qZyB`{)K*r*PagRzMSm3`Yj9OH z^2k44Z8bIgx{;{?TfisNpA%{Eef(sc;&#&D6*v|0uOB z)bNu>{^rr&QaG*JR%+ytf27(rYWT?`f9vRPD`buIQzLInHGKWmxEHrmBaZI~wE=3x zsYl)IqrZc2dbJ(Z$Rq!7wLxn5$s>PY^mh`@pf*^IJn|1y+gS}idE^g?{!k&$0lTP? zNB*H|yQ$$PkNjPuzq^ooe-AbC$Uj7FFE#w+k-um3_ZH5qwvQTl;cDcOe~{Y#YWT?`e}o$Sk!rK39iY}!BmY1(a)^@$N25<}OO0caM?SfnBk}Cz z9OyGwv#K%2(!P$P~H{Y8v2E5^Qm2=MjRhHZGN>&)QIClyHsrfwae6q zXYb|W3#whAMjRh&<0>^g%+m<9E7j1iR>MyoaeV04s4b*+tr~HBtd;B4(23)_P7VDA zwT0DgR3na$wRf}HhHAH{;kzmNw+iu-hfW;-ZE72--L6I+`5UO+sfM3C^gGnh?^0Vt z?QS*V`1V!1M~ynvqwXj*?y39K(C<;hcdr`v%mZrZ#PQv)wwKyNYUsrAJ*c*)+9PV{ z#PL0>wujoIYUsrA{Y!0kwa3-aiQ{`rjeGw|HFV1et<7qW?;`p9Y+ePhJHFV3dB_PiQ8aeU9I?X32q8ai=&FQ_qZFR3l6_OcrD$2<;EdsPiTdE~#MhW|CS#nfI` zBai&SYHzCHCy)F$)bPKhwz%5cYUGi>liIs#_{k&x9X0&#sdZC(UyVHS2dRCihMzq0 zKTyN}k=hb!AFGi^{y?=))$o%?{wHeqKT}&$?Q=Eq$lp=zOEvuDk^hAn{;$-!t9`9T z9{D?{eXE9_Jo3L$!~dPyQfl9;kw^XjwI9{+lSlp!YWROrTUzaBHS);cUhP*k{N$1U ziyHpl)Ox7>u0|gD+o}DjhMzq0|4_sKms(G?#uzD&{QhcVs*j&M^2bmg|5(Ca!m)+q zk>5|PQ~1dve;gtHafQnWI}6Dpe_P@BLh6%8{&+(C69|_TPAFVPNd7j$iG}#dBYz?x z{z-((2`3dUDO&;nYI>5dSp76@=3Y$s>PD zVHY8O^0pFAC&WL!a7Ez^Lh{JpLO7EUKY3dUXB6U}S-6t0DI|~l&4n!?e)7nlMTmb^ z;mX3FLh{JpL^!_? zKY8TOC&a&iu(xnQA$jC)EL>QKpFHvx65?M(xSDWLA$jEY6)qk+aeRvj*B34kI&pm6 zgzE{rhfW;dlEQU`ONUMz-%`SLggrwij<1JsZQ(MZ6UWy}xR!9a(23()R=B2ch0uxP zTVB{lxKilE@vSIaL%2%l#PO{xTwT~ZbmI6{6>{v=)i~xFY8-PlHFU5VgOFqQQ9}pm zudT*d)>5m^A^PhI8PhtUgY?%|V~p#m;Roq&pvGAHs-c7QH&SEl8>*p$^fyuC95z-% z2kCF7#yM@Oh7Qu-LXC6ZTn!zhzm*#2xTP98NPinO=45L%bdY{OHRfpB!0m*WXdbs0 zUMlP#I!J#9;bp=Bp@Z}X3NIJ#7&=IQC*c*sL7{{6hX}6}4h|ipKU8>?aOcoL`nw9R z7VZ){NPlG?iV^pe}wQx z;cy{qexw@nn&)wUapsjcz5|6f2@eo*&m62qUiKX%j-NQbLxndB4-s;&9j-=R_8lgU zpE$lFg|`Tg5OS{`twvt<9VL#RIKE?rw+fFDa*rRcMqc(ECyt*uz7vJF2~QC69C5N5 zdD(Z8IDX>zP8HrRJVm&K+UaWKW#4Jy_=)2?Q+S8)3}H95v(?DUzO%&f6UTS1@J``5 z!o}6jS0gX`&J)K^9N&e)yMz}A7gM`fjlAr;NE|qZs7yMyMzm<-J?cc_Kgz9 zPaNNU!Uu)-3g<^tBQN{z7spQ=-$TNOgbxbmQ+q^>yzF~e96xb2*i{; zr9S=~A4mO$`eO_K6dhMcK0f@NLI>%OCwx`dSvafmCJ<7OeCmuZYzZfdIDPa9g|i4J zi8y`qiG@w!WD%#2KB;hK;S>?4k3P9@CgD^Or;k3Ra7N)Y5vPwnwQvUEbP=bIKCN(i z;q(!wkKRStML1)`>7&meoK84%#Ob5YB%D?_OT_7;H-*e6^Td43Dtt}Y5>BJ|>_YPJ z;h#;2pE$lbgs%&`3a3_lE+KjN@Xsm4PaNMo!Z(C-3#U?iJ|TJd@Xss6PaNL@!Z(HU z3#U|kAt8DA@GmIDPaNMO!ncGA3#U+gF(G;Q@GmOFPaI!2;oHK+g_A43q>wy(_?Hmk zCys9^;XA_a!pRixAtVnU{-uTZiR0@fd{@|0IH}^x3dzHVe;FZu;_nKV7rrN4PB@9; zD+p3p*>mm5@Aq__q||Cys9$;b+3F zh2tvTPe>j<{M!og6UVom@N;2*VJF202+6~Te|sT*;`nwHej(gJIF90jgyiAFKTwFD zIKIKcFNHe^$5wo2A$j=l4-w)gj&B#?SHhvfu@v7;NFF}?y9)6W$G3;@YvJy~F%{oS zNFF}?dkXOr$G4C08{yuT=FBfhqyh4Z%Kl+uzEreGIHy2(l#D^dK8sS#LYlT}1 zuM^_KkAA&y8{rMYt%WxV@!?0mN!U+#vv6DCEkbyhAwK-*4+sYf9~AB+d`O57Kl;PM zorRAGhY0^A#D^dKQQ0U=)Ve25dJ1SUiiBZAAa;dgeM9A6rL#jONb9Y zdSk4#XE28FWc9}s;=_N6a4hvt6OJuBRX9%g@S}GUo*^7pc)GB&5FdW@@q}jy#}}R{ zoIr>VKl+5ibA%HK&lXNB#D^b!65)BmNrmSMCllhsk3PBZ0^t#X@vOjqfaZmL^z%BVqq5{KK$s@3ojGSAiPvKqYxi{^qGWL2xk^vE^G?%;YXiE zc$Kgvyiz!;5FdW@*@V{!XBS>A>?*{EAAJttb;3D?*9zwn;=_+Vx9|qxJi_aR^9u3d zN1so4lW>0FjluV!a{ub(H9ZkCR|i_t8g(PKK$s53-1ti6W%Ud zLWmDP`jW!Cgx!UA3YQY%!;ikSaFnoz@NQvGAwK-*y@dA)ml570Tvmt=Kl*aQ`-RI3 z?-Q;d#D^b!Md5?Om4punR~F*KkG_iVVd1L6hlIU_`0%5zCj6Ihb>SnzHH7%^qxTU$ zCR|hasBkSIKK$rw3!f0KBYa%At`Hx7^!0>K3D*}sDeNo6haY_d;WNSwg-;7N65_*; zzOnE*;U>aog_{cT;YZ(0_=0eA;q$^Rg!u5IZz+69xRvll;nqTY_|dl!z9QUK__DB{ z5FdW@{=(OU+X-J4ZZE`#AANxE4dD*L*M&O@@!>}wD11veNcg63Cm}xk=!1pt2!{yY z7Va#>haY{Y@IB!!!gqzc3i07b-%a>|aChPR!aaoe@T2c3{7AT$@I&F=LVWnq_Yr;~ z+*kOqa6chF{OH4kp9zNxKNXG;;=_-=zwis;Na5$g1BCeSqaP^zN_dd)OX0yneE881 z5q={)RQR>g5rtm@`KK$qx3C9s$EF4>Si4Y%t^h<@~ z3NI6O5?(IEhade4;dsI;g`I_03Gv}azgjqf@EYOx!fS>2@S|TRoJe@Ra6;h?LVWnq zZxl`HPVD11~n zgYYpSKK$s93uhKSA)HD0q!1r|^rwWg2%i=%uvOZwT?>M}Jc|kMJ$w+`_ko`0%5@ zBb-n8u5e!AdqRBp(cc#?ApAf$zwkpLKK$q(2^SK6EL>3di4Y%t^iPG02tN}pEc{%E z4?p@B!o`GN3KtcACB%mx{cB-2;Wxs?h2IMC;Ya^YxTNrV;S$0hg!u5I|0rBa_>-`^ z@Mj@D{OG?3dkB9OE-m~`hz~#d@4{ZfKZHGne+u#8NB>K>tgtb5quSdVLx>MQ`k3l3 zFC0s_oN(;$;YS}wxT3I=a0TJGLVWnqI}2A9jwf76IKB`ce)I{1s|qI+t|FXBhz~#d z#KP5tlL&hYCl%tuk3N}j4dLX%)rC_C@!?0GQn;pYDq$bt)Ixmt(WeovEu2=kmT)>D zKK$rigzE~Y7p^0mL5L4O`i#Q$g)<4)6V5EehabHu+(0;su&=Ns#D^b!R^dj%*@PPk zXBXnbkKR?diEs|##=<#;`0%68CEQFnw{TP8JVJc<(dQLzA)HURxp00VKK$ql2)7b0 zDBM!GkPsh!^o51n2p17r;qk(Kh4}EJ?B2*W`0%42CR|hR*U0H3 zJUo2(`FB1;^wi$@lu$YOb`^HvKwu{QE%XWmfozYU9@# zztQ+D#&0)%m+^ay-*5aO{X@B3%Y_lPrp)A&2a-#5h zFE8JN?7wBs9$e<^n`O@4S?26_WzL>g=Im2t&R$jK>@Q_LhTgYiKDP03jgN19BIA=9 zpThXm#-}qrgYlV-w~Wtjd`{!@7@yzxLdF+0-pzP-<2{ToV|;nzD;Zza`0B>jG`^1U z^^I?6d=uk*zRPpYXS~e$T$VYX%`)fnROWo9%AC(Zne$mF^WBZ}87Av|?#P_a9+~rb zA#*-6WX}8i%z3Y$Iq%Oi=RJDnysyrj_tu&7zB%)=jGt@#0^=7Ozs&fR#;-Acz44oj z-)j60<98ds*Z2d*A2$A|@h6NwZTvaoFB*Tv`0K{sGXAdd4~&0o{4?WU8vn-l_r`xR z{;TmnjB`=)bs5WeC*$K8pV0Uu#wRyEmGNnfPj7rCYU9@#ztQ+D#&0)% zm+^ay^L+sQUwyIXpE>*cnX{LlIs5jRvqzsf`|+8x_ntZX?3uHtuI&MRjZy7`XU^Vu z=IncC&R%uq>|bZj-gM^dCuhzcbLL};WZud6_{JwTKDqI!jdw9Vlkt}EuEys!KELsW zjk5=-|EqcEZoH@Q<&3Xnyti@o^7MaIXC340-DREqw#+v-zP0iG#&{G>a%Z^ zIeS@|vrm;ddrO&*G=8x0!;K$p{CMLh8$aFn*~ZT|ezEb(jbCm2dgC`6zuoxV#_u!! zknu;2KWY3~<1ZS2)%csn-!=ZB@lTC^Y5ZH`KN|nl_@Bnd9Ov(A(aHGu#wRvDx$&uu zcQHPb@s{zf#^*LZzww2QFK)cM@t($)Grp4X-p2bFU&nY~;~N{_-1yeU`y1cE_)f-$ z8sFXc-o}R+A8Gtx!L`jc;sxbK_eZ?{9nu<2xB2 zYJ7L&Ypkg6HI1u1_Bn^V&))mW)r?mY{~tZ9vEo_-x7w-Sf8_n|n!0OT|I@EWX4~Nh z|DHnUA%m;)d}Qdbgr6+^vBx_)-Xr_=sC=C#O?e&pI?_A;k&a9Jum1;pX)EP_$v8M4 zeKe~Y-#0104vp_2`6=V^{{I^}=fE7&`2NyAUugz9|CQGH|A}kL5&x&h`A_cyj+NK> zq;!g}&VT-|Id97TC+GB^j{85U_3u24C!hC}bjmM%X4_S-+xcrJnKv9i_w;ixf78Yj zkFVadQTW2oOc>M7m*?wWy^9ON`|6lpyd)cfTe?8*-I*&Xp zy{;UV5Z~MA@p{4DD)axp`zyb`<>RzO+P&V{@IS=PH=o<)b(!<#7ZBxftV(??5UrO{ zsp)4VE*gFjN~|I2`gwSP5#N8 zzN*~2VJ94X$V*@xV-#%0V_&)#MAKL*?dQ`6@-5*;>T}NeS(WR4J{{E9)KA(=_s+<- zuNxYh>L=}xmrghsO=HtIlJ@2|kB&go*fidxwI)tlIdZuHfc}m)e zebQJ|t5+U#=YDC-Xlac4Im*HHx%En8)X(PZRnI}MG)Da#*YJ9-dZjU<)pJU2HTQ$| zs^^|#^x~Y}8(d!_#!_jW`=x6cW3IFl`*g0}n8vwP+FU)~<3|vfKh;lbW3M>}?S+=E zZPHp3FFqVCUE8F+`AyQ&c_r+8pr-riW+XdJT~ z9~w2O#TRpmR*sK;IX<*m!S{`4nr@XuJ_)P0jj*t3zd|jp+HWIJu^=M~&J=z&x zk9NjKZkzej`Eral*HX0@OB;>6a(rlceEB@k)Y{A+S~)(na(t27W_)Pn_|VGn;VH+5 zR*nx%`EACBR*ny?9AD(N86O&r^XH58Lcbgz{c?P0@{UTG^>fZ>Vd8k1gU@@ss`OPbyshLh*gq}l6!eGKL#eN{erd4G^z_tP=c zb8(shqSbLLpS@>be3h1uiZ7p=Yk3Y_V@*@pHO*i3{=l`oHeAcsC~Gn1QPj&7lc(*x zq*`sYbRFAj={mO6(mAx%(z&+PGzZLcH5Q-eJZ9JOxw)3tm1}ujxt7NB_Z8x}X*_>x z>H4(2mNDk)x@BjaTN^E1pSHQ_`n1*3IkeT%xwh4qlQf>c-;0J;&6Tgea<1@|bA?vU z6C>{{E}i?tF~@>b3jB4@d4tRUN}#8`E{;9LnRO z<#{0wXZhNVrsLMH$@%@Rzb1E?E*)3%Vy}7WxS_QybYP zpylh4-`}IrIEQ@C(9hT7)n(IrF8by52(8Wd(9|j|j|ELNtMzj4pn5&muX!W)tJib= znm2O4dOg>#dG`*g*K_^cl*i22^7!(a46PbVUI%D-d})@e&jI!LT+8$4TAn}G^8C5R zIWwnO!8%Q9 z#oDN}d@W_&<@%Hw=TK^#YpHRK^7=ca>ws4t+9j=`ZR&AeWxdea`0!-kfLH44fmZnjyi#9}>iLi3=KGvH&bid`^>AOl z9il=# z(~z6TlJ_nA{Y#z~w0w;G3hf zd~)*~pyjdT&nfitSlm~RC34%01uc&yzvn{BW67GY=X?xb&v`7qp0ls*URrYcdd~Cg z>p9PhzxU4b;_Epd!{2-7G3z{dE-vSEcvw&EsrI?S3%2T z$?u=@diJs8^^BIslGig@9!p-&XnCd?8*2?M&of#+-#pKGJttq9)4ZP1^1S5roV4WA zc~tA!eQ5a@d3T@Gn9t*xar>>!wzC5S-a|Qi;+&pHqeB3;LX!%;YmXGUN zKCWxzr}Is7z#Km{$pqE?#yV&1qm9^bw$ZeO&g(In_UFWk%B&AM1dz@x}FJe5JF7)}L-f*2)sV%7UFSU0xPo;Le=CjmvZAa5M|I)`il^WyA z@1K2qrN;P5jq#Nl<101BS89yUwLdj4jL$XZ3az}p^vmmuR$gDU^7@ij)!FqP(Auk4-XHkN`va}KKhVni zgLPGo53L*@S~)(na(rmz_|VGnp_Su9E62yZT8O2fg-}S`WS6mKv{duJJjy93NUaKD2UtXyy3O%JHF<<3lUQhgObHW2^SA zeasr$Xqv`0nx?UhrfF=WX&T#Tn#MMorm>BtF+M&wmE$Wl##d^LuhbY{sWHA%V|=B? z_}bIT>x-|vzG&t3MJul_T6ulZ%Ik|(USBk|Hgm;!l;cAy$A?yq53L*@S~)(na(rlN zqm88;A9G)h53L*@T3HXRtjF~&>!FqP(8_vfWj)qVSr4tOhgQ}@E9!B&X&GkUj7)R4I52I(R7weAFw)r*j=`d}!tP(8}?lmE%Jz$A?yq z53L*@S~))658nFWxNXi2?Z^|y7)={>;E!$IXXESt_9vrh6D|G5XxfdZJUyDW>38>! zrj5PkEp0UR<$Qc&j!55U^6|0HjnBuIH6LHre0;fHIX>!@<3lUQ_v-K0*5C8uIhyy> zU%$BTXxcnCPSZx?{rIUX_FlStKHYo8-glPTtT#?`SE+sU;=ZG4FaCb*Xxb|pU-_Bj zOO3D8=F<2|?O2Vk)JAH2r8c|9S8AVVe5Ll1##d^L*{?72hvwHeYkqyR=GQlCetol6 zUSEz;USG8G`ZCYu_|VGnp_Su9E60acj_+e><@nIb@u8LDV{MeieEUi($G4xfa(u(2mE#*OtsLJ7Y32C#msXCCwOfww1g-J1 z-tp4PddEpC>v4aS^|;T=dUH!F>!FqP(8_u|mz4F;%6eZ(E9-Hem-TqQD(j(@_0Yo0>{FK-d*P+VJe3;bW87(U ze~+)!7+&tnd z`~0Dm<3lUQhgOactsEa(IX<*#>H) zdT3=mw6Y#rS&wyE)FIYnwJJ=%@3PeZRYG5_3OfY{)2~EqRoFRnaJ=AP z`t@6_3e!0FZBF_3)U~SLS2t0mv>IUgMMkX(CkY))zvrw~;bftM{M{tR26Aq2&M*DG zs8)siJtcH->foUMoRhv<6{g=8*lK{)KN^<~cEKVJGGB16>kPrc8H0l}1qWvi4mN{> zvjhjzY_uxm8lYUN#}$LGAiN~_ExJIn2M4V5&KaD)Uouy4aPHvXJi(cheS-53 z+2;#BO2gPlg9`))7YsgJ$6Bc3%?cL|9b6>%V#3pdZzoiWzFLh%^+=3a0vE4% ztNPo@-GXyH_YS^YSMpHxk|+obz5YIJj1DaP8pWI>EtpE8c8yf9)AM zYv!2X)975*uXwYBIg7Y^{HVY1J9vs{v zIJjkSaI4_p*1^GTf}bnQ*N%C;ICSojql2F>OzR=7feS+CylxFXiE#JeR|xa<;_qI} z7Wz}->7H#ixOci%db7HR(mmU395P0}XPXWFCJ^J`Uf|wg-r=mPe9yAp=S9{Wa=+wz zb~*8jkfrk+a8&Rmg!w*QQas(Kt;Wsb={mL=T)SJ;$mJf%_Z0UE$6yTnJ)Xsbza`$S z;_111x8N5FmkrK%x(8>z^S#M^!7(`29-5zgKl1lf^8LvDk>V`C3;7=8Uf>v$z2}wL7uMGm##54bJsHA~@?m-*@Dt`%YulJa7zh7Z6X^s9CLjt`lQp&9fHa zTk0|0Yt3ryr+ckgt^IVbHLLODvGpUZ`bw|Ay98&Q9v=KSVP0db<-i7E@s04f;KvJ3sCcWw6N7^%1wUDMN^tPl;EeN=;LPnC6>nDWHO>ef zJTv%sWBgs`ENN$lPJRAfA9He!9#4gebM0QQc(d`F@TTDB3ood6tHKL|gZv#oa#;hf zK^x7+m3sU+_$9(iE1ur(T^9Uu;T6Fj7H$`ub@gh+n~kf4SBKuzajp-3jquvw;B~>l z>;Z2Go%Q=r#hcZ-ekJ(L!doids_@p};BCRd+k=C51m`+`9Q+p{W98iM(&OC~Z&f%d zICxKR@ZR9yeZj%|gM)VlXAXa=c(b}kUk=WC`zrYN!gGUPEc`L}9>SM`vsS+hzPs?n z;H*v77T1xrme=rU;%VKssx`*i#WSw1MP92@iC+{tYb@)mwUa|axu@zeujli` zIR-jwEU(+i<)x3#x|K3QLRY|P2IYIwL-HEY=~6Sc3x@>f zd3EjJ4+tL&{*dtD;ExFZ75q`*W5L14gM&{52cHZMJ{25%Iym@DaPZmSAmd>DFqY?n zgWMnAeSMUnQprgA& zI7VU_8uan&(!7dFC3RGnZ+eTh;poV(83en&(#a zK8|aE&RnK>ZZ()^t^qo8nC7`v%>glV?vXst+#_k8o7KIN=DC^fm1+)~)xDDDxmn#S z`E}}T<)(RVR`*Jp=Vo#|JCks;nD0@#$V`R?p?{gwB08 zApAE9)A*a!^Lk!OoX1_^*-^-I8Ry8owL`_5)pLAalLMvY>vf>``{5ZR%-8fF@x11D z63^HDRPl6;n$`1nzF!7Q&+CNicAgsNdx#$My*5NVuPf&JZZ$kR>oKoA=6)2i^r3pp z>$5RNevjI$*89ETIb6u|0{&g}_+0R@<|LEbOI!Deu9mf$Vntii$Af`g2ST(E0!aE{>233G~PaUtgh=e)WF zXHN3mGB^2i9Q9WT4|9{}nHqU+7ZuO%!|^PpMt#mT>&!`>L*^#W1M|Z?;$KO~dBT~W zJfCQJ4mtOg!?T(&pW}++d9IkZ6~aS2>);KPSAEXo*x;uNnIm-O>G;sey(9SLLe2pX z1n^S&(jRYK+n{Y*XPIloOj zU-z@c^LoBrJg)(+1@}C;SL-p);hfUvikjfu!NGZg&nuiSI5>as1%wL*2Nwzst{;41 z;UdBN3zw^Sv%xyaYlC%|*B+Sf!DYq!sWIm6!lijpn-FRv>wuX!-v?_h5={2=QO&YUo(aL#*!;Oh#Bp))6WZt>)CGKcF` z9)0gdnCF@K$#dIRoP6p~W6j_^pD?HB%t@X@=7tzL^TRyC*AeFW%uk+A&OOf|*LrQW zMx$BH$qp6QeyosM)WN%LaONP-A?q&B4`bjy!9TVz&kyTuoY1*H^4Pe(+$Z>1@A+7B zi+2ir0%4v{#-5)an3HkC!+G)CL7mRRJkOlhc%gG2z=PQnC?xz7ZUFu9&o$h;P%16 z0l`^EI|c^_1_uWP2X_h%4i3(oFsIB9bCTw^SAqkdITrJi<}=Mto=?s_&mrfY=a6$xbJ(or zAkAU3nu9cl&1w$v91>@pu?9F7o-a5q-W4j|tX|(aH+1q=49;Ax7JOx4x)%Drp?H1{ zSw%cumuB_coYqg8hxB~Xtey+g^=eknH+fEY{$Y+dZf{|_j`|*oIL`&>a|-iyCNgnAkQK5w^Zm{+qr`?mrGYXeQ$0^aB%0~;LzaUF2TWFgM+&T2X_w+?h$-Jjdst9 zYhP5jS8#Ce;NU*N!F_{+`vnJw1qX)*r~ZiG;QqnEk-@-GW^nMV;NaQ8L5{((E)eE(XKv389Xv1i`9gg7 zFA?T>bnvp^mkaUXzebp^7wh55(7~&MUoFIk{}y4s z)~uy#LkF)54qjjJR)seN2X71x-V_|XIXK8MIMyg(USlJ~Zw(#1EjW04aPW@c;GMz2 zyMlvv2M0L@$6{R#3C_COIXLTTXmHlmF2Pw>y9Q@n?G~JMwR>>Z*B-%HOB{n^v6eUn zoVCO;;H)K%0cS073^;3vW58KU90Sgp;u!FAg&YIUI^q~SAF`InfwQLaI%NHjgP(Pj z)?TZ@S|SHOYbvip)=yr0tfRE{^gRo4a`3aJ@;YSwq=@WuZx_TB?tuQ}WQj~=5% zP4plLql7UdNFsU=1VQvvLV_TAiyn21-bF8CMi4zA$Phh@A?gG{^cDme{_pp*zw4Zp z<6$QEUibgI_s)5}R^FfQ+G~Hy+G~HGeV&~29R3|$(@WR*VA1lSqUFOy%P~dEzZ5MW zDOx^SbSL^BThqMn1RpC}K3=qZqGMavh9UYGvI7cE~ZTE1Mge5GjlYE3U)<7-9B*Nc{aFWPY?)O70_-zZwXS+sns zXy-PuX!&;0@|~jPyG6UMNkz-|ik9yeEk7vQoP1cc{HSR8anbUVqQ8dK+Lx~7_|xK- zpA{`XFIs+4w47Yiyr&AkELwh5v~&#byB}cW+-o|e=5Jl&H$}^DikQ;pW9JXD?d* zs%SY!(Q?kB&L;aC&se>A4H#=Otf)|mIX+FFbI-5Q%v{MK01r!^M!X{}ZD z$^Va_qdu*%s84Gw>eE`Q>T~H@twnuWV^N>hSk$MrR@Eo()uW?6t*fX{>niHgx~l4v z_ukP_lh#Jmq_q(>X>CMJS{qeOwyxDkRgspOeHQBmW4^fBKL)4-55Oruh zL>*cWQHRz;)S>kdb!c5g9oA}rw%5fPh}yFTqV}wTs6A^SYR?*o+Or0t_N;}dy|Jt} z>g_Rf)Z63es5kfIs5kfIsJExkQEyM9qu$(`qu#nR^A?Qf{N=nw%lV3y^A{}_C|WL9 zv|OlY>Cctg=Pvx)s-}4_5iVS`T%>5ZXwh=9qUGX6%O#4I{w%3`j{UbTS}s+zT)Jqv zOwqDU(Q?_M<#I*K<%`~x{@d1c>l#-mTCP~M{B_ZCrK07^Maxx+ma7)MX3~z?uK49@ zMa$KTmcJ=lu2Ho7ZPD^~MN7xNsqqSuGU8NUgPym?(VEPlCB(HleKjNcqa&b_8xieGM8^k&dF#V@xgdP``W@jJk{*49$D;+I<&Ew`y@-p_>F7A?CMEw?LLZeO%?49D6XMvYm+ zJ&IrMShU=!Xt{IIa+jjzu0_k;ik6PySk_gGqOGfWi?*)jE84o6zi8`ffugOe1&g+> z7Ao5MYFV_kd^Y}9OJDc&oRbY@*K4_6?JI+MD1BeRqgRU654Z&x2B>Ft)Hkp>!_-|rJGqx zo@2Z<6?JI+MD1BWRqgRJ+i1@*-nxi7v<5uK`C9{?qqYXDIkh!l&8e*cYffzqSaWJ? zz%kU;f@7##LB~)p3>`zg2y_hfqR=tai$TXwFAg0;y##a&^^(vr)E)V^XVJ1((Xw~Z zvQN>nZ_%<}(Q=QX<(@@vMF0J3n)e>zUPa5ji0Mc|_6j$fD&@Ma!d$md6x*a?*}D zr1<5rMa$!gmd6(@PbgZRShPH;Xz3VU>)*qegKHdG{PL8d<*7x>(~6d-7cI{yTAo?7 zbPUJ30LI$Q@ma+$|4_6%yJ&e%(em7)<#|QR^NW^_;aFF|$hp__!kV9-^Mn@_EiW!w zUQ)EYv}k!*P4iw2yu4`X7>;!{jB7m%eP!{>tBRJ!8Gk*DI=KdYZSl+Nik8M1|3?@# zb_4px;+HoSEsZn&78vz;Gx|@(FaKP$G|qVIs%O#GRj;D0tKLOhSAB}MuKE^jUG*#4 zy4s^?>ub-VttH2BENjUz)Yg(?sI4W(P+Lomp|+MBLv1ZNhT58P47K$Wb!+`NhJNeE zG1S(NW2mj4s9WpDG4xwMj-j@WqHe93s8wqwYSo&FTD4}PR;`(+Rcj_{)tZS~wRWOb zt(mAdYbNT=nu&U|cB0;_8PD-`$C~jR=WNY*j@sJs9JMv$ImTNvo}=HI@f@|a<2h<; z#&e9fW;{o~HRCyIYbWY$Alh?`-v@e*G5bQ#QSS#mN8N^hhu8GdHQrjZysc<();#yNX_k{_n2o)-~Q!w7j=yd0)|TWYKa|(enPHn#{-H@6dtU%pZFo6tDp--VGkugk>Zmv0yS4m8gA4`AfnYdWd;<$FcH4~;Ya z6ByUadib#TEXzOZ3(bm-+ zMO#;Q7HxgqRkXF_7>;EvIfmL=atyV#9XW=3 zowejSYHKR$(E5qmvyME+7;DLM)Yeqgq4g8BXB}0w$Im>YJ;!)!D(cYsiQ2P{s@hw+ znYH9O##>WSht^Njp7m4J9zR=)_8jA_i>O0uz;j%$HQ+gFYrvXQTLadd+8VIt)YgDC zr?v(hLv1ZMhWc*k80veVW2oe^50{gkI?Y7^d*Px#Z_$SB4zSm)rul zU~s=f>xBHQYwQ6>*VY$7uDkV-+}C9u+jF4DuXu0h%s!p|c+-mhw@b5|Ykyzw$2!ME zfB!1^oXvIDIvGKStB>w+O>O>a{$5CfUT(w%4Vu3h(x9K7=d=dR->GTPAG~m6 zgXZteH0a2W{bwC>$T@6JKKUCXwR6=cZ?sv1=I@L&=ohE9Yta1dlbW`lnp=*suj%>9<62iS zpR9At^z?14*DdB;_0y2g27iv3-u}J*sRkN!p0meeUCt%6*O|Jh<)6Pd(<$_F)J16P zCA4)En!oYW(C1L5g!bIf_UWGMoEGke*Nrjebb7w* zGioWnuBjX6Fzt2BHOAkLD%Yq_CqB2hL2onb5)GQq3vSTVR)gjh&z2+@C*F)pF zrp-fRjCqUst7Fbhb;L|hZj8+}!yFoFsnXTnm1`;M9HWlcS#`Yrs^fK89k18wcpX>A z>$^H$_to({ppJWC?hdat=r`Ycp+Vny!MFx}%0`bj=-s|}xIwRW<){YDXYjKpRL@T1 zrw(t>Rc%y$$KrGTYkRnJ$lA6!G$u4`*niYsCu5rGxQ?C|*G`@NSx1ch8E2pB?9V!4 zjGLY>&x`%U{-)JcJ#gPQJUj6>DH`-uqh@Z<{9OwEK6DlT;R{n6Ue`vS@Ku98d-YEn zG=HC>L05BV94l(T`D7jS;Cw=RZfN_A>+4vdokPSpx6sZxv}+0N8bjx?oKN`Gk#m`K zu9*qctJlNh{H=%vJ(PM4KYuTxLARq`!#@-C8k)ZW)1YIlJO{NF@ma?ntFNB6zwoQ0 zhK#JD^{tML`|VpD8~5S2IyUal)81?8 ze#vu~=33-DWF0wleQ{0I*`Ia9*hgr`&pP6bsi%z(zdGh4>**X*ja5C{7;D>Wopp}! z*(YDSdOF9b**#j(>xn{tel%`tRW_ktB!hTs$*``lgpTMy=(2f!tc65=WFU5 zH2aZpP4l(pTwcGb*FLph?t+GBC;>ggP#c0CbaPv@Ad?K|Qf2?B;e$P^A&kJ3B&tCbf z@8v69eUD#h=jC{=%kN1;SML>6e%BZNY7UiuTHQDY`}!rn@?MeaBWX+IIKKkFDvMtwSFJ)L8w=h{}+ zrSZLV`kCgvDd*HQ=0DPZTFW%w6E)_r@%xDUoT-lM*i=Uz{v-2=JiFdJx2z+k>9~;- z{aNREMnBFm`pMdJBgXUMez(7RI>$`!dL1kBoX2gdBgVRowNy16HSlx$Rkc4?^Zc={ z)>ZkZcmC5G@4E7JiFGy2L&SJI>sY(~tRu#pMC~=rRmA6*>7BoI(O3hG&x+Pj_;bwk z_HQ0yo=tNVYs@jz+yC^&J67Z~kK0s7%=GsEOUHX%;$HUu2txaR2cdnBHni{EhW0(( z(0A}&Z|FC84>)v_|2t^#dpu(D9Hw`@Uh}A{N>}&kk9GANlApWOvA;FdT(5>_&ZxKi zT$HuPBW8N%KfUoy=Na#lyN-DOTpjPLtK#@Ha<9wrjs`u8aI;q}st912VT&1h`=qg>kcUS4^ zJ-td-@AXx>dJnMDRepY~^Bksky{#C=7%=C`oykc%L=G;_A%=Gqee^GDM{HuD%I>$_J|9M|>jxo=ybBwvl zH52*FIm|Kn^^V`{Xt>|il~q6Y725enpR6&xx8u4!C%!5@ZOpXKDiLo?qi&38I_De{ zI>%HwkMEt|VsEJCU`*&7Q(c!TzN(9cIXA@Tn7r>**P)8f=jNDde`tJ9JLZtj%`y2} zR5`BtudZjMBfB!{E_7~JIjy2Ydpu$)-S`abGh!88eQ(^@XXUq#*l#^n<+M5@bdFJD zsm~wl9HXxCSoK*?=NNU|3!YI==NNU|7sl7qIYu3IZhYv-U-31pkK+x`!_(%uF|Rp) z>gX$$uLB7Zq1bdHJp!+3R$ zsi$*HrK?=qr#ZEktaFSya&1gKonzFIYwy!~I>)FZ*T&b=IYu41Hol(DG3v;*@%40$ zQM*oaVti=ZzvNey{~tdiIp6x%^p~8?wEvHs^N@8lw<=e^>}>wu>pj0$kY8J~&N09A z3i95S_r0uh%r8Bks-E-SQq^{@^BnWvF`vA5G4_x4J?9fK(>ovUi`eUOKUwFP|49FN zZ;Y{WpX!Kl&uH8?YOm2{y-js>U8Z+F)7H7Kxz#>U)mWu-jC0F-b<8u*ImcAGN)aW9Shs5RHrR7Z?^OVld4 zH~&%34LZj-R`lr_>**ZhaoaJ67*~JR5o4d>*H=&H7xgMOhqzzzJ(6SWGp=dVv7*nWF}7WA{ysNrkJpRw zTE+FsI-hF}Vm_75HJo)-hh<&0>!pr4H`URn^NJXC&SBOOV?T}8W!nF{41bQ%7w1;< z&-Z4do;IdhmpS=o_j_KKeZ-uz&M{5b7<1O2b@Wr+%Z=|Z#r3NC{PF+wRO_w$YWuY| zn(FAM>A2aSb<9m)&Q(2~WAZ%J(N9yI$I3e9FSCvq`-yuhKX+xFV?1x#Yg*Mn<yyEJ^N=BUtO1f<@!1d1MOhaX?B9HY*23!P&eC;C+9n9%yC-5-9u zS64CBo{+VD$F)|+wKFDkj&aP0SLc{|I>)G8TU8s=-aFyXF>2=#@%40$QAe(-wKU#S z;mYrLm z`XX0Nb-fsU5ubHFx9PYMuRrVPUwX{zVn6ltv@yPJR{6I!qdv2)_K?PFl*f(!W!4en zSkY&ttNZK6I^SRU9{jP+=Q=mnS*^EmEqTs4Caau=&)>-B<`_ShBjWRCbmVh$O#Up9{5c-^Txz7@|IN*t*VUY>^Y1d((>X?+f8V*D z&M|88*l>O8=^UfZzc*b^=NNVV-RgQe$Efq~U)R$)MxB30yPnQ5>bQ31JhcAExpkOz zX>RIXAwZ&N1r9x$*UMj!{R>jjyM3j5=~|d_A3G)RA-J>**Y$ z&N&aQKXOhErqMaK^|bNfS4Yn6GwYa}FX<{GoBo(X{`@8NPmLS?9HWl;KkJ_wH~hwD9rMX^ z%i8#ec?(T#)%J5^>ggP#jy=TqdOF9bV-GRDp3X7OE%p%O>**Y$&bh6pbBsFjZ~vk7 zN6wo*o8{cr)5eEi9l5p7dOF9bBj@I!p3X7q$a&K|hd;-tBj-8KS?3saX>R zIXAwZ&N1qo^U(f0d;Gk*KhGXI|2{(gJ%t?O?^|u z&sX?6?XVy8!9K`(dT8xSL=g-1YN6w9j`DdMD)RAXn zV*Xj@74w3QobdFKS-fMhl z=MeeNpM9r}oEuY5=NNV5-1vGr$EYL!#@Ew1MjiP#zMjr8>d3kA^>mI=N6vGev(7QT z21U-B<~jU1Ccm!bYhj;}e_!LWj+`4)Pa7Y8b>!UmdOF9bBj?7~(>X>RIXAwZ&N1r9 zx$*UMj!{ScjjyM3jQXeY9R3`mj+)QcLVx7k_w%yOxvi&-55GEcZlCpZj!{R>jjyM3 zj5=~|d_A3G)RA-J>**Y$j+`4`Pv;o*PvtrMIYu4%xBt+-PZ^(&{sY(u;{=AX~aF<)FZ|HjwTIYu4%&w0)|$EYL! z_Fqrum@9~noEu+H=NQk8oEu+H=NNV5-1vGr$Eb78L+g+HSNC<5e|6;Cn0h+Ls3Ygb zXB~4hChI(h(8k1ks(quHk2>biblmXg7X?IjZ`K^E&BvI~c@Ft^ z*wrzgrsIY`$EagId2V?Q?(H$3ywB&?h&+e<`}OLd8aMnoMji9XbIUr%sAJzYrk>6* zzBa|a?ON*T9HWjs#Qy8)9OGEAhZtW^=NQk;xvi&jj5=x{Ukm$;pFiQ5Wg7icc@Dqv zSx5fuvz|6S{OZWL@%40$@poP#=dPum&N1r9x$*UMj!{R>bDp!#G3v;9(>#Yi$EYL! z`C9m#8K3Fx=XGZt?^78Q&-ppV&-9M?{Q2HZKleLg{M_%XqtAS9j`6d>BR+plc+<}h zj~G8cJnQH`pPOU+jPZ!ipEut0bI2pc&mqq``p@U)7;3E{ULEoI^UTdHbynLa%^TOL zL7%mH^>=fO$)D{X+W3f3Pbz)H<-xsK-bBsFw4T5?)$Efq)DX6D&j5@BJ^AD{*a&8@FopW1H8y|jkd3kA^>mI==bVSuA368F&N}C|o;E)G z>i0_h+h^oI>l~wwoEuY5=NNV5-1vGr$EYLc#@Ew1MjbgfzMjr84-g+YH@=?EF`k=q z9$J6o+d3kA^>mK; zfcVIH&U4l|#&dJdL+3g8x)bwM#~kvwS?3sa%qNeVb&gTzIfT|9bMSR7>zI!*^|bNf zSI2ysjvM|Qqt0^(tv}}A>t@z@ta{q`@T-4n-0S^P{ul}iV!=Gc+c@CldUNfFEeKyZJ_7VjrrUh!}~A| z@#=`r=jIsuj{arD=X0yvR_}pSd27`1eZ4Ur^ZmfA^+k+2zQ;F)I;%aGW}Rcy@&1@G z@%>cRIYu4tiCHu8{Z!UDMjhWn8B!bZ>**Y$j{F;6Pv;nQ)FZ=f>C5IYu2hH@=?EG3uYn zbNF+NI_EsJ{>Z;M$U5h?o;E)GYWs@on03s@n5^?0LgzVD`$km{>O59GonzE7hdj4D z2d`nwN1f*oI?ust82M4h9GZ?B{v4x@`Q*9fIk-2*eDXe-=a%PC?R!;z)YgspZ#r(w zC&#E`kIHk)b1)|6qmG>9x#@S$a@=ZPZPYOzW9n(+!>^9{7@u{_!I-RLK6!3=4jzxW zsqPv;nQ&TT!N zW7JyAC$x;5`+A#oX>R`8U3v&M`ilM9z(`r*n)ta&CM*onzFI zbK~pj9HWk$8(&Z77`1WcUxxPYhL7HczZ+iuo_JS|`**`vgU4cPVO!16tl8yoDR@5Y z23x{b#kQnn$qu7Yhy`y4nC za~{rTW9S<8jkyljvjFB8ntj;sW7y%?I+#9l z{#)#K*u~i5^y@f|jjZ)yKgN6BSZq&hO>7O!Ij@A>g8czojFT>c9kKba`HT5O=+?@k z*kRb#*bn6Az*(pl=(Tn}Gt(YRdrjz?4#J+HJqPWl;jiFRaCZ14Y!07*v%$yVtne{7 z3$!2mvtRS*nhwU6!2MM}4ZaIch3~*q;M>rC?9YC^R<6NoxFYuJLfiVS0q0GL1HXiK!^v<*`sju2 zgmuC0!~dn<{C8T>%9MhS(AM+^L_&6+}Fdr=T5}D4z5Ys*58+W_GC`|U@y1_ z><#yXePDms7w!f7!M))gZ~)vBu1_DG?1#D>#~k~?XW<_3Ik+eME9?)ShkL=l!M))N zZ~%M}oHBWDKQ<3$j;lZWN4{tKb^x@l zAI1*C+>4y!rI>rqt21#Qkh9m|yzq56AN)IR@xD0b` z&c*qijjfLzja`eaME?E=55$(oyf$8EuZP#=HSBckJk0)f#mwFDn0cR>^Y4VmVRK=w zQFA@6>mh6~HVj)2`vYbk&&6)Se$DyUz*8{ub`|E{+8c9^xf*ls=5smBxj9eg{3r@GH0i z{1V!a{n_sxn6>CVWIiGy4R1^QBMP);|F2gL!SuqdsX{{}tFsY@Hd{+u-HcoS4^88-{t^9>lDTKVi#a z=HBaYC1&1V!A`~gjQM3Bn(>}D8uMD*jJ3f&t*chRtT-H3iN9{{m-(kHDGW zqtG?C!R*g|7a>2^>@C=@usMp|3j1OYVBX8OW3yw%Xtwp=kL{1$hM9x4O1@u#-_mvu zp8~(a_QJ+t$6_zxe*>NcAA>K$J>VUfwdJ{wV(zhzz!~8X_zY%k`Ic!B#at^ewVa~}t^!NBDVAg@x+iN%segYlC zx_B460Q(R#W(wxDSf2A8cLucg(m$})9>ecEoR8j-pVxI2^!0E) zkHJUaH_$PzhSsuqaJ|l{8U31D*LVm`?-{RyKJ)JPlrO@T(0Mh3w}MrnIi8*Kou~6X z4|^Ls7h40L&%R$_vtdhMXX5vsF;9+dUao+yr4{tLwS`weuW1X+_c*+cj&&9O&oS5G ze4XPDm}^}Qb6!7S!?EAdcFg9S@43#`c}>L5!G25IXR9wU=jnVs?|bYPY)#r;>)ANp ze(Y};exE0=gVwus{}*U3o#Vl93}zn9mw7t@z5uPYGobgpd2qe1`*QdZ>;Mmf4`cRY zyyqPc{|48Er$g^~`!U}0E`whC_25W2FSL*Kq4&@o*i_mb;b8a><~a6ezsJGnVJGP8 zoqLAk*q{Ag3O|6Iq5XPI>|+BsBQ^qa9LL)o|DM=xSXbH)z`5XPxHaq!FU7iI+tB_K zbU(TSZVOw%g^P8keGK|3>}YID+C5=^%yH~*G@Khg2)Bc)!!@wgux_-^hu$w2VB6E) z0$zq~haHFAiTwuupWzPBu@@=UgZ2>g)0p#cK6AkMx*5?A8-ex3ti4{?URY1e`8){c zf#z#RxGCHU+YCDpbHDQ5bU!*5`wjM6%yl?l=k0#szTvsfZP8*oaok)ygAKu)ZwGh+ zW)3=H7h!GiUkP`H^FvUxHKEta-0y*{i}l9##(H7S*Li!rz3#ifnc!l@cBOqRdK~7O zccbmxX2guMt=}9wPv_eQ4!|78{_NL!9SN_%?0fNIyW>9&{VaAY=6K6M`*w_;wC(FI ztTt!bp1VY`-n5TLKZn_m{ki6ovA?4aq@&m20q`}rKYSGqfr=)7hw*4J3{-I()qzSjM=n008qS$9)0?*s1#ul-us@34NfFM;o4 zzTW8D33JSCust|_J8Tbq-Rgq5_9ct$iQiiID|S3)KAhVu#ro6U2YnCbJe{v&bZ32| z(c8fX;r8$$xC49`_JCvHj?letC-?~589oZvrVsOMKFrGpnCoyouKj9kXY6v!duJ{D z-b-6R=ia*5UbIg{KaaT%*W=u0Ew(r9ebM(~uEX_sZ+UNTiFL+q!M?}b*9UNX7x*Fb zY|VxG2rdObhD*aw;4<)2*am(EeeM4oE(gDWzD8d|AKfwcEAO4P;V8HzxHjws7 z=)YmE!}Y8WPsPm9KD4cQU+=DkM`NySwqpC@x5m7-uG95)gWF@S)AhKnA29cx{b*Y| z9kBM;=Cm(^A7SQtE80uJrHc)s?Y-~<<~*J6I`A}X1KZdzYz6!m!u_FhYhLUC+Jn#| zG3V)gw}v}l&eQoguV(Nza3FN-Ws3Ep?S1)`d63jYen!h_*s@GSTS{1bc< zj)Ifmh468B2z&w_TKo^dPibEX--Q=I#mdUJKub=RxC) z*Y7>|6}%o!gy%xzjMwiyI0fDa--72r9KD-M)2ahSVt^X3}-f%a379L$_Tffg8AHsX!ICxZ{ zZT*))Yx`dK3_P;XcCF^&$N2AqPs1Y$ZR@`RdhJKTr{Lj*w)GE#UT3ej*ZnZ)x{rnK zNms$o;Qi3`nh*WQLGSr%;1_T-G|qVa$3ySA>)@Brz12A5^`8K}CvJdWL-$(ajMsl6 z91m}T-@r$pamMRE3BCkxhTp-l&^Y7up9~*?e}?~nk3-{(*MAUv6b^+i!zZC}5pP@n zDex8e6m*ZhrO>wiQ{k)dY3Lp`ywJA()8K3H8R#ByYoTrZr^DCbI5-1#TcK_JXTZP1 zXW@+4?S;1Wp9v?x=ip4(h(g=?e-FLSz2B|(J79l!C$<;%GVRBp`+#xd;jz$KJq~-7 zw)chi#~bh^I0~)}?|@!&^J;$0-)nGhco#MR^V!3F!~Mhk!DkZt^F`}H)*>sxIZ|K<9Xga*gn`> zw7oB^d;76J&$Gr)#3s^q-*Nx3AN%vXdof?H-lpw+7x$I@oke>Ycp-cTy5Btr-50G* z`}H0<340g6`=0xs<2auE-iPgnO``36ANRH6T}itQya+xIy|28#yno(<_Uk=%GWI_0 zccJ^Q<2auEn%hCx2ejRHj)acmc=y9Opx4>!>2-~||B$x*dXIXYy`ElI_kYK6Jp1+B z{jrZ|TT4el$8o#|;GEEL?C*OR_sz$&J0blPicFe z$NFL~(jEh2U$(yoY0nKuL*u)#Bn z1O30a<={MUdFV6c=5PnN8Qd4n0w-fLV}oe7g&m+d@&EP~fxcg5Zf1pR!M@P7_yG~zy+Z1XDtlB!`vhK&~6X^fz6NkO^R{0^>?AYCiMSaym#h;j$?oJ zyB+KT{XZDz<@+%$U@N!=>?Q|tw!5>^&8AR!S@5*+h;+$2d_@sb-G^X z>-&|L;dkuw;1X~)%>V21p8E~F5&sm-c{rZq&IDV*HK6la1^p-ZTiVvC_3AvGuk-Sr zxD@*xZTEt2G3V)go!6{r_xLqwd!4=B&eQpxkKY_!4%^fAUR(e+hdwjignfhk5%c|2 z>vd*mz4?Bs{kkS!1JfTzj$W+lQC1K=faZ@4$Kj;-g7;Jt7!cn91M-dFtAvvqwp><=%7#u>jF^#2gOAMb%X z!Rz66a0BSvH-xLho^X43I@|&72<>-kxB*GkHr9vE)A=~BQ(pu_nfdk;I@Jq~k*q`efNkL*=>6n= z;l6Po^mS=-*a02_XMydcnodpzna*8Si(+Sal4>^P3MBy0}t$9T{4e(=6H9?lCFg09o`xGwJ} z@2iDjYdAZ!ALBjG`_cQd4Rqd9G4tShUAOnM>u^2Jt0kNd&I{cKc8AW>`F4fFp!b9K zh4;sma0_@sp>6%%m)@UO!7bs5g|_vd2EA{*f3|`rLGQzBp!ek&um`*rdLNx!Xj}i8 z(0#-G!~4to%zoXk+_!!YcZN4W$BFT5>pu(b0&j$l7yFoP{eOVF!keJuIUoIhguURo zus6IJ8fW}&@K4bD)%(`__s?*5cy^&}{pUmXr(0l8cuw&ThkMh$1P*|=LgOOdw*E`u zKzJM61I9jQTmNNnA9y=-|BQXqw*JfEzHkI|f4->Dw*D*Ne((%+xx4Y)D1-tL0t z-|Jw0M!`*Bci08q51ohebiN~@^|T3G6FvaF4qhj(*FA78*c&>I{n@YiH@~By{cZ<0 zg%3j4;W{11@$9z?Y!4rTUN5h+<2auFKCmNv7Ur#y(-7AfM0U_O!z^GGhY91IDR$!p7t5= z{Ss%q{xvy%J)9Aq4&N(r#_L}P{~zJ3@H99Hzj4OvUl-m2e+5s4?{eHYt55-QV{Sp4NU~Bw?;FGkaZT%n9{sUZ!_WtlG z+S0cEPiUVFm!^FHe44hjt^ZTn=fGuX9|)hJEp6-njP|*(4eh~j9BpY^|L3&NgUixB z2tG?&+SdOC?epPsv=4^Q(U!LLPp0kl^m-ox|4Q3+zXeZ%U%?AuTaLTl$cJtHUvvB- zxB_k08~L!Ue+tJhhAYx`y^#;w`oH1$CGgj@U2o*Ww*GH9ekojuw(E_2*w+6Y$1j5` z({{a)58L{ua{O|*3T@XL`LM139~`${t!MLKK3w;k@I?3n90uEQ-1SC2Z0m0ZuY{{X z*K0oPcXirV!5N_S?)~66j%UAbz!Tt1_^*L$K>LgFZ0nyHUJHK<9mnzP_jm9*I1BWC z@qTg~$FtuF^nW~@jrI+&J+!|V&$j;N@J6^6bR5UC-?iaQaCYeZ=Kbh6j%UArr~l*N z9JFtS9iaWic((P=3I7B;LdS7D`|Sk(4CjL0uinp&<9PP_I{hCD=b=3uc82yBVFv#oy- zcrV---UjC_w5@+pcpuyZ-VWz0w5@+JI1+Y&BjEgnw)HO#N5M_u9dLm{+xnM)_ruMg z>s_$Ww*Dod``qTxJeUvH{VMBkM>#zY52f7|zw3>B*w+6yjvofMpzV4iAGYy3Qa*8eickA~aO zcD<1g+xlPO_%U!>+UCK0d<`FlKfp8K%WyyV3Ou3spMbM*?)mT~{QE-VjMx8HI1ju6 zj>o?bG|u?nk=K*37ikZsJptYTN5k%gw)Gzb-+(v52Vwkwzis^o!#Ckg@FBQ;p>6$# zz_;KZ;lpqT=(q#m3-C}l5#9_PFXm%g|6%ZL_$TOiF(2Fd4~Or-KSRfh`PkNf1bi3X z0-cBRaooM(-{6sO5*!X4FXm%g|55Ngcq??gn2&A!N5l8wZP4*zKDPBA13!SbL+9aq z9Ct7HJRAZ)gd?Ei#e8h*KNfxj?|_aM^Rcb}IQTKV6FOeZ$F~0C;V1Ae=scW{jVm`L@p9DXH_dv&s`PkNfGW;Cg3mq@!V_W}F_yxQVIuGaLxO>9q;F)j= z90?sS=3`s`@8LIa6m-0pk8S;D!EfRH(D7nEw)Ou3eg_|b&LieyTmRW`DjW?b!&3@v z>putn13n19gr^qT)_*Si9zF!Wf~OVQ)_)%KKK6e0zCIng?mghM@B-M3`*aL+y^#;w z`Y(htz`sD(8~L!U{~|aed<44Q$cJtH7sHw0qtNw6K5Xm11kMb{Lf0Glu&w`6I179X zy57i#ZT*+QS>fZ*^+rBy>%SbjAGu$d2lL^&`@wN=7;Mh*C!y<&eAw21C7c~T1zm6C z!?ymb;IH7*(Dg<>Z0o-o&HsROVIU3K5Xmn4WEWDL)RPmu&uuj zd+nEnc|GFIad%#)XD)74!XT1Im@NWR;hAYEw@f&Bn z{!QQ}a6Y&a{D$Mk8LxkHxH()1{u)l@8Cl4O^!?3`e%k-Pp@}N_!h@q_ZM(EI4l14usw9Wkq_JYXM=0OwV>;beAw3C z9Ig%5hORgAVO#&~a2>b~biI)e+xmY6eXphibiI)e+xq8#zL(Mwy57i#ZT)jX-wWvk zU2o*Ww*I-G^=dtv2lL^&KWF{R!g*+ShMl47jeOYF-vX`&*MqLteAw^$aD6y0wBEfR z9LMqO_cQu$1Lvo`A>0t!UyNs4{{nC$xDj+5$Ftv!;l^-5=>6jT zF0c!6vX=s1pNzn{?m(r{7QU13*fe=(kI{fogZ z;1SJq4%rzv*S3P{eDdUOTi^+cZ1!a{l$2;^|yvw!>ys?IG+7(1Gk6E zLGSl%q2oB7{eDFMtzlc*Jz#fee=(kI{VTv7;dan*Vm#aWSA;vk?cp|XsY2WOe+_qr zJHTz>(uKD5uLO62Jz#gZOrdT4E5lvkj&M8JrqH(jRp4%LC+K>YEwrtFRp>sqGc*t8 z!*zei`rXSX!dA3*!S8w_AGYN&DjeOYF|1QTDg}c*s zy^#;w`X_OGG1!x~>y3Qa*8d*I7l*xQyWYr$ZT;_adoI508S!LF0_q|028sUICAU z$3o+b*Z&H<8r}epfJ2~h#_Rt(ydK^R4~NG<!sFq6 zun*j`(6;_l;0bUf>cGjw)LM5y`B%iJ>dZ8 zx{rVd!!zMfI2yX%$cJtHzlW#52cheYeAw217CaR`1YK|B!?ylEz|-Kv(Dg<>Z0kQ8 zo({)A*Bkk;t^XW&2K)%Rz|4IhWDH}YXy|Hbee_ylylkq_JYFM;R6C!y<&eAw21 zDLfB81zm6C!?ym*;Q8=r=z1d`w)I~Qy&t__&4c-H-G{-!a2UK0j)Sf@@?l&5mGC0? zEOfn*58L{$f)~T*pzDo%*w%kFyafIgy57i#ZT;84OX2g-^+rBy>%SIW2LA?KZ{)+a z{_Ei7@CE34BOkW)Uk}}H+>gwI`LN&da2UK1UI|}<_7~&X)_)Vc3cd{OFUGU2|Bvu$ z_zH9!$Ftv8;WhA2@LKp9w7(e7w*EiE>)`9q{$f1a`fq{mckYLd<9PNv0p0*_g*U=C zp#8;ow)NizZ-Q?^`-|~x>%SekU%H<ow)M{gpM&ee+u+9>m$vn{ zfPaM>z}w*`9GABB&kLW28^RIrQ;tj9`sagxgB!s+;Ab3{w)M{sUw|9KJK^UXm$vmU z0KJ}G@4Mg^9CzI_(S8Ij1joZJ(Dg<>Z0m0cUxJ%L*Bkk;t-lp~8Eyt$Z{)+a{)OQy zaC7K-BOkW)F9KhMU7_oZeAw2%D0~fW0bOt8!?ym#;OlTp=z1d`w)HO#tyk;WJeUvH zJtO=JToO)z-Jt7@eAw3C8omLyhOXCq*zY#*O}G@a-n}0j$MNiU1~>*T11G}n(EegP z+xpwUx8ZisaU9Qnw}{ z@O`)f^nUYxbR5UC-yf)xhv2Vie+YMh_7~&X*1r<`2<{3U$MNiUH~2AJ8G65ZKRb@& z+3)xC{~%nI_NTBXw7(e7w*GeTGuR6{j^o*HZ}=7b9rS+h10Bcl?Drq^KN_~DJq7lK z_7~&X*1s0~2KIxF6XV&|zc&09?g2lCs}y3Qa*8erf?}Pi%cD<1g+xn+)d?Xx1+x131Z0rAq ztQe*3oGxL2QkKN<1!2bvG6#)~L_mSxUp`~qw~^r+hUqHEXPc5&8S=CL^k z_I2TWk*3<04Bb3w=NbMMNiUFetE3l8x-~l1Y0ZUhpJF;B-8tzElkSpq*QC28?R&2= z&mKwpUPX-CKlukHzdv&m=N_5-LzDmXr2YBw==0L#AC~krN#B5u_z}r}chV!19-Z_U zw7K?cJQnkOHR%aSPfU7J(jTH@4pWkUDmwaa!Tb5q{{l(3N_sJL^wT!^S4z5F(rYB$ zKIslgcTRf4q`RPFtnSI*Bk5g|?wNGor28j5FzG=_4@SpWLz4f5q=zPbdeUbleQweh zCVgqr!;-!R9pes9dSr?jo%EQZLGAyMyk2VmPbc)aq@PcEeA2HbJt66dNl!}p!=yh= zdUDcJlAfA$GxnO8+ssKfPkPRzTNKT*YX4^uHQ6fp7fZTz(rt=n_}c%^#JMY_n0868 zk>cAYe~0AnoctRm-6h3zP5y34cTc)U(z_(xvuNksH|hRK4@`Pc(u0#eH0dLg9+LD4 zMVs59NuQqdSxKLp^o2=Zn)I-wuSxobq;F1oc+w-1zB}oWNsmr?OwwbMelqECNk5z{dPveIBt10g z(~~|c>2s65FzHK^9+vbqN#Bt4%}EbWdPLH9Cp|Lh(MgXqQH~IS~JuvA(Ne@o?(4>z{ zdPveIBt10g(~~|c>2s65FzHK^9+vbqN#Bt4%}EbWdPLH9Cp|Lh(MgX zN&Egw#QR=JXy4Ze?RyZReLoY}lio1tE=hMyx?9q|4;B6NNP3r~dnWDs zCK2y@7@>VXA++DyhaQ~tp-CT^^pK=aNP1|}rzd?@(&r|9VbYf-JuK;KlD;A7o0A@% z^oXSIPI_e0qmv$!^w^}IOnO|>&nG=T=~t7Uko3f)Cnf!1(w`ARC2ne^zS$0R*A=_ivOm-O>Vk5Bs5q$eajG3iN3f0*>ANl#9CO43u4ZZ=!0 z|D>BIJ!jG_l3pO`R!J|GbnB$sB;7XYm6C3k^cqRGPr5_Wos-@$=`KlkO}bms-IMN- z^e##FOuBE<{gWP;^q`~%Cw*wrMARC2ne^zS$0R*A=_ivOm-O>Vk5Bs5q$eajG3iN3f0*>ANl#9CO43u4_5=6g z^?K%{no?qz5N`XwpX}JtXN9k{+7$=}DiJ^tnl2nDnJd4@>%*q;E+2 z=A?%wJtFD5lOCD$=%mLaJvQkllOC7!^GT0S`qiW-Bt0?dNlAa0^ruNrPI^kxQE=n#nRJV!7f8BQ(u*bCI_Wk^w@rGbq}wIEM$+w*?vQlnq&G~uOVVAF?v`}- zqV2h3TxnADqXg;pf zg75HifSZ(Ox$1v<{`tRKY}9RFuYLQi(yrZV|2%j)Bi3PF|Jkp$T~1oSb;Z}DHhX{R z&pWnyWy=rb*cOAP`T4+zYs#@Z_p9|Y^k0l`dVcc@ANb1g{QBX4(UKJPt>j<)*U~$qVNCuSM!UiI{)vursn#;V;skDte?By&6`#G$bWV||LU5Y z%YSyPf8~7V!;f{DM9AFt_o_OE88&DRVwG<)jF zC;heB+Seif=((+Z{crj5eG}eJZI)k;T;JGJFPh}*g2xBZj@OC4B>lf*{qedMd3GND zEP41hMOW8z$OBwAtor)l7-v_zj!k{Wty?E<8egn8ULRt;)Wk3P)%5k-d9-81@Nb58 zz1Dp7wM-4wwOFQhO{zIA(@a)z%QXHzMcD^jkH=b6o&4m#+ikx^FR%N5^sDLf%OZ62 zbFW7YzrV5a_WceR+|M8PpRTWXZis;?&s+P^`FV%O`ejO|7yx#S0KEuDC zwIe_A8fngc{8c??`x?t@=1)FrA9L9%o5pL^kNfza=kc}JXYF`Bas{q0KWlqDUZ>)? z^clnReI|?7k$9%?_%HbtuX{0u^XNt+{J-?Gc)WhZdVS9NCBK@!zPsLb3>g0Z^s{)` zC;q#h#hX6g{L;_j@mv+xDDoHc_|HCzNB`6NEFP~*QAfY@vv~9JoSF0B>qhv0_F25y zy8prVy|*3Izuy7=CN6`*1w^xH9P;Jg*#n{U5x$Qv-li8 z?CVD~{IB`)nZ#%9{Ced2x(sRZzIWL#FMhGltXD6e-uYkQ6TTKwKm zI?Q?9LVUF8Jq!0fs`5=*VnD}%ljg#A?P}ln!Ek*2^^Z4o+;5*B_&<#6HfgbUnS!$=ncdC5G7|W;K?LB(q%4c8i(kGu1b?_ZN1oP#XOENZ}s(93Mtty}OGhov< zZe<5Jrt(yA%#n{xIqRrZ-mSd*(BIoj3>am9oBKzb`6_e4_x4V2U0eAUrT@9ETj+k* zcKLC9zSeyAt@G{@AJo=6^DJxE)_c?8Yj)V_;yr5Xy=C@W+qvGoS3R*q*S^=+*8A;T z8*S`**FOHn4#VdBTW!7f&AZ%=uD8#&k9PR}gl}u>eP)5n`n%o>4}YyguT|!#t+!>% zmV;gIB*vWS!TD?JJ*L(2N4VZ4O5R=Xlvbx4<%}cF^&01TFQUKR^yhl*&-M0Y+#eYC zxj)`C%5gjM2U*knMmaxouovstoOKM^=Z8_Q2J0*SMMFYLC4A8eNfBQvu#i7ZLXH3uLT#Ksg|qFSKfIabLHGz zueC8(yBPd%K4cq z*YPduFjua_TrIncVy?`Kxf(#8dvZ<8)n;?|SG z(M?t`R}Wp?k@gw2Ts^(~+3T3Ab9UXo)X3 zYpxvET&4Mqa(?E@bqrvR=E`-Lt4&$&q-wqQyIyl;UUnld=E}U7t97`KeutT>cJsBH z&s=#u`e5d2(Pb80#$26CUVe|cpWL|mjjNlhi!ZvU_`bM2M>TIsIB6sG`br0Np z;O6FPIcjei%v{~J?QPqdt1G#8y?@QsV?7@0VXo|FY0O+5yVJ4s));55jH}fZeOb@u z%Kpq%jBBnO*IcFfjdFhG%KV*ynJd>}uJ&TBeXI4}?|RLZd07K9SLVfBd7t+qhvur! zf}724uB_(`$+fxKWQFq#t+3tbr-ig1H*d`=RyBl{MwQVXpS<|IkL}YG3*u$9d*z;NFXEVy+_2Tp4GszM?m_KXc_eMzRibs zn*Pj{{h6y6*IYTSxk~dJ<^0T*>sXI^{p?QWUfT)DsWCeP+-qm93v%UoT-J+wM?YOa>s@xFP@ z)l}-G2iL@0UDp4Z1&=%$0HG$~^yp{>+vAnX4GrTsf|}O7k1#{LGcLyc_Eor$C z8$3c@%$0dDSH4cK(tXa`%+);$^SP7c$~CRheU019)wTR+pt)iW_%^)FTwTZAVXoX; z^qH%-$&~~jQ-OSY-jJL}TV{bKAXECO^@)>)T z?la$JuHp$P;>?wC=F0k8rF)y(%$5C_s~Fc@Ij*@%^Bd*-%+<5ZtL2Jk-)62{hq?0g zx8;f#yWaaRu6%y^WWM|EtLkd%x8`a`@_gIjYmThyYU{7emDgk6 zRZkpQ)zz$@o2$#ItB%LtII^m%jXpM4-%?k5Zu{uSs;*Z1z+CN49bA6+Ya^?=dT&zH z6=RRA>gw2cqprAiBdfY5s;;JfYpyP!mWLBp?N@ETGFQuR z|F)TYdo5S5uROy?=E}X4XNghOes$hNbLDH>9_uYPs@kvGzh7Q8y5l)>72}$#(|WJ^qPa@*W4~(unz{Ohb?}TZs@kv4n`o}wpI5Bb%YHS(N9O80 z@?yPI`&HYo%vEppmVL;xx$3jvouAe2LH1_zVqI;r!hnh9%4ZUuO=`J1d!5zCo2#z8 z4xYX1{x z*=qA@y}S+%m}stcFL^On=EYpC#op|FWUkuHH|`^I<+FzMVy+fl=IvL_)tNjSm>28n z#?^Ot%3Ph#vlY)UwOnn~`Mw9t)n?>xi_1pTay4-Cb4Qq~C8@tQ!^hTgb=$UE-fXVC zKX|^XYhG`zmSEpoYOR-QxjJ^IV^~>ZoVha2TrE}lGgtO!u3}ts<+$c5&5!4+ z`yMb?r_Z?%dPGwx4VQRTLX7znWn5#XxZryr4U(40{>vX%` zTur9#KmYE7TCV;-_TB@)s_I<(9}soy*s+h;up>4sz!4Ns5m8W3Q3nx3rHPQO87sFm$Yt=N}Zx%hP7K5QDb;@*lps10ilp;qgK?~n3YWh=FQg<5fMs%utWt7F%i+d!=jS3j5+u2-{LFL^h$ zdSCObb0n|TuiK2dj#{mu>w&IWGr3;vz2&VFsnr3xp6VJslk3%TZRej)t>)?LM=M@x z^{=*#=Ta;4qgMD)t97KOYt~F^g&wuCeW?}uQY#mqz8_rjZfeyz=0UBS(Q5S0Up6($&)8`DeYO(k;A5p8@<)?eByjJ%uweMVNMV-06a1MU6 z++&YWtF1MsI+yZVJ+|UIQ>fJeI?un>yl`!wyUM^TsMT4zP9CPZ&Ag?K73@3v;Ev6n`tV;@DB@8MV@1QNN5@ zby(ugsY5g`)Jh#Yms)+aO|J)Z@0r(1f1UaaYIX9mqo?XwW?m~j87@;R^P^VyQLB@e z-EJ!L$6TRDt!!UnWM69K;?uFUZlzWyFT2WAeIJ$Aiae;*Ut4|hfbOyKT9Gfc+V0vL z+Ug!FuN8HnR$2s`u=jpb#bot z_&m(j0G;Ds#ktz%4`HtKebkIY<6M3ENtmk-wWrP1=^ux=A~u_=+KQ3xgWK{k6P79Z>4y> zdQf`Q%J!vJ>`Sd&d=11$t;j>)$LF;o4{D|7b-JGp*DLa+R?Lf@>*ckgF4Ribp&4B7 zsntV&37>LdfpxGuQ+$FjrUhO-d5aSHLM-)ug2XP?yt;`TH%+^m9*BCQ7iPQmF-Kd z*q2(l_!=HleAMcE<)C|se6GlYS}}hZ_YCAqt+rK7bnlthin>s%+xOdL>X|#;Hc>nz8t>)FgZlkm`RYC?uOInRze7|PJ+IH} zM_s6&o_Ea9&nNO)b@(KFkEnZ^2F`10)%un2JtF5ldYqSY8^ZU9x~FbnE~(X$cZcs0 z|EN6P)85o-%yr>=M6O?}Nt0UX3YLG5$o0C9uCd&6%|AbUk9d@N{f_2`S~Z>DrrGeR_U)_K-EMJoC5On_9g+K0JF^Lf4CBR1<1- z;u+!DgZWV_{HPUr=SVOAY?L0gvVEx)`%)_xUjy+`tFFpJ&*t)H59C3u=$Yr zwDdh)!!3RPu?@9aOL1_|HBjf#Eqx!}hFTq{IJoB;tbTp^`it$T)y=v?=bnrEh5ols z$e(GAR2i=s1<(H3cXkEI;0)7LXTS6zSN3+sg;Ybf%vGE zzPD<)_^@}|axYIF)T&83BX7Lve&&jNsnyDPUAD-dX;Bwy^}g!&bbMC&%tzr_DRXs+ z?r+0fg=eL4uJUK4k3ABem0qp6Y9F7KzB45}EB#V))jvKf9e71}R(go$K;K*C&q_Z% zKRhdCUevq%S?Sy3!?V)GRlhYgXJM|wvr_X5a}}PIqQ}pu!d!)CrM7RFtMIJU#izLn z&r0{uTpg+Vd1^%-)M|g_%d>TAweQ^Utn^*gWmbGvN?oWGuVeQd!1Z1~a}9UUoU2!A zEwk3)lki-AZJpCA#^>^_UkT6U<29^9xQ2!2@_NqDaKvumx%`rMhv)L2=^EA)pUaQA zEYgl+Lj~>tYsh{q` z^5^olZ@7kq=khK-UBkk2c|Irj-jVvv)pw56k9_U9Joz$f7pg9kR2S|os0;NwSl63+ z)joVShM)K7`_+aH(qq;hc_aM1hkF;@!{oIZ{#5vR51;2e3*o#RHZA<~U1 z!_Rv@R{eN}K&>vjF8sXbADT&BPx4w_bw&7j&k>5BXA;zE(q-Z2J?2NP@Z-GvM0$Uh z9<@S`^V0UER=sWuKksqz>9aBXyob+ieKzK`A`faszWiK+StDO+b&%@9^LuJ_-DlzF zJzTH(UX)tB{HO49#6$IYcd+J#TK#@r_&MUa`aGsC%vIkP!_N^Xh5N9)R*%gJKS$g{ z_3IXYjyP#r_&H*$aNm^Is^{I|=ZKs$vbHG5;`Yg+9_0V6!&!;=-b9SE2BWiW*hvDbb)5CpnUaNL*g`ZEKrG0r8$6THM zV)*&=K=p0U`19$RPlcaPf3CULIg;0^lle;L@4Gv4z546i@Ouxh zD|cP9Ix<&_&keu#V1CpJKWepN)T37DQ7hY*TCp#+a`EZ=#_)R&yC{#pDi7w0JgC(Q z%6H9>?@aQgR{GiCj0vg>wW2P})pNS9cuSvA)au)B!tc{uA-}zK-KAFheHDJ6<{;IX z>kGA7;>+;+G@EEnuhe;rD4y|2X_U&0?xY3&laLYCjIYPh)=63O{OflJpLi9<};ZdeqAHrB>`qtz3M1 z9ua<@rmyno!q0qEEApUL=PBQPLcTM}ms-tHUEWY#s1C;xeCySH_1W={G2EA;sNt&#dXoly0AWd2w5_`LnOU)8@CO&sN|bbl6q zUwSWXXul^Iex0m!{`-{8^FUe`|E5(xX{;gE@b7tA=eT(E0hfpzTrzTy->qXUxK!l) zUhZ;{gUd$_t`IrcGIDUm$ibB&2Um_94FBe^b&jjXef}S);X>bIk;xz z_$(bcF<9=@!Qvzys{`>^9ne@thCZ=bP15fqhd8Z1)WPac%vLLEV!c>Pd~F$;;5w0m z>qZW)7dcoLIkcnjx*w=bTUN#%VVtph>n-gjndeA!0+h%4n9p79=Wxy>W2e*tI z+$wT#>&U^jk%QYr4z`ON+%|G>yU4-qBL{bg9NaN-uzlp{TOaGhEe5`B^`|DbmKdzp zpJPU1Vu*caR-a&Xtk!48pw z9U})jMGlrC2X~7c>>N4RC30~0$iY1#2fIcNc8eT;>kD--O=7bdpe7bSn$|mFw%I`6 z`bhlNBlfbskc-U>`&)lY;x<3jjh<0Aa^Iod1{ zkM)RrtuMr8GeGV(W5j9mKpkw}h}mX?n%M0174Ih_2JoQB!Gj|Q4~ZP?A31nvR>UWWBnpdn+G(lFT`xUU?1xv z@!OnGANoXn$i-%cTG>q2i`)EAH=EDF;z!9?3l51KJUVjln8?9nBL{~@4i1YP93DA1 zB64tK z)_3x?xgs{30dlt)BTkzK>R|IWM*IXB`+_G%4vvi+JSlSUhCcHizV5GefOxCdtd@XT11XGIYSRBL~lk9Gnn2cy8q2d69$XM-E;PIrz)S!3!e? zFNz$zICAik$iaz`qhtM|4z?FD+iXx1@*x-YvYwKQ%?$fmf62>wL=0saYst}OiFmB< zDIPm-YtUKTlcdF0>~k%L!84qg>Gcy;99HIakYMh;#VIe2~K z;0=+3lOqRjjGW_Ef9hasiNShJO)SpI;?^T#vl&3o`bC`9BkEv%A!eHmYGSiT{5B`l z$L5e+Y-XsH&E!quH_NCkcuVBqt&xLMA_s4a9K1bp@Q%pAJ0l10iX6N}5SA7n>ROwH}d|^@SL$*W_rkL_Cva>`T5j zSHx&DK<+kU4~S2d;Sc^Qa&TJY;DeEa4@C|>962~Wa`2JJ!ABzpAB!BE5jofpIXE+N za8~5(Wj&=177sqw3u}cT%?W#1Pszo4#J<)S^0N6M2J1CB+AI;5^__fet{TPZ8TFj2 z|NnC2;IAVGUx^%iHFEH^$idem2j7Ssd^2+Jt;oT*BM0A!9Q;k>;JnDecOAEyQwQ^B zU+XV5vDjE=eIXv}JNY)s$eq}%N91mOAx@hI>R|Im%r+a;#Ac89ZBD3<&Eb3E@5|T= zY=Vk|A3(*y-$oApE^_e0$id%74t^9l_;KXmCy|4nMh<=!IrxXj!9PZhzx9ROO_SJc z2B<@mjF{21-Vw9S2Kv?); zbL8L`k%NDU9Q-nJ@UM}Be~TRad*t9(k%Rw;9Q-PzRegVz$|!CN_KDivL@NCOAKG zFpE6LX1r;gKeW`JM$I|cJaTZc$iWtogNsKFE)hAnWaMCNw2b(&GW@~i zA_td`99$uCuw~@nijjjWMGmeUIk-yX;Hr^>t3?j39y!=5a&V2v(X`%C2iuqU$(i`6 ziTSgy^_RSCeu%+(O^((h;<3Jvugw*)*$m`0(0leGPMZhnVDm=IHXCb-uO-7DTsv}b zoyfs;BL~-u9IT5RTt9NKb>!d%k%JpX4sH}VxN+p*CXs_}BFD#iK^;toc&zW##9~Ir z`bC^J4`^ENh}n9?KGqlFw>hCc^pET>PBIKm&n20BM0}09PAo7*e!DQwO&&biw%G45%n=mVzYTb z$9hMcHXCSLzlhm-L~ZCRJtcmd8R}y*NiH@&)XL_Qylj@bi|;8z2iz-iaPP>$9+89l zL=N_h9Naf@uvg^ZevyOwM-KLm9PAT0ctGUffsvzQ{h|)G7ctvxP!sYY7xuEAl8em@ z`&xg=%X&l%))#WLSt1_mJNepN5u42bx!a5pugybW@qRMm0S}5CJUDXjkjTOQk%Nau z4jvXcczEPsedOSP$iX8b2M0zD9vL|}$Q`%(QwLj14AyIEVsWz8dPHnC1L#@5h|_vR z9jq_JY_ma4Z1#xX=7jp#9FmL847IYE94vm6jM{=jA_tF-96Tm+@Yu+~p^<~bA_s>@ z4vvT%92q%yT;$-W$id?y2S-QFTI&(Hn?7;cJWvPA1%2xy@!OoRm-U5QtQYKS{UtA( zA7ZdxlcUWNaarHV*XD|P(kJRUMtDNx;E9ogVk8Q*b6)-a&SWA;JJ~5=S2>lA31nIf{EA_pf%4qh5L@z@Md2a6dU>m4<*y@=W71byo%@!QO>m-UETtS{_qy(TZ4 zC1SC@lcUWQHKb?MkbG^%CW&7bkAs&-4qg#CcxB|^Rgr^NM-E;SIe2a4;B}FM*GCTC z5IHzGa`48;!J8sS-}*=$EC#-A^`|DbmKdzph{H-t4!8D1@W`LSl{AgP5h}mWXed{CfTaVbw`a&)?Gwg5uB`=#F>PF9~ z8#&r6QA3;6sp7wiKH#*-!3QG;ABr4&IC5}$hddGj%W@_OhN*6N`tu$e-Ma!Fo-OHcP}~JtAN03$fV@kh{$oaoRjk2b(uyw%MR2 zHhYhYKOrLq@X5%*ry>WRjvRa@a`4&6!P$|6&qWSCA369!-;Er6FLE@kchtf5 zC4O=yerjU=>}&lcFPk4?uwIj+^@w<^FXU@;MQk<$iACac(iEs^IG;a0uW-Gp%dcnt_~X%^^V%QhoTomV>vo*; z!mcMR#5q?vFF2PMgNiS%|8Li>CB*F-!ntGDjU~mo*5J=8>=l0B`>l8!uxsX0;&y#& zE^gOPelNXA@9ppP@^@DGdP~_4y%zbuPgV7I#@Ezl;ac$ByB7alrl0uVr?S6qZtCRC zFK*f2JLlYQq^LEePWq0bBP`20b^12DA?Nx{(N4{4CKud%f`41B;l)~vSNkd+e1c}D zsFU^z{$by^*7?*qecKCt&w~&8+B{!dxmO-f5x-{7>9=(Hwio`MC!dxzEM%in#q!mW4u7yD`_q`litVjYOA%L zC!e&Jj{$#+r)||aV)6JG@Hb7k_bC_infCIU_$Qyr`8OS}3CDO5L#fbDI$kqh>wN0m zTGIhNPdp0*Mv957~m~syx?__ zx2fX6r!tpRTm2-l=v|g=;_8g1&(Zcm-}B&8nb#KbDYIU$HZJ$g<1wzWsizC>>vOjl z*w=IKQ=jWr#*p?UhE!+r@-;Lad_4C)y>k6f=df3$CTo+AKgZKv_?TuJcReAVlG8UG zuL<`)Pbg6=TESbMIrd@_Ttr)+V1+t2}0>Z<_e~I+S9q@HZW=3HLs{=Y_xN zcujcnN%izK6?z%ga@C>b2IhDYr@ktoEU1HzU`GXW9)@bx;Ad0 zW99rfnw7`%g6O)Du2Bo_+vMtOF|e=a-lzUMVo3XjIFnDBH*z!`^gVBMG4v|*)Aa{` z(}V{fp9|c2nq{k3@Kk5k)cl$)m?wt%jX;P z_1hz?jqBmwr#?Sk8AIAPtPMV)=2pWxr{gu@-pA^Uzv#qfL#fbDI!TkB+PNQMCT?46I{14YeEjT% zwP7!>>1Q(dv~>Em7y6!?Pl}Vir(U$I;FWp#I7@La^gItfKF%;#R%iSJ&$1O*8*5k{ zr|pHm=OGuLyWh)e!tMMGF`&iE@5M2z4?OswY3F$5UP%*u^9hEQ2q@S#Vk&dbQBoUhHYC5z+pGmeLs?1(|3Hyy7D z_dew~C%#{`?s|fM@~J$pO~-4(+sgPp#a}Ck$8?frsAs8&q4K;AI(iaWXu_Mtb02-X zR`|WVCfs~NO^AaRSQmNH40{D1G;NkD_ez@Rn@`ZJar(9w@q2DQm3diTvMf_QLTv+Y zn``>KLY$$V!N+r}XLVktgMQ+vo|SnihP*E^o}ABDY^k1=c_p2!qj43w$lce<_r+_% zQ$5l5wXzx}&G_}AK6c%hpDm_i<#;^nSb1El^z!j6xNlRQZ>Y1ykYlc?<-*_-`cfbF z^4E&AZ>VAL37U;g-}XwHLEroID)jC8<23^hKIo@w0yQ)p^aIC#e(@X|pHi+LVza%N z6VJU*xrpEP@|qzY^Qq2@_q@J9!||qEGpw!8kHb^%{#@`Z`?Gw5PtXW?1s-&QzURRw z==;2EucR6DlTWG@@!DR*Z<>ED>KXJ)Mf|CT=m*UZoA)Ufx!YdEU_AIIAAkO)-Vu*! z{#oZ>TNgvA&`;N4{7sYCl8>FgAs5r}n((?@pL55q2{HG$SJIrXT+Ao*sAUnG>5#AS zkZ>t!5=9T6x9G9A2mGPu~!_0&l`hJD$ zgw^?dSLc*($ldDvzUv*lu87BK==aL9q&Z*Qe0;vXw)mT7h|TJpa;dCs(nLSix%&JK zI$kqgBa8U0&fjJqyE?z`>d*1;@;zN}-=^s2W5|!izQco0s8#&}F`#Mjgc=5)P`5^> zA9RAA=fNlF_saGCUS2csbm)8FA-3S-XODPHhZu|p|8kxq zK6b4LYfXoEY~RY6v}KtQB^A?U%eXh?wp6Y#@T%9cj>fpKgq#B0Y+s2q1UGHWUbF~O$YzL$t7J+&@9V%`D;kh4F1U{U7uMS_NvrOGZ|`9D)enH zuNl`yAL7J#flZO$U&XzT&(Ug#zvsy()d~&M!9Q{Hsm{x4sNcAjziGmK9m;wi;x`@q zJ-0frr`5A^ucXP^DxX~6*D%Cm`{rv4AAkOuPNn93#X0WJ-^#vt&HLPSgPOIB=S#X) zWLeS-u>~K0ZdUGiSwNH@|uCy6fxL&IzM|@v6bW6`-}5891k6;jHi0v zro4u6E(#s3blm&YFAxKt!jxjZWWmye8cH^eXg|4nDRoJo!|f*QSF{;*~xnr*Ar56YhP=de6&WLngcH z3I55)pW{i#Ycex!T@0l{Kk0bQd~NPieO@OWuUR>hDR*=l<6ak6@Jb)c9e=A2{+@fE za@6!Sx!Bc*waLfFoa%#*XNi)kXD$d#J^D*s}H1W6d zxB7gvy}YLW1(RZF8T*^gHNRJ-=Ed$hK)yA_+N9$(;mOC&yZPA_I$n-zFLvkSmH5Y3 ziibGUb)J2jqMwh!?*;ch^+lW(1Dc*!p0kZk-*mht-22$PP1bSS3m?zTC*@LE+p_Cj z+2xB)O;M{<=dzAl@8HSD^2)Mvbi5qbmR-IR@Q<$)4>OzUT%E7!`@P^zQL8dvivdl~ zD{Io|)|!sjgnOS+Chp+MS*ATDC*OO1W zo)C}e@b$#2d3Ge2ZSGT@SK7;K!t09J zOSK}#Qrs(PYEE4}@d>r6+{t=nypg^2DhqAi;6aC&jnfzJ zldc>1H_CY7lX&vscukBSZv84%@!(Tg&tCE==WAPNUM%+(H5?BwUt4@qf7z=k`oS#* z_VqmY_o^d{V85A@l_w z3Ge+QyqMcwwKq0SNd2zQw_Z){>@@Nt7~OCUbBV#)A^g{ z5qk}{z9dcdQl{T=eP~Oav?L|C^n~%?{MNLcjSeVpc!~$p?2i z#J^driLasG%WJ}|&LRF%>|>qww0KR zYX)8_VvuegKk=B3*ZeliI+zbJ_;cL$@|uCy6!o`jMbHm>c}@Jy$Dgx)FR$t6E%d0S zsK4oW&A7IhJ)fh^zdn0AcRFvv(rHu;+r}8+p$LXv9n!x?CjOGEv*~zEc=Ac}maaeaB5AT$Ip$cMm({Z@pTJw>{|-3h?rY_1SSuf^ zCp^`&GB2y4*HkPOxm&ILUS5;6=Cfd4Rzt5@uE;&rD%G%36Md^E@uym)8hTCkN5?U6@ITuP4w-$T76!Jy(Cp=!u@r?&T+pNK1mZ^iglnS<)S`G$7_;H z@=4bdaxopRSyRkpb)2py`chFJ{hmjtkB_seCflZ(^JmDdK9zAg9j{sA^Qw%w(D9n$ zDX)}!#a>=hVOxDFb9XvkvnJJ$+LmJdeVrwlG{u8Y_4(*@yry`apL3^Q>{V#8lU{|7 zotssAc}?XK&R=?D*EeY>mqN#BHf~$xQ^aOEID4+Qxexkw4wh=lyQ(I(cH7G1DCoQL zig>E`Z7OnzJ6S!O)tsv1`5yZ6*s9|?q*rA;)%%7TMvXj% z%Dsp=`S==I41V8Ghx%Lx&2)|vqv?3fu@ye)T0tF5hdOv}*MV}Ubgl4vdCjpEKIt4s z-*nLTyi~-m9Ev$fdwEUxxWXr$~*c z99j5O*DBRBX)@z>z6br9@3>YZP5t#zlM-|!L81*r$w!7Fa6c!LKCjFg^%Ucyk@A5 zS)GRz`G(`6&Xw^DDf%1swHo@``n}-EC)Lo`Htic?wq8`$FzI;BArVg?_r8_-lyQq*kSP zF8FIjx`t5mr0Hie?`fPjc+d&6ruU{XJuZghV`zVaI0r!UTH6{ z3AcJy=9P53W_?BOKF6fvHQ}9#eABhp@0B#k-TV0SH|^y$^EoZ_{kd#9m73(zGR}iP zH}i8a>UhoiPEFZ3?ydF8eTub7$7|+m3m>~~G^;sM$I9_|eR18;U(}Dsf_}P2RqxwW z3B_euOiM=!`wIK(vPnf zyvnCoo9f)p^)6pq_*jn3YWnL~IUet)S<25zZNqVU`P%k#{Z08&D|r_>mE7uFnXkp5 z|3Zh`mzZ-c{kx&c^V({QzvrnJl{GXS{405?vz_CWd-ZeIlYZ`cf_^FH==Vb3G~vmo z@*KaR=$-9LY~CkbC;eVtlUlVcVo28te+}`P@Nhk;KChEb(#*2H?s}5lAxSgz z!e)|~TjsI(y(%@yCHRECSgleGvut0*5b6m}^{mdz>e;L45&o&3DKEcQrDiWz&&s?^ z$7=>|_4Kv!dnHZ$?Ydf7tF%|8=DyUgm=mj&uVJNTuZnu6YeKqK;GZ;mx%1aw6MSF1 zX5NQ5Z{#>K=gn&R2+Q#}`G({AuL#9s+EKHe;;G)(t_eN{zZX3D`13dI<@Y7#d|vZ? z(>1|gE0QKP@jjL3ujwSsQ1d*#T;HF+rcXadIrHI}A>HEFlO|FmiQJ0=t41QnygAcW`Yi7_l9j{rEPGg*H`q<0q z+g?dC)H(U2+4FmO&GdK6L+{WEGnV$^m}$a;PyTn&6`B3L^d4H*sK1NO->ttyf1v(- z{ZaWVg#7mzR+gzRE`D_N7)P1G0Bu{Ep2uU)C*{LOnb zF#K7!oNPrIe;fV-tv_FW=-`jfsxtPvO7HnQ`DkGHvu=6WN;3XC5&Z4^OXY_S{;VSh zeAkxor{B@Q@Mj%4kmEWsUKeQ{|2=`rgygoaY`or2(tGsLLGN$aQ-eGeAwy z!Jn^fDce}KgN#~H6Lj!r9bcmsJId%kH9-e|zP6QY6Ipv1wIX(O@Mj%gtCQ^{BS&IK z2YJ39E+$@m(z+(ky8i5(sM`C3~U|1A>za4gS_*wMkCb$pFlcaV`A zbHqGdEoA08%9tnS2Yqx{bB*4UE4ffJ)}ynTYy(**8M)GHbkRYNuhBR9N3P_84*q;? za~XZ3f5b-)b+UbB)M5`AIrWqg2OOXMWYlyY8MW&rBOZLv!5`nQvTbDh%ZP_O$@f|z zvG}_mwe^aD4D*-JUXP)lbGe;)4$U_;!{t!w1QjM>szCvu-ch_OgRz%p*SN z;E!(?88du{jCq9PgFox`mND!7Wpy%q(7_+y-DUKR{?R8mKKQe)hm5|_KjI-D@){~5 z_Q5h@I95hH93!vcvR!0{%XXCwlMxU3po2f_j*=0>2pREk3?2MgS1)6BN6LtYe9*z4 zbwgy#+;K8u=NLNpvu=Ql*&Zb$5As0=f7Tr>>nb~5#{6*%9sF5$gpAoAEo091k)eY> z>yD9ilZ}xvZyZAhf7T6@m1HN#m^bE_dA?rAHR41W^UVCBj}Ce_=soiXN0;>_*^#o{ zWMgHU%StkI(LwJ}8P}GRWb}#oMF)S@4U%=1(LegcF?8@}-C;8NM*rBG{K)BC*#WY1 zWCzM7$V#$-GV(lM)>BrN?JGM^Mm*$6zLSN-a)FF|$q#*W(7RFZiG}=1GS;JWx~!M% zmonlbKXlPS?_?P>d7+HF$PXR-S$BqPKiNex@*+QU@MqmAvb|&%%eu%0%h17}b!W=< zmt7)b9+_u!@MqnrGG=n3jM+O%h7SI$8!ziEyHv(J*2~brpLM^G^^i@HF?&N~=-|(~ zvt)f_m&usN0Wx&(XWeNsX7X|wePW)`!Jl~0xzbdC%i{8@L4Y>@088S_+@p@To`u9F=myI00M zF{jMyO~Srv+gPxeWQQG zL!RV&i*T^sKOrMu@*~eDWus-c>OJw1A9+448zy^9HeB|UjQGe8U3Ac!CgYrVMpiE) zKXmYC-3-|X*|Rd@BR_QTXWfIcA+p&r@|rBGm*LO42H8m2b29QGKXmYC-9xgYWzWlw zkliRl2Y=ShlpQB~LB>2X&**Jmf=Ozm=6`^JJ&XK9CU)`JjV8>t2_gEc=~|cp7Es z;Lo~uWoO7flo1d4po2f_-jJOl`@M`j9+#nmKkMF;ohkcBMjqsY4*slrQ+BHCW7%LC zbId$X5suOOPh`w9^NT(@=-sCG%->@&bXkwiTe4rsK9wCMny)8RU_6HgB$NZv$KkHtRohbXGjQMMjp@To`-jR)y{Ygfjm|t}8XWgqZ`qm_) zPcvoc;Lp0>$jUPMM?B<1UjLSzFZ;Xf0@=4R;vpaM%4FkZpUcjY&6g1m`JjV8>%Nlx zQdXmy5)b*HgFoy3EIV7)OkXD+@<9iG*8M|vp{%*ylLz^rgFoxOkewr2Oz+D=@<9iG z)_pCzNY+B{nLp+i9sF7M7uf{a;(C9&aGtCz!=H8klwB-aLhqTs*JbG7&$=&V=gOAU zd*<(5+37O;S@(_X5?QU@GkZkojef@xNENo$x;4ZbIgd`9%kR)@>=gUD#Q8qmcQXEX1F6+Y9d( zb`dgf%r83lvu-Ql9m3s(^o2R5c6STu4}D^unco}r9v$@V(R=#D{G!WxbhZ}KH~L3> z-H8-7ak-eKk_8sdxa0^{lVhoOMd91gWi35PhRAQF6+_hA$&x5i1211 z^NcP!=-H7S5DpO1C*~O){8`ssNZ;rmePW)`!Jl=#g!GO6 z5fAy0*Kxwx!efNb2}cTvhkVHEc;Vy1fx;(*qlCmmKIq`jx?_dU3r7oyhkVe%pLItH zpA?P}5)b*HgFowr3SSVOAS4g+K?i@<4H7;jJW)s<!fp^FrZogy#$A34bXhKJp{ai-oTViRE?SMMB~rKXmYC-37vTg_j74hy2jN zpLJ&m-w;j|HVVm;e5VTM>iwnS>_L9$ql4bB^q#!P4_(%ybGGnJ;UwYXLh@@AqJ!Qz z;mg9ygv=xJj1K;+J4g7I@NyyZ$UHwT#GiF#;je{P2$@Ib86EstH$nKe@Jiv6LgpDA z{8@Lp@D<@zLgtZqMhAb^ohy7tc(ssuWS-H%pLJ&lUlm>>q)*H__6R-;U~g7h3rSX#C?yjNqD{R1L565_9I?&@Mql=;itlT zh3rSX=-~f>@CM;;h4%@GlX%g=pLMqhKNH?BBu?T*2Y=R07XD87fROoOKGDISb+-%u zAe<^>zL*_!@MqnP!ViVN5;8~3Cp!4E?hfG}h0}!06Z44<{;a!6_ukM8m-Xn}Ec{6Lu#ov;KG8)7y=#T<3#SX|6Z44<{;a!2 zNZ;rmePTY*!Jl>437drUk2uJWJZB5P5k4dQm+)C3@sJ;RJ}>;MaF+0I!smp|AILAk{|l$p!cxe6Ce4Z%X)Mgg?|^$5fUHyp^FZBj|e{(z9=Lw@#6*7;^GdlRQ?g`;Pgf9y}5HinALi}0xnD7hXuZ7Gb^NbGu ztb0=UweS@o^T<4ZAjF?_GlYK;zA9uMZxf<}KkJ?n{!{px@OMJy86Est*C6~-__~lj zG0*7W&$_3D^o{<}C*~O){8=|sNZ;rm@sJOB{a!d<_?9peekdd!@*%H}g-ghqWJ}6E zk`WL2po2f_-WJx#K9La*`JjV8>pqax%08755BZ>jKkMF+HIscNBMIx~A9V0%-EU;gWq*`0XU_=H!Jl=%lPxX#lZ<&|e$m07b@OD4$v&4cZ_F|CJYD#$ z-v3#Ayo~upA06}_(R=2vQ5;>?qw}t;h3pF%^T+(6iw=5k2>&hoi;($yT!;?-tb0$k zxa>Kk!K6NUqkqq-V-1Bq04%7zLBjgTU_snkNnU@2fe?_mX$4`_rynj=-|(~ zf5}#nEvfh9MSkeu&$_?KmXp=$J$aEII{35hTiL3zrSzV8WS-H%pLKtiEiYSI@0myD z86Est_ix#1vSsw1d1Ri^!Jld-}vYqk})|zLu>hqkr_{cQSPFXI+hu{?I4lAs_NuPwzJr zt|{C|xUP_R$cMbv*ZXyZD+|{Z)(MG+e9*z4b!!PX7Pb}=5BZ>jKkHTzt|#0;NIc|& z4*slLTeyjELm_#P4?6g>ZdGBOa3djkkPkZevu+(>8{x)6=Ix&{bns{0YQpt}n+TaV z=D59ZhHy<`8y#n!nP2qLL9apYnLp+iUDl(sy0EoyQz7%m{Gy8vdM$-(2{#imf6OmB z__MB+a0B7yLgtV8MF)S@ttebuxP_2DF~8{G&$=~)^o{<}C*~I&{8_h>kiOAB;vrA+ zohjT@xQmXHFZq$D{)j{VJ^n1cCqD8cPyLaj{Cm~ygxl!7{*iqiANiq+4tiS(Hxud? zyz=7LphFp@To`wia$7 z>>^|ynP+tHXWfp%?S#7vnMdXs9sF6>R=A~b4)H#q7j_jgkIXYV__J;s z;a0+KLgtZqMhAb^?Ihem*j>mxGSBGX&$@QPt%Z9E=?C+S4*sm$S-7K+KG7HE86Est zx2>?PkbV&l`He3Ofo96%r5m zpo2f_`U<-W4-*m(`JjV8>v{=02@e;N2l=3bKkNDly9w)sMZi#|H&HR?U{$NZwpdUW;|?j{^4Wd4|6bkRX?Z{g0uBZbT#^NSAt ztm`f8EF2_c{+M5M@Mm2Q;V#0#LgtV8MF)S@^$~Uv9wnqt%r83lvu+6o-8CD z@<9iG)*UU}OL&Tqc*qAG{8@LLaDU;cLh>LVbns{0F~YrtzYvlK`JjV8>qZHC3r`a= zf6OmB__OXohLk0c%_gy$PXR-SvOHQNO+ZyyvPq7{8@Lt@G#-kLh>U|@_ka+S9pz% zlP~$9j}CfI={@tvJfq8cbS@AcF1%LAJTlMdqJ!R9!hXW*gv=xJj1K;+`=zj6c)gH$ zWS-H%pLJ&o4-(!WWFDDkbns{0g~9>C$wKClc}53+)}13fSa_q5J~7Ye;Lo~?g!GO6 z(I@5^9sF50K}g@|ANvt6aX%m&F1%AXLU_NB{fL*ie56F`ww*&$@es#|s}7GGELmI{35hHsMg=V?ySL`9ueQ z*4-x@Eu0}_o|sQ`@Mqoa!ePP&A@jtXGOtey2McHFIP=PUqK^)G&*(jUVm{GjJvw&? z=^Oo{Ps}H}=%9C#kiOAB;v+xuoGUzC_=4~Z;Y&i|BR}%|weV!&Q^He(FAIr-{LsOl zb#sJg3SSWt5BZ^kKkJ?ro+^A*NIc|8zRwEB2w&52@+Cj?(LwJ;A$gG>x~xa%8R0L4 zuM5eG{Ln=Qy;;H&gl`C$N9GwF{8{&`@HF9@LgtZqMhAb^H40A@z9nQHnP+tHXWeY! zIN{qu=8<_u2Y=Q*E*vX-N60)f&*?qlJ_!Y_oxLq6!>&$=ezxx&8)$%A~*!Jl=X2rm(SDI^c_ zK?i@@%xMVIyHd?@^-@Sj5Z z#QdU*4tnnj=^Oo{Ps}em__OZ!Li$Gkh>!fpb1Ch2l`zx$tA(|CPaNb&p3CU{jlv~` zHwl*(5)b*IgFowPgx3g{6%r45lJE1vNy6oXvcMI!;_Xsx<5)b*1 zR~x;*Rk((5if|Jl@sJNX__J<(;l095g~UTX=-|(~HHEhcHxm*M`JjV8>skx%6K*af z5As0=f7Y!fyj{43kUYo-9sF6hf$)CemO|!_`9%kR)~zkPL%5ZYIb(j&!Jl;-3Lg+| zEo9!9Uv%(i-8#ZMg>8k*8*|)VI7fK1a2p}>%>1H{4tg&NnLp+iUDl(suJA5lJ0bJO z{Gy8vdaDa>5pFA_Ps}em__J<3A$_BN^ojXJ2Y=SJ64E#NM;zowo?V2qgu4kFg`I`O zLw@ABhj6-ZXW=8l-G#(Mp5*(IaH_DYkbKDxeRR;9D>_+r*iA@$zyvPq7{8_iF@G;?@Lh>R%bns{0_QGkxy@bpo^NbGutm`10A>3QYJTlMd z;Lo}pgbxaP2$@Ib86Est*HPFY+(*bfGSBGX&$=Cj4+(n;nMdXs9sF6>NjOuuuaJ3U zp3%Xdb?t=@3wsIa6Z4D?{;Vqr=^Oo{Ps}qq__J;&A$_BN#6v#hRWE!}*jxCN@NgmV zkPmqsA$&o2h;WW@fRK2|2Oa!b*GKrYaG;QQ$Oj$#S=V3qqVPx|@sJNX__OW+;WNTP zLh>LVbns{0p~9DhgN5WlKIq`jx&wvJ3Xc*pXUs1;__OXX;auSmA@j!kqJux{`U+J}(?5q)*H*I{340e<6LNfAop@MF)S@9W118^pAMRk34@Nd_y=|_@?kw zA@PtW`Mx52S$LX|e94bI#|hsPzA7X>@%wz| z%p>!R4*sk=S@^E-JRyBzp3%Xdb;k?o8~vjn%riRpv+fij{h?39Lq6nnf$)9dCBmik zvGtmec*uvm-Vo}4xwR0!t~bO(KIq`jx{1Ojz5k_K z3qKHEC?pT^K?i@wtlSzSrZ2zfk-2YJXrqd*%N=y_MpK$M@z71gaPF!OLa^ zPL1sNvW~ZOd=li;cz@?p@A#394{>~`<0Bm(EpGZJ zI)1YAInD7i96#If^Blj>@rjOK?)cS?U+?%$j!$v?PRH+ce5&IQIsT~QGaY}z@n;-= z-tm{jttNaf8Rs+IW{=M^<9wDIZ*u%Y$3JoWkB)!g_}?7=+VO84=QG3hYTE(DI$NM?n z-|>3K`P{d<4RL&^<0Bm(?f6*7Pj$TP_;|-BIDUcS7dt-5@hcs_*73>WR+F0@pW=M( zbo^e&r#k+S!IgY>V_-l^8<@h|un;iep@lPE8qvKyV{x`?J zcKln%3EukK!tq+imvy|QqneaeS!b++W*TzPB(w*6~vvFFVfnkmk?# zbH=%M*Z=Yt--j6Idnxm|-0`a&zuxhi9G~L&o#Ogm{<_EU`<>4;$EQ0!!|_JPpK^S* z<8vH;+40vLf6MWCjyE~}q2r%8{zu2ZaQttMf9?3Uj#EslXA2R1DSs{L_|nd2dB<0B zd^N|{bbMXMTZ^0iMvk{}K3h26*75BeZ}0f7j+Y$Y-SO^@_i((I<9!_O=Xig|>m5JR z@ga^6b$q1bqa7dX_^IMnlW~rp;e5_^{5;1mbbO-Ympgv7xanW#_+;mEi{rODez)WI zJ3h_v>5k8EywUNe9G~s@9LHaF{58kla(tfSO^$!)_$QA4(eW=F|C_kg9(w{pCl<2yLMv*R5d@9cP2$M&_)u}vAK~~Y=W~MNCp&(c<7YU2w&UkHexc(N9lzZ1 zs~x}I@tYi<;`p78-|P5P#~*V1QO9RG{)D*I;c3TbJD)j@zwG#Hj=$yjJja{FP5*a} zf8=~VbNqA1zjXX7$G>rWzT?f8aOZ{NOFO>2<10D7n&WFazOLh~9pBjT%^cs#@pg{y z;P}qsR+A2nmz>Y;j(2ywhvU5*@8ftsannD<@xz?Y5snXb{20fFJ3h+s6C6L;@zWeX z!|}5nKhNI*IgY<9 zZu+k}{)Y2;$MN?Z|E=R6IsTdBpF94g<6k-cjpOqjZ>|U6#pi|NOFO>2<10D7n&WFa zzOLh~9pBjT&BU!HTRPs>`E2KSd&hTmyyW=qj&~O~{k3sHg{6NPKcKk5Mk8pgj zPasFJdQ3HE* zFsmv426DMmUBw2IOZv&_ZsAa!u-vKQ%lVs7owp`VT$Os&9$fmw|D47A`FRV^*6iy% z-wP|v%DRv4cj3Ni@Hoj#T4+?(4g*H$NuYqVKWK)^}TL z^HAHVvhN3u7&>OyPq?_7?xLAUX|DP#>ZZ$ zy1sWFF!0!;MvWLVe4%cpe%dOFPQSyfuAiZ|S@re(Z{fOL`&GoRD={hjSjPR-|3%mL zSRXsjtxi^r38l*OyvvB8BSzU5e*!M*dfT$Oo#&@iU*8vPhc+7>^Y?Hc{6G8pZgp5# z67mCk;c;482*nYKfZYFfCoR8kR#~*&w=pp8}u(+t}(|+-D z;KllND?k6c4jnOo-(vb{ukQaL^I>`N`={wlh~GzUIC{@wKH~MXdOobWwcRV{V^Od3 zi@M(8;{GsOq4|I8{h`%iVUfPK*CM;W)%xL?s4?+LA^(xG;|SeYQHB~o*ORO zi}SEliurVE-X`S6d!?xt-*>uKY3;5{ySGq$!}{-fHWZwret7f0{QtK<@uK{Bj3IN! zhm^fv{d?x4_kdv|haNrrsGpj?ehj2nxl`y1ocl-pn;iZBi&fz6<*V}NZoBB%!qj`8 z-8v5)G^Xb00YkTH+jbiif46rdq!kjrB!Dcb(+HWeK zzqGkDJeS1hXME**|L8(1Hs&OM{u$%@pY;5*^H1p0|6k8Pdp$R*%ky2jb*cR}et-2; zDL>z4$LF7hzLyI#?|$8n;ft^OW4wO64|9+||BU(B_s6v{&+k)eyzIN5f9^A2^q^5X zd%tg8^>Oq6sgFQAYv@mvE%5wve(cv1p{rt~Asp-fcT|bNCzYD+Xdh=sqDf%A! zT=YGjA2tuwT8sMpa#7b?JU{>QPx^lF|C+vA9TpagzQ;aW-%aQH&imbuK7Qm-{lH_` zpy5C1p~9lBxA>aXH0tW!tY*T<>gQnx4jMT6r#!Nw@4I&yQatalo&N7a`p&=kvpo4X zE8l-#5}u3Y_W|*9-|hpfDt7;4?+cu>z;p8Bj~u-F(Srw%IeuZj!;CBHI``haYoWam zWTo|+)r?n$3p^)(CVZ~dJ|A&TB`(Akx$BUBP3io?sS`CrtI7UP{v33QKJ$;(o?CUP zDYJj|>rs9E@b5TY?HAq`*M(RgyDrqu{^9$8MSBXZzp=20&)F@TpZ_^|sPBaTfa?O! z$t_QNPCk3WxgB=j`O=Or>3iLZ=j3r7iuthfD9(-b!*Kr*V~!d!e9-a7+ku6|MO~k^ zD}~RE0o9)y`Ezpp%k72z@L)cAce(vPWIilUdrqz&Kf0IuIZB)dn-6pPzUxTO5u=9v z`0ox)E#acBH>IEdzJmGa&}H_2zV1IeEb4mG z`T2jI!e{vDKl*dp;`rZ&++XnX6#IVldw-r1?>FuKvexd;;`52-F>&-t;`aR1ex6bn zzi!A~ZY%v?ZTrf&gz*4KWE-k&<2Bq3n>Pkzr zT(i_-*;Pv|mR`B^9j-syp%vEKytHNi(`W5+^4;0aC*GOuaNI4~)<<2PZF10g+1h)I z%2wI#kgVnAJ+si)Llr&!3U)e)hvzr*ZdZ?Z@1nwHH zd2V*_+X4Cwo=;zVhy@yORlnE`Ny0LB(%*3ua`yoiR=4#BJG@R)ej3haM<~W!Bw6_X^+t+Ww$n<&oNN)b#hVQIE)k z$4w7$41X}xf}RY%=Z%bcDEgpz++Q`=TQ%5SHQ4o(d$M-NUY~8)=d5hi9S+m}du7XO zf9!{5k$SW5=tti#?0CIDPH_+yU#Az$12a<8;0Dzo&LVTrY1{+Z_Q&0vZQB3BY>iIG zWGy%AQSARib8y_l?`ESPdp|p2MpJHM9&5_u$YapgMm#t#pNC^K3l%lU=is@l*JV%T z=VRwH>A~&!9In%Cw5|ue{>%N>+H%Jd`>^+k4IktNw;1RJGZAW#=AizzS9D#_xu6~} zhg=`Kob_S3aZjpfNuWn1OAMxi;Hiztgjo+x08H z`JUSMq&$Yu2j2tEN3IEef3ArK#Tn#U)b(8L|BL&wZFN279LV>l{)%Clb-sIlYSQnQ zx6jIJ@AFqIKWcxj1LW`a&-3qnW~l$hd*u5sx$*|(@2Wq?`d)DRtWbZ=z|1fQmGyrw zzcww9Ki45w|2}wX!q=gYHu;@)PF>o^N^lf-|gIE_V`?~&w=6^ ztn1GK*F2Yh26WeF0H1?g|F{=eb^HF=avOHZ*x&Z}uke8Lrp)4eBaVD;&b$BO`fKN2 z-g}+JCS!2EN#>htHum-72EyY}+=x8w0s zvP}=YFk5ZMdhOkr&;D`M`akCV{^#5}i+%I^0Cx|-=dbmhdqcbK6>~TEs%)(;Bl7D_ z?P{C+q`fV^eaGK4tJhgK&*C$W`;YM1|B9}8bBk+E&xucD-Ohb9>!@oE=X~p4<8;pV zUFe$Ip4HfDv+YZJm2a4}*SH&I@tJ?9?nCqIo$foh|KmQG&)n^X-@axuFdi?ATgLWSV;g(C z+cV=aGjC>|=kwnCeCEA3%V++Wci;E-I}tZ;7FE^NT~$ILsy;VwMBKQsoH%i|I1%^N zZ$9;ei*7uyI;-`6E4;rD$bM{7Z$4{3w*F}4VEovQo`rvupp$*rbRYY#?b46!k0;lK z*6(kAY^i*l}UtYhSO8u<%Ya)CWfBf~A{htqg&81H}|M8Riyb?Z?_>t#P!kf)_ve)(Jy}mzg&wj68 z3qOt=oqA^82RN?jn<*r^ApFSvJni~*!iS6>85Y~ok-e@z@AduMzWran7JmG|(eoYv z_@VXd+|OOFUnjo18Bg+fY`*Vx{duqN=l1OX`n7m?bJu)2x8ob_E;?d=$Rs~zc{2AS z%h5TW@AsR15$A5RFXG`ze!OXCIVtz&boZzJ+#N^H{rr2thx_dc@9f+UvfCy}lp)*8a$SJ{Lytt+jUzzubzXK%l+J5{u89b&sBbGnZ9i6$F|w7mhCi&empo0obYaj zaJHZB`yDe+d+bAJ z&VBTE%slbCA2Rc}@A|fx$A0I7XAZKfKlr4F&AjR6b58x-@^tZq+s`XL-FimxGsmA& z+;zhfi~b89TO5DRcNaH2{kw{1KKk2F?sr@M*&8n?e*2D#eVuyKMa7qX>`3uX*UvA0 z`L)j}KELp+;={D#Z7+U8F@M3MikCj~Va1D|`d!5{_MsikD}UhRzj*hh#UH+B#@D}i z_hrTJzw<|m-@Wts#c#jm;^H^oaHRMrt3O=)+|sj)yI=FP;vF}9f3bA&qsum^9gjK7 zacN(3?#Vy-z?H?He&}jn|MI7=D*ojCR~BFSsVj;<_zBwaju#eRe(NQLVDqbMw1IKC zyZ*G|uIryzbS`{UapN<-tGM>5-|6cyQ)h-77d-RPGk^Y(Ym2}9*h`APyqoJ|FE0M# zqt_OH_A}QM|MG)Z6@UD`qlSmt@H=mNp4%We{Osbhix0o*Da9SvJid6%`Hv`G@-*7; zlrwLG>inBe-cbC_r*4dk@Lzx8dbdaI`qK|yUHtL;$8GrX9hZ14{_)_s#pmXqRlNV! zCl_m%eNXYSXFuHaUqc(74nFK=eyFei>N7VL|N3(``}$X(y_xt+i@*K!jnM|$R<;2+ zXe@s3$6rv~^X7|+U)wlT{6hB!i;sf~Kh8L`4?of{Q2n}2Hx3t`_t=?#_1Tve|K=av zQvBT)Ugk^TfBpGmh0@D5FfM=oVa5WS_@ke^ytwyWKjLxt(vMwGd~x_g#pjq4?|=C@ zhQYD(9_G4L|3y!D=&7Axuzd4*C;#pXw-o>O=WgYCxv#(b*<0O?+y;%wUw`~M@ZrVa z<%>KHfAF4w!Knm;pI@0SKK7$eE#7+V=I1FBzekGfyQUDt89XAFav75^sTVs#8er~dH0 zGsQo@>xIQV&_&IIpNAfOlYlh!oiDw@NqMOx9a@&zw#Z@lhs@r%#_@dV9*T>sTO)GwHP{w+sO zss4%nZ&AN-AmN~BQKkdA{$J1a)Bm^7f5BgM>w4Ow9&%E3ZS@!RgL`G)>3;?Oo`-1; zY}x-3{?I{az(=70C$IXx;@GnuR$O&X)V~uA?7sXtCnxZ~f`5Ns&cUFCfAgsuioZ%U zU@QC+PyW#HbBm3c$9ewe`nT$LHBB&Z8`STu=AZCC(;(>Z=K1$qZ@SPj!9VJpSGft2pZT#%Pl@LU=9Bz)Om`(4R_UJc4!YZA+(mDn^_a7(JGbwXCth&sQ?GmB zDdBs_K-68~{hIUQd%y8|Xio13i;pqq-^iSMIdeXjvDf>B&w9+v-K!U$x_fl-De-*G zH_IKW8~HDI?sJMyG@fpHf6#n|2;~`lDt(aQhFPdf)tWPQ9o3>{IV})iX}L z`PjLqZan|d2Uh29+V!nGX9t1o$9C^q&eo6Z%Ix5>7A)Nci!Ll|8BMmRq}5GiY?)DKT6b5 zk9-ZK_I|D}rc2@DT<3D}1)c->yNptQiR-^{iRN#0{ZG>Wp6k5~$d&r|YKFziH?@ki*O!McU{#3T=_ST(0WhFB8!-(UHCWeTD+6yy2WwpvqPqx-?eRzuzOG^ygO-_Yl5} zcQscuXEb;8r?PYXdRG1W8zOopntD)wDm&M&c2)oG>-snMf4|{h?OP64;lFwO_Y?ne zeZNZJoE+hv@oy{q|1i%rHv2jMK1X@F@?V~Re^0{Z`F{}fM|~Fz@?WMupUw%D`(=dH z|9dKF`yEu-szY^c^>+`6dVZ$-XRER{r)Bj~XtJ|5@oeNbP_6moyt-IQWHxSWS=(>kX z^G9=7bmaM5qUX94R+^qE&pllEz1_f^?A!ib#*=%va(TPG>m9wjUwxbwjt)*M7`#nfn#G`k`l6(%IOt%I^x?Jn5IZ@V@)mcLh@W?oazM zUvw7ZbWr;-^<9B`^<9Bml0WvV;(krqhneqH%-U*RRG;r9d|>-AQ~$F6{8Z}ac5S`i z_|HQPxBRZat!cboIXVBf>(A-absn{@``CZpbsoTX1rmI+Kkd|QJHu(O{_lHzKabD8 z`_CJ`-#FhD*oxj{*z9zd9Pw2MQy%AX+|&G+O8Bt3jJ^85@AduMo_+V9_qacRzAKQ% zIgfjWYsQBh&-cChzwh<^+>U+spZB=)U4aLP|9tM}Zv5xt`|805vK)}dAn4A8MXmN)>Q?=m z{~pfs-{Sf1{z`t3;FIaX)Gq~mwku_?=PK;={oJno|E_@G`+=i(J^<)~_TA@x=5rY` zT;pCjH$LG*i640$CA^t@uU6aZxe9xIf83t^K9@oG@s6XPe}Lde?&oRGWk~pt@gu{3 zJ36x0a~1abes16X%N4?plSl7;0N}^t0b=gw_HxCh?+PToyBSaNcx=A!^<0I$zMtE( z|K~Em!%u#43;vyJ{N}hzzPN<0WPNqp{g}zll;z8*ET1KP^uY-nDsP5xwx90gclXrV zQ)^Rq{Kby@G5_ngMZqf9`!Or|57K^@y7SF?o1tS{T?g4;)u(ld;xyMup3iXY=ilk- z-0JyB8ZfiRMyQOf%082{vu(qE)ScUTrfpFE{O*3;&!i3eRcE!Flk{mff7N&PJ3Mom z2I%>I*I6y^)M@HJdBF9nEi+u({Z-p~P~nr?RZjXr)mbffyZUGDqxw%#&sKjkBv#vb zkm0Xq{a^3?Z&$xyqGtyQca?pTYrDVuqW+ofDkuFU*FpDxhwA<4AYq{Xo$l`>84d~t zr>i?ZKL{A)vUhvm&o;bqx0PJVae|UhbKjnUIzy2i1Ro1Z+UX*z9TWKC8{MiiWz4|Ha_5IwQ2XkJq z@MP+BoAKmqYY?8i|LD}S9w6TrNd4T}&mqopuwP`thY~+d27TR*o|N>y)n3nIbtd<{ zzCW%j=*ZMpUi0Mtgr*@5cC0(Q*dAWJ)NKsM*>)Wge%y8Ryaxz=>!6o>hC2TbuG`Q{RKNcI%N23g?-xk> zPbqzzx?QN$OA>rCJ(#+4XE^P3f6QLr&;8l|{WZW>-}v|j`P<44vYV!t%UCWxomz-PiWX4_?kuK=7)!Qn%{g z{Pzz$f7}-7oAX7yqzef?nJ!EvIBosb{pq`>={r^XW_J>NKX~->-yn1$uZwIqPTQqx z+_k?Z_j7D_%4cZAy~K}%4;eplxl;*may;KT;I+LnKU~Q1GrjNi{c(M1O=cuGYQM`MtiM+qM7uCPbS*y=(fL z+wqNd*SKrnM5aG^-^6CUB-;(9vK=9^Xo=eCeHfMe56X@F*8NN&FvAO5U1wU(ndDb} z@^>mubDiY*4A*}CovzNUo}Z)vGka`=%Gj#xGf6w!Hta{;xt(X)2IbH1?$`ZH+OS`B zR?9g_pLX+CeP_SJGpA{Qp6_>^)$&fArv8%$T))~f!?oRCwXFvgKDk}xq#snB)pED1 zf95`_{}lCX^*2LewVekU{(9E`_3r<6^$R9?c93va*(bTS`@1jdpV_W*(ob?7bpLm# z-j5Cv2I}AG{!WtNpkQ#iy7TjcfI%*MxA*;Q!y9*7>85=9(T20FJ2ypbINNsQGWL3( zNp09|JNDY=o!VP%ONNc^2U+J%?fKTTJwPDu!yglv1xH8sPa=UJO|G}Ln{O!4t)7>%D$bR!*xKE|_-JkYhyyPs#>7e#uOw}4k zZ+qC`E2gea>tr{i`(u0m;Xgv5rqaC%@`JR49oTuosegH$b1L<-+OKN({^sxWHS3($ zq;a}#a{g8OaAx5TV9VBZU$1kj&I344IKd~cQ%t>hXE^QEUum!J=ds#{gL%}#gGd;86&aW2O_&5x;s51Y%_tH07--_PyYe}5;9`vd4a;WW;9+%sIaoA-P5 zSK90QxqbWZ@1$|R^5{Q20M@PL@09zwYk#N2_p=<3$05r=g(3(4Q z8NTwyxo2}0p!}Wg+G0QE)cNz@qkT5z{cwt>d+x_>@8>@84Oe`4`c81@zLo=Ce?_hK z66(E*OZ9L5`$?W(zD4@xd=W4CL4wa_y0G4`9*)4vY&D^cx+Fsw!W$nK|i{{?)uIE>7$2ZztbV2?sSXTa|q#X=e+I{ir*)^Gw^I{Q2Ge zx}QlK_N&fnIfCbI{;KcncldNLI0(2``=I%|)8BsLT(#b6cqbTC^Bq)pCpp0#0AYgF1IyXPx&o=A^?wjjZd_UT7wsq(Bs10Y^j$FoG@0zn`(vH3M zd8hVP+mhR)`$5*ZQ+vMkY!48~{wMd|b+-N|x3>GkgE$4WR=e&j{2By`J^7zp5ccj2 z(rZ3&aQ-Kl-*@*%KG|>Vf0EjFfAT-M{w&7np!`qDb3iXj>lT;B{hH)=lJ8Z(?{*lf z@9Z{wVE!kme|g<$D)n=_cHQs&PcBL0^}@;dw_SfupRRRFUHA36lj=MG|C0otysj|y z{GH*nSO1Z{zMseEf$o2@6}`!@+37BNZ~v1t&gHnL`7xF7VRIRK^&i>m`?)>e@;}Lt zIJ0{>?rEI!xaU%~oA-P5AKB~sxqS!ae{$XfV4eB#05SJ-*ZwDo?`Jt6kHb`w4|2S` z-`~GyJ(J{sE7Sez$$Qz4T?W4CzGt1_lj*|L6+6oTXM2ir2Jc?q&*dD{_pGmZ0MLa; z0mR(T?0@o)Ph5EElV145%bxIC-+SrAIp7H&O8m(4DB(>Wk9^nVhM@RPhJ?g!_pWC

pa)W6So_o&4B7$CqKIKDhJutpCSmKekH#gS6jey!vLmKl;g!oO$#) zkD7VplO8ei@b7!r%y&L!YG&$D51l#4zCPi+@0)q?+Lfnf?|x`H*$^CB2=$Dp?jepWBHon*^)_!HB82sYx#mX1j z#r&s!wD{4Vxs`Ujq_|@J1;uk;d0z39tA3z(^2`(Wr5%^P>iH+{_^lJg+wOTo@wQX1 zFYfrQ*A;L2(t7b@zczGR)Q+Xk&lb&(y|TFVy*CzDzu~gtQ2jZ@Q?7n;@#M>%=8GSo{F(c<7_PBnx_0R7p?)sfK876P~&2_h7_)Ck1L*t{bD2~1BCB@9@^NZDqpWMy-_^Cg*tN8H0{K?{@fBI8g?<+pSU2(PLr@!*B zZ+}s7Ne38QlVR|L;(LGSvB(PB|6RXu&B>4d`A-+0{L2rO*C+nsgN4#^8w3Z9#ZQ3` zKk@r-^EkYfad_iztOA1-!=Ux?QUXF`F)- z48X%R#$XxRsJZykcf7cG!ODfkfhVQ@KW-ZwIPbz|&IsPB`}2Q$x3ACr?Z-+uWEcn! zs$*b0{N1;h9%wGEe=+94?A^zUTi$(Lap~Za;u+UHrBMC34O?NL>Q`S?XRcrO&(a>H zXFRBm!TbN{orUOu=7DhldL%y4`?-0~!&~2TgK_YgH$1g?(hI4dYp4E4{dZ5aLGZ|9 zAUv$r{{ia%N$MAE);tsriWa^0=NF3hCtq!PeEHf7ii!H4yZsz|{U=AKHut|;zi?pJ z^?xGjpBX(r;QxZhyZ?`P^21MV1%IWz?i19%)A(=de}@0Nwt#=@fHQ%?` z^*Q)Y;(^e9)80RNm*tU=1A+%<+Iu^+_thV~#kBv~$DUC<@sjT=pt*0{T>ft2s~_u~ z(s--iANkWP1BmyH>8@nMlfN;hdx3Y?7KfY9HNAV(Qyy_vb?5dCKD=~l@R8+HV;Sf! z<6KGeDl}(KGzXgZBd@)g*vb#A^t{qR#~R(^W^)H2skfN$@F--zBy?vM;B zIaoaRwx7Dm^!^FwfA609yt)2r{Hf=kGt+$c@l*A8+;-~t+iy8_%bRXE^^*0gPW|9D z&pNO=tMz{?yuT2*_3B#f-iNRc@2=7R&^a?Nr1&$j3*3736?5H{;kh@r=SNG8v-mve z4&Axo4E&>B*c^41hMg6R`rrEd76iTpfp0;;5YR~lQxLR!fB%mECi?bK!e>I?EZ6nOoUYvSUUQ?{m&?xfY{gYxhWY2yx>1hj{P~{Slk3mz zxihsVxAS!Exp$lPJn}1_y(hOv_j`BQo?L%!&(z1#c;t3%GcLJb3yrPe^M$WG?(*Co z!R#M)*`8c~ZqJ>mJ-MBygU?iR>-K0ZE4N2&|NM*I=5tMyw$)!AuUvm_&s2g(Zs+OR z^Z8x0M{T%sm+i^*=l0~b=XRd1J=e^h9zGhc^<*t<1)f}?`1Fh_Ahh$nm^L7 z_?ko#9{iApJm^6H;5A?Q+sovqf8@wpW(1F0U-s5Y{(H+XPt1<4|nQ|=5~~G?-e<$zT|MF4vnv)+l@=63(B-z zU-F!;_T?*o^hZCE>&apDC5Q7f-FNDX=tATbjzw5~$>B}qIJ#9|rg)NRiZZD$gW1MX zn|mIUObhPs{m8UvyMAOEa)0kfreTx)c$UY*vO%KdA7QXGUYq|iPtG(~W30dQEqfoi zHP`Jg4&u-Lej3CS+ED1VqsH*~1+T6Rbu6#~#!3QZxW3lz z%r8(|SH7^?SQ@o!^k=r?uRE6I#)Iizx3j`0ipw}UtOD~xX!S> zT<^E%+8moa+peq3ak_ZLQlx!t){eh-pVK32q)iKky$0W|D=QuZEUDDb`rTgL9hxqy z1|rHm?6e0oVA$<9=4nZPv@-0dNh|HOPKz<`G;7n1!Js{io&^jpdUb6ysC8z$D|Ipf z*~Zdry46S2)UA*B2z$LZ8Z6}G#vCxNBoEsD)@FS)QZ?1KbXVK`ey7#0Q+L17->6M@ z`<;1JG~L^%cUA_&29R^p^cbXSERG>sQ@***QriRJ<{mo#FoUKv!KmJ74vt6CbUM76 z`|M)7r5rVer$;5N_IizW2w|KI*sIahw0bTy6_}GdEf3=HivZM`Mt(s*LL%K~7aA+` z?N(iYrZdYu;|5S1IxycG4Vi+Ye%sM*v({v=7d?E9R)4nJY6mJFI(!K@)$DP#PYg8` z`m;k}qi(B>zTY59!-us_uUn(kexp|d2bUXz#oAy=Q1--$5Hn|X)YlA{ZuL97=4e~L zwZTGnZLz&kTc&X;tJe(_JETVT+e@JPD$wf=+e_``ng(^%6DlT*%I}vo^)+j!8!adS z=%`Zl(qPy>euTmt?wn{xw`T z%%@{|&32c2!U&JRpr*XwJiVf$gZ9#rIyhS+G+SGCsRLC%Xtx(@bKTj|px){vq?==+ z^pwanWyb4sk%RWipxdwYAp$|qbgQk5mg~)>286D*0L`mI9G5!7jhaafWn$?Ym&!Z> z*z^N}P*znZ1o#!X;?L0b(n+)uD$_kcjhS3w+-a=)?E1f&O@6`_+N2#z15x5$S^Uw zbAYGDBvo2XR}~(OuNqI|+W_!ugdV01oy8zNuDAo}Ts@_nGm}GrshMVD{ zQn;=N@-F) zO#p2$WG=L7OgRuizZ?EF#Z)vZAYjz=v)S%ax33}_gWkG+Hfm1d3kXbGrWCgG`9aO- zSoeh0(5b!wIBmKFT0tbC`%K$lF$xYMlbEnj*6hQO>%^jc5e+Kh26yKM$B!`T8h!3e^BS^T ztGgVeCi<(KOEpi)p8H-~Tjgm4L z==)BlL9aclq~%WESq#U>J2$6$&d^@&3>9B!^fggwAtGqJW69IiHI|!tM!7jVK`_b> z2|A~8v>*byLnMZP-vy>@;slBZomXgfX|(M2wqV*ySnRAU=6gy)h@4+g8nY~wJ>PGv zLi?4t)R}Xc0?F@KZjCjSt zn28bYtjrvoYM(aYyEppcD=g3c2Y@5~t(txL9Ew z!oUbeP_v^9ZH$8_QV@nm!v>?3M8Fw2;A7gd&{*nPP44yUBumV5t1r^X%r?M1=?0B; zBUhO~tGg@u-cQakN47FDYvk25p_cSwin!zX$spR5qeJ+|qA5?S1Bf+`R=bc|*$BHDJG<7-61q_^FwL!Xd)K6QIiIeh*2}Ti|u-UzS&S$!Q`bf zvfNoO!%5wa+)NInFXxS*awc4Zyth<;f^iv5WVDQXI!iPfr%3R$cohRM9wkfNJ?Efz0gJY5M{|ZdYyG+R9Qt#0UDdSo!Sgo=2wtFv71P>7)MLd-W<~U@$3e8fV#+J zgnYpRZAHd%WauTI&ep@PLztfQGBk? z;vmX)ZB7=0xh1I|a|@o8>l=PpYi%InsI?m63(r4(A&`{yMCzQ#fJW2dUcUoI0F_lz z>!Ba?AhC>42w)aJBV~38d=BvwmgYc~;f4#6Kf6mZa3FgMqot=L+Conjx~&umW}PDL zkJ@-dJXg}0t8%3XsDQDJ`h)5@-(ysSS86qyjPhc9=*^+fH&NCRGxL)$0tM4-k&+dN5b`L4xF9nPlVgn)S>sHS z(?wIF>tXS;K0n=T43Y6d-d}BtMvLY)5MFA@sJC#aws5#Mcc?bU?-8_KMheN@awq1M z8Z-_Kctk2%We3nTMl=9ZNDFD$xL`4bQdK@<>6t7L3h~gDdMm@h$iJ(M$N&lvw^j5! zbcj*hR;}cZ{EGo|aRrh-O7~UiF+)UeMxd9(oE*a_gVAZd2CrJFt<@IL;QN@q1k?yM z+p7rNjFGh52r&t}Db8`o)O80z&6QD&UmJR4KAT(Wt}zLrjpON!iWALq zl6z4P5)~~|b`6%0F}UFZNLdRGwFZboup2GO@-tdm2vhDl`tJsp-ip>@MnMq=n+Zq^ z;HSPO=t{xiM-Y|6Q*ExX+*#TPMRL_C)4l<9-#h8vBrt3Wk(*rvf?b0 zP|9g!({EjdF|1nZUYJT{?QL~d>$6bEX(Kb7IHxfAhFFk5m)dL#wuZ5;?%^wAZ46uE zXG>k|PUSPqJu*~udjNsy-dxR7b9%4@6e$W6QCVjwZaev-#LeS{$27ffOgs3 zT`~96WI}E;cQ?A!P6nA#ly=~8bHG38@bQF*qyTJ%p3veK0-8BMjCC4vSmLNTKt42~ z^Ar#@?zfFatKD_TMk2zMltv5PA2SfFEamjv9c(PaeK3rxYFQozAq5kZjdN3CS~m$4 zJPh1>GW3sDA+ZuY0IP^?u>0C*MVLUMsQZe4n~A=!qJ$s?%Nhg60{3E;uhw7}{f_b* zm~*vG4U^G@aOZ(nX=Dh1dQZ33G=)=PL3s2M4T)BSafK`pA5An(jq|1z89e*EXV<1- zC@9pmRrH?=YVDTI;H_#7>cqyhp6QR2>X+&LG5`iFRSS+VQ zdX(`p$&o-mL`(ur97nbEMQ^{nfe# zR7X}mmWy1EV3P`;MavWdOo!yC)(s>lBvBZ`iYbG6B}v}%3R^?4*J$HXXE`OKEik3f ztPzeh;ZroG!!TJwupQBk4*qC;EKLfdXA@ratV=Ro14T?d3Hda5d9Y5~%4nd~Dh6r3 z-y5R|oP*VY<&ynlDqfaiKW%P2jrK^Xpr_dk6rY#`-sKJgkdQt2tH`R@l9t3|gzsWI zKXg8mkp+culI)K>v>lQ=Hf(tSV8hl8vtJuyJ}g!}#KZ-Vut;aJQTM<_S5hAUl3He1 z#Yhtb>{jbRG&Mv8Qkrp0E3BZ}MlDGJ*f;u?I7EPC9HS^(nA}+nH3Gt1J9=)8WD;p> zHj`ZR9#oNxK_AxT_&yIIT$_>83@@t+V$9LkbID})zB-;SY{%;KBlrS=Sl zF%ZBt8T86{00)Z%3(T=-F(x1;cAFEiP0q5;l~z+l{DzENZD|#P!7^fRs8BE-g=n=O zb9g9Qc@ZF-V^_95k)(-M~uH5v!&tMfTFyCh<> z(p_0*y=jgamHCPVrD}S~eElTEn8XNDBsf8e(3miIK)R%VvNTe6npa*cTu-DM+6Ce= zv&E8wZ?}6{9AHu^g2M}|c@$&4R>q6z?rggOd+;r&5JUpC))=ORqaF*GA{;pl4l%@X z5R&2=IE2c8E+YBRswCb7^)<}P09%F%1<_WLr6;0ezT>Cn7uaZV4@sCh*KI7*ALgON zM01%wR0raX{(n2x&o#sg>>d3csu28Pu}o|>7Uj;s1XoC^pF1U`HmyjiY|B>VS{1Cc zu`!wCm$Wp8oR5$j%4x77$XyB``>LI`J|_MY3*kA!l9>cLCz^veHtaf_&HW*TA}t_q zgzy0V+2tsSsnfHP3@t*{8ZA6FN?8keyb`mP1QO7FxUOTHG1-YyBP@CBZHz| zRV31gNlBGx8YSta2>~^~RO+&2LY7oZ_*Pm`Z@BN(lx9w;^ts;9RIMg75m9J?X1@aH z8_6^S!-EK{iyEY18b<@15@OPGrbePeQ1Yt{cNNvB zq7C5}v;sPY94(_oMYcg!lsO(r(+0Ygc}txRt7b8n&a74%SR-sT(hccf5~>uA_R_Fn zjRR5|+$gFEd63zNl`xzog0&>UMchUFD9bTwyvs^PGtq@QRvO(_Ex)w;qKhGcO9Bot zt3JRL#mGv)Sa|RQ0)AlD?{Vodg<^ytvMj2$f(+q`WpXr!b3}v~T2W!YV(w~CCCDu=5%MUgj#5EGP(Vk${-@yTp=h+W|&MA zU`Z5~hsd1TZ);u}o(egW7GS!8kQ8J%+3~QHuq-0a2i=mAiPTvV!jO2u7I0oLOE4M0 z$>ix0)1#D(LbBl@{uh2nuRs)Jt^{9u1FZc$EFuAYa)JBUrpjm-X0*N*CKdF@K;U|!NW*@oBfezb|$H>|>uD23{<%R!$T*{u^hFyS@Z z5>Zt!7GpJDtF=b8)@ltqg*-&Vz=T^{b|=G^M~3N3Z1_g1x4)DWW}{!XxgaD5e5ma` z!kyW{&Cyc8+L_H^`Men2MYF>NMke`^l&iJptF=gs(hFq&(BuxYogO3v*0L6kX_`5n zn>Yrbdx>vnTELn*j<~ET#vHf1AzjlODlG-|GD{Je+kzU&sA(KZ^de>IAzt~-c|wtv zW<_HF7h~&LXdX z6WV#Be@KzT`Z=N>nc46ol+K9Wq;&`LAn;GDXd_L46tU~vv@CikLO34)TDiL_pw$_c zC{~%E%bK`hK06=F7)-ve#iXOb!w0oc?8PC}@=|o-H7yQMbMo0TF43Pz8L4-I;C?zZ~|GpXIQUA+6Fu21#wp`k<*OkT!UnVO?2JB= zj=^g)q^r+DBdDghMslxVL)gW$EHD9(1l0T zFotYk8<6BOR)r9^8c6GXY0xq R=71i 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 G_kRF#MjD_1 literal 0 HcmV?d00001 diff --git a/labyrinthe/3-arduino/3-labyrinthe-imu.blend b/labyrinthe/3-arduino/3-labyrinthe-imu.blend new file mode 100644 index 0000000000000000000000000000000000000000..ab8ce852d0b6c8eedb9536896e8f281da89ead4d GIT binary patch literal 1153688 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

bIBD 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

L~=$X}fkIfXBb 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 KEAr#1zyAZ&juhko literal 0 HcmV?d00001 diff --git a/labyrinthe/3-arduino/3-labyrinthe-imu.py b/labyrinthe/3-arduino/3-labyrinthe-imu.py new file mode 100644 index 0000000..320e6a8 --- /dev/null +++ b/labyrinthe/3-arduino/3-labyrinthe-imu.py @@ -0,0 +1,214 @@ +import bge # Bibliothèque Blender Game Engine (BGE) +import pyfirmata # Protocole Firmata + +############################################################################### +# 3-labyrinthe-manette.py +# @title: Module (unique) de la scène 3D du labyrinthe à bille pilotable avec la manette +# @project: Blender-EduTech - Tutoriel : Tutoriel 3 Labyrinthe à bille - Interfacer avec une carte Arduino +# @lang: fr +# @authors: Philippe Roy +# @copyright: Copyright (C) 2023 Philippe Roy +# @license: GNU GPL +# +# Commandes déclenchées par UPBGE pour le scène du labyrinthe +# +############################################################################### + +# Récupérer la scène 3D +scene = bge.logic.getCurrentScene() +# print("Objets de la scene : ", scene.objects) # Lister les objets de la scène + +# Constantes + +JUST_ACTIVATED = bge.logic.KX_INPUT_JUST_ACTIVATED +JUST_RELEASED = bge.logic.KX_INPUT_JUST_RELEASED +ACTIVATE = bge.logic.KX_INPUT_ACTIVE + +############################################################################### +# Communication avec la carte Arduino +############################################################################### + +# carte = pyfirmata.Arduino('COM4') # Windows +carte = pyfirmata.Arduino('/dev/ttyACM0') # GNU/Linux +print("Communication Carte Arduino établie") + +# Iterateur pour les entrees +it = pyfirmata.util.Iterator(carte) +it.start() + +# Definition des 4 boutons +bt_haut = carte.get_pin('d:2:i') +bt_bas = carte.get_pin('d:3:i') +bt_gauche = carte.get_pin('d:4:i') +bt_droit = carte.get_pin('d:5:i') + +# led = carte.get_pin('d:13:o') + +############################################################################### +# Gestion de la manette Arduino +############################################################################### + +def manette(cont): + obj = cont.owner # obj est l'objet associé au contrôleur donc 'Plateau' + resolution = 0.01 + + # Bouton haut - Broche 2 + if bt_haut.read() == True and bt_bas.read() == False: + obj.applyRotation((-resolution,0,0), False) + + # Bouton bas - Broche 3 + if bt_haut.read() == False and bt_bas.read() == True: + obj.applyRotation((+resolution,0,0), False) + + # Bouton gauche - Broche 4 + if bt_gauche.read() == True and bt_droit.read() == False: + obj.applyRotation((0, -resolution,0), False) + + # Bouton droit - Broche 5 + if bt_gauche.read() == False and bt_droit.read() == True : + obj.applyRotation((0, resolution,0), False) + +############################################################################### +# Gestion du clavier +############################################################################### + +# Flèches pour tourner le plateau +def clavier(cont): + obj = cont.owner # obj est l'objet associé au contrôleur donc 'Plateau' + # obj = scene.objects['Plateau'] + keyboard = bge.logic.keyboard + resolution = 0.01 + + # Touche ESC -> Quitter + if keyboard.inputs[bge.events.ESCKEY].status[0] == ACTIVATE: + carte.exit() + bge.logic.endGame() + + # Flèche haut - Up arrow + if keyboard.inputs[bge.events.UPARROWKEY].status[0] == ACTIVATE: + obj.applyRotation((-resolution,0,0), False) + + # Flèche bas - Down arrow + if keyboard.inputs[bge.events.DOWNARROWKEY].status[0] == ACTIVATE: + obj.applyRotation((resolution,0,0), False) + + # Flèche gauche - Left arrow + if keyboard.inputs[bge.events.LEFTARROWKEY].status[0] == ACTIVATE: + obj.applyRotation((0, -resolution,0), False) + + # Flèche droit - Right arrow + if keyboard.inputs[bge.events.RIGHTARROWKEY].status[0] == ACTIVATE: + obj.applyRotation((0, resolution,0), False) + +############################################################################### +# Gameplay +############################################################################### + +# Initialisation de la scène +def init(cont): + obj = cont.owner # obj est l'objet associé au contrôleur donc 'Bille' + + # Mémorisation de la position de départ de la bille + obj['init_x']=obj.worldPosition.x + obj['init_y']=obj.worldPosition.y + obj['init_z']=obj.worldPosition.z + + # Cacher le panneau de la victoire et suspendre la physique du panneau cliquable + scene.objects['Panneau victoire'].setVisible(False,True) + scene.objects['Panneau victoire - plan'].suspendPhysics (True) + scene.objects['Bouton fermer'].color = (0, 0, 0, 1) # Noir + +# Cycle (boucle de contrôle de la bille) +def cycle(cont): + obj = cont.owner # obj est l'objet associé au contrôleur donc 'Bille' + obj['z']=obj.worldPosition.z # la propriété z est mis à jour avec la position globale en z de la bille + obj_plateau = scene.objects['Plateau'] # obj_plateau est l'objet 'Plateau' + obj_plateau['rot_x']=obj_plateau.worldOrientation.to_euler().x # propriété 'rot_x' mis à jour avec l'orientation globale en x du plateau + obj_plateau['rot_y']=obj_plateau.worldOrientation.to_euler().y # propriété 'rot_y' mis à jour avec l'orientation globale en y du plateau + obj_plateau['rot_z']=obj_plateau.worldOrientation.to_euler().z # propriété 'rot_z' mis à jour avec l'orientation globale en z du plateau + + # Redémarrer la partie si la bille a chuté et si la panneau victoire n'est pas visible + if obj['z'] < -20 and scene.objects['Panneau victoire'].visible == False: + print ("Chuuuu.....te") + + # Replacement du plateau (tous les angles à 0 en plusieurs fois) + while obj_plateau.worldOrientation.to_euler().x != 0 and obj_plateau.worldOrientation.to_euler().y !=0 and obj_plateau.worldOrientation.to_euler().z !=0 : + obj_plateau.applyRotation((-obj_plateau.worldOrientation.to_euler().x, -obj_plateau.worldOrientation.to_euler().y, -obj_plateau.worldOrientation.to_euler().z), False) + + # Mettre la bille à la position de départ avec une vitesse nulle + obj.worldLinearVelocity=(0, 0, 0) + obj.worldAngularVelocity=(0, 0, 0) + obj.worldPosition.x = obj['init_x'] + obj.worldPosition.y = obj['init_y'] + obj.worldPosition.z = obj['init_z']+0.5 # On repose la bille + +# Victoire (colision de la bille avec l'arrivée) +def victoire(cont): + scene.objects['Panneau victoire'].setVisible(True,True) # Afficher le panneau de la victoire + scene.objects['Panneau victoire - plan'].restorePhysics() # Restaurer la physique du panneau cliquable + start = 1 + end = 100 + layer = 0 + priority = 1 + blendin = 1.0 + mode = bge.logic.KX_ACTION_MODE_PLAY + layerWeight = 0.0 + ipoFlags = 0 + speed = 1 + scene.objects['Panneau victoire'].playAction('Panneau victoireAction', start, end, layer, priority, blendin, mode, layerWeight, ipoFlags, speed) + +# Highlight du bouton Fermer +def victoire_fermer_hl(cont): + obj = cont.owner + + # Activation + if cont.sensors['MO'].status == JUST_ACTIVATED: + obj.color = (1, 1, 1, 1) # Blanc + + # Désactivation + if cont.sensors['MO'].status == JUST_RELEASED: + obj.color = (0, 0, 0, 1) # Noir + +# Fermer le panneau de la victoire (clic) +def victoire_fermer(cont): + if cont.sensors['Click'].status == JUST_ACTIVATED and cont.sensors['MO'].positive: + scene.objects['Panneau victoire'].setVisible(False,True) # Cacher le panneau de la victoire + scene.objects['Panneau victoire - plan'].suspendPhysics (True) # Suspendre la physique du panneau cliquable + scene.objects['Bille']['z']= -21 # On provoque le redémarrage si la bille est ressortie + +############################################################################### +# Gestion du Joystick USB +############################################################################### + +def joystick(cont): + obj = cont.owner + joystickIndex = 0 #int from 0 to 6 + joy = bge.logic.joysticks[joystickIndex] + events = joy.activeButtons + axis = joy.axisValues[0:4] + resolution = 0.01 + + leftStick_x = axis[0]; leftStick_y = axis[1] + rightStick_x = axis[2]; rightStick_y = axis[3] + + #if any button is pressed + # if events: + # print(events) #spit out integer index of pressed buttons + # if 0 in events: + # doSomething() + + # Up + if leftStick_y <-0.1 : + obj.applyRotation((-resolution,0,0), False) + + # Down + if leftStick_y >0.1 : + obj.applyRotation((resolution,0,0), False) + + # Left + if leftStick_x <-0.1 : + obj.applyRotation((0, -resolution,0), False) + + # Right + if leftStick_x >0.1 : + obj.applyRotation((0, resolution,0), False) diff --git a/labyrinthe/3-arduino/3-labyrinthe-imu/3-labyrinthe-imu.ino b/labyrinthe/3-arduino/3-labyrinthe-imu/3-labyrinthe-imu.ino new file mode 100644 index 0000000..0edc433 --- /dev/null +++ b/labyrinthe/3-arduino/3-labyrinthe-imu/3-labyrinthe-imu.ino @@ -0,0 +1,107 @@ +#include "Wire.h" + +/****************************************************************************** + * 3-labyrinthe-imu.ino +# @title: Programme pour la carte Arduino de gestion de centrale inertielle (capteur IMU) + * @project: Blender-EduTech - Tutoriel : Tutoriel 3 Labyrinthe à bille - Interfacer la scène 3D avec une carte Arduino + * @lang: fr + * @authors: Philippe Roy + * @copyright: Copyright (C) 2023 Philippe Roy + * @license: GNU GPL + * + ******************************************************************************/ + +/****************************************************************************** + * I2C + ******************************************************************************/ + +// fr : I2Cdev et MPU6050 doivent être installée comme bibilothèque ou sinon les fichiers .cpp et .h +// des deux classes doivent être inclus dans le chemin du projet +// en : I2Cdev and MPU6050 must be installed as libraries, or else the .cpp/.h files +// for both classes must be in the include path of your project +#include "I2Cdev.h" +#include "MPU6050.h" + +// fr : L'adresse par défault de la classe I2C est 0x68 +// en : Class default I2C address is 0x68 +// specific I2C addresses may be passed as a parameter here +// AD0 low = 0x68 (default for InvenSense evaluation board) +// AD0 high = 0x69 +MPU6050 accelgyro; +I2Cdev I2C_M; + +int16_t ax, ay, az; +int16_t gx, gy, gz; +int16_t mx, my, mz; +float Axyz[3]; +float roll; +float pitch; +float roll_deg; +float pitch_deg; +String roll_txt; +String pitch_txt; + +/****************************************************************************** + * Pupitre + ******************************************************************************/ + +// Adressage de la led Arduino +const int led = 13; // Led de mouvement (onboard) +const int led_com = 10; // Led de communication modele 3d-> arduino + +/****************************************************************************** + * Initialisation + ******************************************************************************/ + +void setup() { + + pinMode(led, OUTPUT); // Led de mouvement + pinMode(led_com, OUTPUT); // Led de communication modele 3d-> arduino + digitalWrite(led, LOW); + digitalWrite(led_com, LOW); + + // Moniteur serie + Serial.begin(115200); // 7 fps + /* Serial.begin(38400); */ // 6 fps + /* Serial.begin(9600); */ // trop lent 2fps + + // I2C + Wire.begin(); + Serial.println("Initialisation des composants I2C."); + accelgyro.initialize(); + } + +/****************************************************************************** + * Boucle principale + ******************************************************************************/ + +void loop() { + + /***** + * Lecture des accelerations + *****/ + + accelgyro.getMotion9(&ax, &ay, &az, &gx, &gy, &gz, &mx, &my, &mz); + Axyz[0] = (double) ax / 16384; + Axyz[1] = (double) ay / 16384; + Axyz[2] = (double) az / 16384; + roll = asin(-Axyz[0]); + roll_deg = roll*57.3; + roll_txt = String(roll_deg); + /* pitch = asin(Axyz[1]/cos(roll)); */ + pitch = -asin(Axyz[1]/cos(roll)); // dépend du positionnement du capteur (X vers la droite, Y vers l'arriere, Z vers le haut) + pitch_deg = pitch*57.3; + pitch_txt = String(pitch_deg); + + /***** + * Communication : Arduino -> modèle 3d + *****/ + + // Serial.println("Roll (Rx): "+ roll_txt + " Pitch (Ry): " + pitch_txt); + Serial.print(roll_txt); + Serial.print(","); + Serial.print(pitch_txt); + Serial.println(); + + /* delay(300); */ +} diff --git a/labyrinthe/3-arduino/3-labyrinthe-imu/GNU GPL-3.txt b/labyrinthe/3-arduino/3-labyrinthe-imu/GNU GPL-3.txt new file mode 100644 index 0000000..e90a2ff --- /dev/null +++ b/labyrinthe/3-arduino/3-labyrinthe-imu/GNU GPL-3.txt @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + ClimWay2 + Copyright (C) 2023 Philippe Roy + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) 2023 Philippe Roy + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/labyrinthe/3-arduino/3-labyrinthe-imu/I2Cdev.cpp b/labyrinthe/3-arduino/3-labyrinthe-imu/I2Cdev.cpp new file mode 100644 index 0000000..7f52fe0 --- /dev/null +++ b/labyrinthe/3-arduino/3-labyrinthe-imu/I2Cdev.cpp @@ -0,0 +1,1466 @@ +// I2Cdev library collection - Main I2C device class +// Abstracts bit and byte I2C R/W functions into a convenient class +// 6/9/2012 by Jeff Rowberg +// +// Changelog: +// 2012-06-09 - fix major issue with reading > 32 bytes at a time with Arduino Wire +// - add compiler warnings when using outdated or IDE or limited I2Cdev implementation +// 2011-11-01 - fix write*Bits mask calculation (thanks sasquatch @ Arduino forums) +// 2011-10-03 - added automatic Arduino version detection for ease of use +// 2011-10-02 - added Gene Knight's NBWire TwoWire class implementation with small modifications +// 2011-08-31 - added support for Arduino 1.0 Wire library (methods are different from 0.x) +// 2011-08-03 - added optional timeout parameter to read* methods to easily change from default +// 2011-08-02 - added support for 16-bit registers +// - fixed incorrect Doxygen comments on some methods +// - added timeout value for read operations (thanks mem @ Arduino forums) +// 2011-07-30 - changed read/write function structures to return success or byte counts +// - made all methods static for multi-device memory savings +// 2011-07-28 - initial release + +/* ============================================ + I2Cdev device library code is placed under the MIT license + Copyright (c) 2012 Jeff Rowberg + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + =============================================== +*/ + +#include "I2Cdev.h" + +#if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE + + #ifdef I2CDEV_IMPLEMENTATION_WARNINGS + #if ARDUINO < 100 + #warning Using outdated Arduino IDE with Wire library is functionally limiting. + #warning Arduino IDE v1.0.1+ with I2Cdev Fastwire implementation is recommended. + #warning This I2Cdev implementation does not support: + #warning - Repeated starts conditions + #warning - Timeout detection (some Wire requests block forever) + #elif ARDUINO == 100 + #warning Using outdated Arduino IDE with Wire library is functionally limiting. + #warning Arduino IDE v1.0.1+ with I2Cdev Fastwire implementation is recommended. + #warning This I2Cdev implementation does not support: + #warning - Repeated starts conditions + #warning - Timeout detection (some Wire requests block forever) + #elif ARDUINO > 100 + /* + #warning Using current Arduino IDE with Wire library is functionally limiting. + #warning Arduino IDE v1.0.1+ with I2CDEV_BUILTIN_FASTWIRE implementation is recommended. + #warning This I2Cdev implementation does not support: + #warning - Timeout detection (some Wire requests block forever) + */ + #endif + #endif + +#elif I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_FASTWIRE + + #error The I2CDEV_BUILTIN_FASTWIRE implementation is known to be broken right now. Patience, Iago! + +#elif I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_NBWIRE + + #ifdef I2CDEV_IMPLEMENTATION_WARNINGS + #warning Using I2CDEV_BUILTIN_NBWIRE implementation may adversely affect interrupt detection. + #warning This I2Cdev implementation does not support: + #warning - Repeated starts conditions + #endif + + // NBWire implementation based heavily on code by Gene Knight + // Originally posted on the Arduino forum at http://arduino.cc/forum/index.php/topic,70705.0.html + // Originally offered to the i2cdevlib project at http://arduino.cc/forum/index.php/topic,68210.30.html + TwoWire Wire; + +#endif + +/** Default constructor. +*/ +I2Cdev::I2Cdev() { +} + +/** Read a single bit from an 8-bit device register. + @param devAddr I2C slave device address + @param regAddr Register regAddr to read from + @param bitNum Bit position to read (0-7) + @param data Container for single bit value + @param timeout Optional read timeout in milliseconds (0 to disable, leave off to use default class value in I2Cdev::readTimeout) + @return Status of read operation (true = success) +*/ +int8_t I2Cdev::readBit(uint8_t devAddr, uint8_t regAddr, uint8_t bitNum, uint8_t* data, uint16_t timeout) { + uint8_t b; + uint8_t count = readByte(devAddr, regAddr, &b, timeout); + *data = b & (1 << bitNum); + return count; +} + +/** Read a single bit from a 16-bit device register. + @param devAddr I2C slave device address + @param regAddr Register regAddr to read from + @param bitNum Bit position to read (0-15) + @param data Container for single bit value + @param timeout Optional read timeout in milliseconds (0 to disable, leave off to use default class value in I2Cdev::readTimeout) + @return Status of read operation (true = success) +*/ +int8_t I2Cdev::readBitW(uint8_t devAddr, uint8_t regAddr, uint8_t bitNum, uint16_t* data, uint16_t timeout) { + uint16_t b; + uint8_t count = readWord(devAddr, regAddr, &b, timeout); + *data = b & (1 << bitNum); + return count; +} + +/** Read multiple bits from an 8-bit device register. + @param devAddr I2C slave device address + @param regAddr Register regAddr to read from + @param bitStart First bit position to read (0-7) + @param length Number of bits to read (not more than 8) + @param data Container for right-aligned value (i.e. '101' read from any bitStart position will equal 0x05) + @param timeout Optional read timeout in milliseconds (0 to disable, leave off to use default class value in I2Cdev::readTimeout) + @return Status of read operation (true = success) +*/ +int8_t I2Cdev::readBits(uint8_t devAddr, uint8_t regAddr, uint8_t bitStart, uint8_t length, uint8_t* data, + uint16_t timeout) { + // 01101001 read byte + // 76543210 bit numbers + // xxx args: bitStart=4, length=3 + // 010 masked + // -> 010 shifted + uint8_t count, b; + if ((count = readByte(devAddr, regAddr, &b, timeout)) != 0) { + uint8_t mask = ((1 << length) - 1) << (bitStart - length + 1); + b &= mask; + b >>= (bitStart - length + 1); + *data = b; + } + return count; +} + +/** Read multiple bits from a 16-bit device register. + @param devAddr I2C slave device address + @param regAddr Register regAddr to read from + @param bitStart First bit position to read (0-15) + @param length Number of bits to read (not more than 16) + @param data Container for right-aligned value (i.e. '101' read from any bitStart position will equal 0x05) + @param timeout Optional read timeout in milliseconds (0 to disable, leave off to use default class value in I2Cdev::readTimeout) + @return Status of read operation (1 = success, 0 = failure, -1 = timeout) +*/ +int8_t I2Cdev::readBitsW(uint8_t devAddr, uint8_t regAddr, uint8_t bitStart, uint8_t length, uint16_t* data, + uint16_t timeout) { + // 1101011001101001 read byte + // fedcba9876543210 bit numbers + // xxx args: bitStart=12, length=3 + // 010 masked + // -> 010 shifted + uint8_t count; + uint16_t w; + if ((count = readWord(devAddr, regAddr, &w, timeout)) != 0) { + uint16_t mask = ((1 << length) - 1) << (bitStart - length + 1); + w &= mask; + w >>= (bitStart - length + 1); + *data = w; + } + return count; +} + +/** Read single byte from an 8-bit device register. + @param devAddr I2C slave device address + @param regAddr Register regAddr to read from + @param data Container for byte value read from device + @param timeout Optional read timeout in milliseconds (0 to disable, leave off to use default class value in I2Cdev::readTimeout) + @return Status of read operation (true = success) +*/ +int8_t I2Cdev::readByte(uint8_t devAddr, uint8_t regAddr, uint8_t* data, uint16_t timeout) { + return readBytes(devAddr, regAddr, 1, data, timeout); +} + +/** Read single word from a 16-bit device register. + @param devAddr I2C slave device address + @param regAddr Register regAddr to read from + @param data Container for word value read from device + @param timeout Optional read timeout in milliseconds (0 to disable, leave off to use default class value in I2Cdev::readTimeout) + @return Status of read operation (true = success) +*/ +int8_t I2Cdev::readWord(uint8_t devAddr, uint8_t regAddr, uint16_t* data, uint16_t timeout) { + return readWords(devAddr, regAddr, 1, data, timeout); +} + +/** Read multiple bytes from an 8-bit device register. + @param devAddr I2C slave device address + @param regAddr First register regAddr to read from + @param length Number of bytes to read + @param data Buffer to store read data in + @param timeout Optional read timeout in milliseconds (0 to disable, leave off to use default class value in I2Cdev::readTimeout) + @return Number of bytes read (-1 indicates failure) +*/ +int8_t I2Cdev::readBytes(uint8_t devAddr, uint8_t regAddr, uint8_t length, uint8_t* data, uint16_t timeout) { + #ifdef I2CDEV_SERIAL_DEBUG + Serial.print("I2C (0x"); + Serial.print(devAddr, HEX); + Serial.print(") reading "); + Serial.print(length, DEC); + Serial.print(" bytes from 0x"); + Serial.print(regAddr, HEX); + Serial.print("..."); + #endif + + int8_t count = 0; + uint32_t t1 = millis(); + + #if (I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE) + + #if (ARDUINO < 100) + // Arduino v00xx (before v1.0), Wire library + + // I2C/TWI subsystem uses internal buffer that breaks with large data requests + // so if user requests more than BUFFER_LENGTH bytes, we have to do it in + // smaller chunks instead of all at once + for (uint8_t k = 0; k < length; k += min(length, BUFFER_LENGTH)) { + Wire.beginTransmission(devAddr); + Wire.send(regAddr); + Wire.endTransmission(); + Wire.beginTransmission(devAddr); + Wire.requestFrom(devAddr, (uint8_t)min(length - k, BUFFER_LENGTH)); + + for (; Wire.available() && (timeout == 0 || millis() - t1 < timeout); count++) { + data[count] = Wire.receive(); + #ifdef I2CDEV_SERIAL_DEBUG + Serial.print(data[count], HEX); + if (count + 1 < length) { + Serial.print(" "); + } + #endif + } + + Wire.endTransmission(); + } + #elif (ARDUINO == 100) + // Arduino v1.0.0, Wire library + // Adds standardized write() and read() stream methods instead of send() and receive() + + // I2C/TWI subsystem uses internal buffer that breaks with large data requests + // so if user requests more than BUFFER_LENGTH bytes, we have to do it in + // smaller chunks instead of all at once + for (uint8_t k = 0; k < length; k += min(length, BUFFER_LENGTH)) { + Wire.beginTransmission(devAddr); + Wire.write(regAddr); + Wire.endTransmission(); + Wire.beginTransmission(devAddr); + Wire.requestFrom(devAddr, (uint8_t)min(length - k, BUFFER_LENGTH)); + + for (; Wire.available() && (timeout == 0 || millis() - t1 < timeout); count++) { + data[count] = Wire.read(); + #ifdef I2CDEV_SERIAL_DEBUG + Serial.print(data[count], HEX); + if (count + 1 < length) { + Serial.print(" "); + } + #endif + } + + Wire.endTransmission(); + } + #elif (ARDUINO > 100) + // Arduino v1.0.1+, Wire library + // Adds official support for repeated start condition, yay! + + // I2C/TWI subsystem uses internal buffer that breaks with large data requests + // so if user requests more than BUFFER_LENGTH bytes, we have to do it in + // smaller chunks instead of all at once + for (uint8_t k = 0; k < length; k += min(length, BUFFER_LENGTH)) { + Wire.beginTransmission(devAddr); + Wire.write(regAddr); + Wire.endTransmission(); + Wire.beginTransmission(devAddr); + Wire.requestFrom(devAddr, (uint8_t)min(length - k, BUFFER_LENGTH)); + + for (; Wire.available() && (timeout == 0 || millis() - t1 < timeout); count++) { + data[count] = Wire.read(); + #ifdef I2CDEV_SERIAL_DEBUG + Serial.print(data[count], HEX); + if (count + 1 < length) { + Serial.print(" "); + } + #endif + } + + Wire.endTransmission(); + } + #endif + + #elif (I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_FASTWIRE) + // Fastwire library (STILL UNDER DEVELOPMENT, NON-FUNCTIONAL!) + + // no loop required for fastwire + uint8_t status = Fastwire::readBuf(devAddr, regAddr, data, length); + if (status == 0) { + count = length; // success + } else { + count = -1; // error + } + + #endif + + // check for timeout + if (timeout > 0 && millis() - t1 >= timeout && count < length) { + count = -1; // timeout + } + + #ifdef I2CDEV_SERIAL_DEBUG + Serial.print(". Done ("); + Serial.print(count, DEC); + Serial.println(" read)."); + #endif + + return count; +} + +/** Read multiple words from a 16-bit device register. + @param devAddr I2C slave device address + @param regAddr First register regAddr to read from + @param length Number of words to read + @param data Buffer to store read data in + @param timeout Optional read timeout in milliseconds (0 to disable, leave off to use default class value in I2Cdev::readTimeout) + @return Number of words read (0 indicates failure) +*/ +int8_t I2Cdev::readWords(uint8_t devAddr, uint8_t regAddr, uint8_t length, uint16_t* data, uint16_t timeout) { + #ifdef I2CDEV_SERIAL_DEBUG + Serial.print("I2C (0x"); + Serial.print(devAddr, HEX); + Serial.print(") reading "); + Serial.print(length, DEC); + Serial.print(" words from 0x"); + Serial.print(regAddr, HEX); + Serial.print("..."); + #endif + + int8_t count = 0; + uint32_t t1 = millis(); + + #if (I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE) + + #if (ARDUINO < 100) + // Arduino v00xx (before v1.0), Wire library + + // I2C/TWI subsystem uses internal buffer that breaks with large data requests + // so if user requests more than BUFFER_LENGTH bytes, we have to do it in + // smaller chunks instead of all at once + for (uint8_t k = 0; k < length * 2; k += min(length * 2, BUFFER_LENGTH)) { + Wire.beginTransmission(devAddr); + Wire.send(regAddr); + Wire.endTransmission(); + Wire.beginTransmission(devAddr); + Wire.requestFrom(devAddr, (uint8_t)(length * 2)); // length=words, this wants bytes + + bool msb = true; // starts with MSB, then LSB + for (; Wire.available() && count < length && (timeout == 0 || millis() - t1 < timeout);) { + if (msb) { + // first byte is bits 15-8 (MSb=15) + data[count] = Wire.receive() << 8; + } else { + // second byte is bits 7-0 (LSb=0) + data[count] |= Wire.receive(); + #ifdef I2CDEV_SERIAL_DEBUG + Serial.print(data[count], HEX); + if (count + 1 < length) { + Serial.print(" "); + } + #endif + count++; + } + msb = !msb; + } + + Wire.endTransmission(); + } + #elif (ARDUINO == 100) + // Arduino v1.0.0, Wire library + // Adds standardized write() and read() stream methods instead of send() and receive() + + // I2C/TWI subsystem uses internal buffer that breaks with large data requests + // so if user requests more than BUFFER_LENGTH bytes, we have to do it in + // smaller chunks instead of all at once + for (uint8_t k = 0; k < length * 2; k += min(length * 2, BUFFER_LENGTH)) { + Wire.beginTransmission(devAddr); + Wire.write(regAddr); + Wire.endTransmission(); + Wire.beginTransmission(devAddr); + Wire.requestFrom(devAddr, (uint8_t)(length * 2)); // length=words, this wants bytes + + bool msb = true; // starts with MSB, then LSB + for (; Wire.available() && count < length && (timeout == 0 || millis() - t1 < timeout);) { + if (msb) { + // first byte is bits 15-8 (MSb=15) + data[count] = Wire.read() << 8; + } else { + // second byte is bits 7-0 (LSb=0) + data[count] |= Wire.read(); + #ifdef I2CDEV_SERIAL_DEBUG + Serial.print(data[count], HEX); + if (count + 1 < length) { + Serial.print(" "); + } + #endif + count++; + } + msb = !msb; + } + + Wire.endTransmission(); + } + #elif (ARDUINO > 100) + // Arduino v1.0.1+, Wire library + // Adds official support for repeated start condition, yay! + + // I2C/TWI subsystem uses internal buffer that breaks with large data requests + // so if user requests more than BUFFER_LENGTH bytes, we have to do it in + // smaller chunks instead of all at once + for (uint8_t k = 0; k < length * 2; k += min(length * 2, BUFFER_LENGTH)) { + Wire.beginTransmission(devAddr); + Wire.write(regAddr); + Wire.endTransmission(); + Wire.beginTransmission(devAddr); + Wire.requestFrom(devAddr, (uint8_t)(length * 2)); // length=words, this wants bytes + + bool msb = true; // starts with MSB, then LSB + for (; Wire.available() && count < length && (timeout == 0 || millis() - t1 < timeout);) { + if (msb) { + // first byte is bits 15-8 (MSb=15) + data[count] = Wire.read() << 8; + } else { + // second byte is bits 7-0 (LSb=0) + data[count] |= Wire.read(); + #ifdef I2CDEV_SERIAL_DEBUG + Serial.print(data[count], HEX); + if (count + 1 < length) { + Serial.print(" "); + } + #endif + count++; + } + msb = !msb; + } + + Wire.endTransmission(); + } + #endif + + #elif (I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_FASTWIRE) + // Fastwire library (STILL UNDER DEVELOPMENT, NON-FUNCTIONAL!) + + // no loop required for fastwire + uint16_t intermediate[(uint8_t)length]; + uint8_t status = Fastwire::readBuf(devAddr, regAddr, (uint8_t*)intermediate, (uint8_t)(length * 2)); + if (status == 0) { + count = length; // success + for (uint8_t i = 0; i < length; i++) { + data[i] = (intermediate[2 * i] << 8) | intermediate[2 * i + 1]; + } + } else { + count = -1; // error + } + + #endif + + if (timeout > 0 && millis() - t1 >= timeout && count < length) { + count = -1; // timeout + } + + #ifdef I2CDEV_SERIAL_DEBUG + Serial.print(". Done ("); + Serial.print(count, DEC); + Serial.println(" read)."); + #endif + + return count; +} + +/** write a single bit in an 8-bit device register. + @param devAddr I2C slave device address + @param regAddr Register regAddr to write to + @param bitNum Bit position to write (0-7) + @param value New bit value to write + @return Status of operation (true = success) +*/ +bool I2Cdev::writeBit(uint8_t devAddr, uint8_t regAddr, uint8_t bitNum, uint8_t data) { + uint8_t b; + readByte(devAddr, regAddr, &b); + b = (data != 0) ? (b | (1 << bitNum)) : (b & ~(1 << bitNum)); + return writeByte(devAddr, regAddr, b); +} + +/** write a single bit in a 16-bit device register. + @param devAddr I2C slave device address + @param regAddr Register regAddr to write to + @param bitNum Bit position to write (0-15) + @param value New bit value to write + @return Status of operation (true = success) +*/ +bool I2Cdev::writeBitW(uint8_t devAddr, uint8_t regAddr, uint8_t bitNum, uint16_t data) { + uint16_t w; + readWord(devAddr, regAddr, &w); + w = (data != 0) ? (w | (1 << bitNum)) : (w & ~(1 << bitNum)); + return writeWord(devAddr, regAddr, w); +} + +/** Write multiple bits in an 8-bit device register. + @param devAddr I2C slave device address + @param regAddr Register regAddr to write to + @param bitStart First bit position to write (0-7) + @param length Number of bits to write (not more than 8) + @param data Right-aligned value to write + @return Status of operation (true = success) +*/ +bool I2Cdev::writeBits(uint8_t devAddr, uint8_t regAddr, uint8_t bitStart, uint8_t length, uint8_t data) { + // 010 value to write + // 76543210 bit numbers + // xxx args: bitStart=4, length=3 + // 00011100 mask byte + // 10101111 original value (sample) + // 10100011 original & ~mask + // 10101011 masked | value + uint8_t b; + if (readByte(devAddr, regAddr, &b) != 0) { + uint8_t mask = ((1 << length) - 1) << (bitStart - length + 1); + data <<= (bitStart - length + 1); // shift data into correct position + data &= mask; // zero all non-important bits in data + b &= ~(mask); // zero all important bits in existing byte + b |= data; // combine data with existing byte + return writeByte(devAddr, regAddr, b); + } else { + return false; + } +} + +/** Write multiple bits in a 16-bit device register. + @param devAddr I2C slave device address + @param regAddr Register regAddr to write to + @param bitStart First bit position to write (0-15) + @param length Number of bits to write (not more than 16) + @param data Right-aligned value to write + @return Status of operation (true = success) +*/ +bool I2Cdev::writeBitsW(uint8_t devAddr, uint8_t regAddr, uint8_t bitStart, uint8_t length, uint16_t data) { + // 010 value to write + // fedcba9876543210 bit numbers + // xxx args: bitStart=12, length=3 + // 0001110000000000 mask byte + // 1010111110010110 original value (sample) + // 1010001110010110 original & ~mask + // 1010101110010110 masked | value + uint16_t w; + if (readWord(devAddr, regAddr, &w) != 0) { + uint8_t mask = ((1 << length) - 1) << (bitStart - length + 1); + data <<= (bitStart - length + 1); // shift data into correct position + data &= mask; // zero all non-important bits in data + w &= ~(mask); // zero all important bits in existing word + w |= data; // combine data with existing word + return writeWord(devAddr, regAddr, w); + } else { + return false; + } +} + +/** Write single byte to an 8-bit device register. + @param devAddr I2C slave device address + @param regAddr Register address to write to + @param data New byte value to write + @return Status of operation (true = success) +*/ +bool I2Cdev::writeByte(uint8_t devAddr, uint8_t regAddr, uint8_t data) { + return writeBytes(devAddr, regAddr, 1, &data); +} + +/** Write single word to a 16-bit device register. + @param devAddr I2C slave device address + @param regAddr Register address to write to + @param data New word value to write + @return Status of operation (true = success) +*/ +bool I2Cdev::writeWord(uint8_t devAddr, uint8_t regAddr, uint16_t data) { + return writeWords(devAddr, regAddr, 1, &data); +} + +/** Write multiple bytes to an 8-bit device register. + @param devAddr I2C slave device address + @param regAddr First register address to write to + @param length Number of bytes to write + @param data Buffer to copy new data from + @return Status of operation (true = success) +*/ +bool I2Cdev::writeBytes(uint8_t devAddr, uint8_t regAddr, uint8_t length, uint8_t* data) { + #ifdef I2CDEV_SERIAL_DEBUG + Serial.print("I2C (0x"); + Serial.print(devAddr, HEX); + Serial.print(") writing "); + Serial.print(length, DEC); + Serial.print(" bytes to 0x"); + Serial.print(regAddr, HEX); + Serial.print("..."); + #endif + uint8_t status = 0; + #if ((I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE && ARDUINO < 100) || I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_NBWIRE) + Wire.beginTransmission(devAddr); + Wire.send((uint8_t) regAddr); // send address + #elif (I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE && ARDUINO >= 100) + Wire.beginTransmission(devAddr); + Wire.write((uint8_t) regAddr); // send address + #endif + for (uint8_t i = 0; i < length; i++) { + #if ((I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE && ARDUINO < 100) || I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_NBWIRE) + Wire.send((uint8_t) data[i]); + #elif (I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE && ARDUINO >= 100) + Wire.write((uint8_t) data[i]); + #elif (I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_FASTWIRE) + status = Fastwire::write(devAddr, regAddr, data[i]); + Serial.println(status); + #endif + #ifdef I2CDEV_SERIAL_DEBUG + Serial.print(data[i], HEX); + if (i + 1 < length) { + Serial.print(" "); + } + #endif + } + #if ((I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE && ARDUINO < 100) || I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_NBWIRE) + Wire.endTransmission(); + #elif (I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE && ARDUINO >= 100) + status = Wire.endTransmission(); + #endif + #ifdef I2CDEV_SERIAL_DEBUG + Serial.println(". Done."); + #endif + return status == 0; +} + +/** Write multiple words to a 16-bit device register. + @param devAddr I2C slave device address + @param regAddr First register address to write to + @param length Number of words to write + @param data Buffer to copy new data from + @return Status of operation (true = success) +*/ +bool I2Cdev::writeWords(uint8_t devAddr, uint8_t regAddr, uint8_t length, uint16_t* data) { + #ifdef I2CDEV_SERIAL_DEBUG + Serial.print("I2C (0x"); + Serial.print(devAddr, HEX); + Serial.print(") writing "); + Serial.print(length, DEC); + Serial.print(" words to 0x"); + Serial.print(regAddr, HEX); + Serial.print("..."); + #endif + uint8_t status = 0; + #if ((I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE && ARDUINO < 100) || I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_NBWIRE) + Wire.beginTransmission(devAddr); + Wire.send(regAddr); // send address + #elif (I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE && ARDUINO >= 100) + Wire.beginTransmission(devAddr); + Wire.write(regAddr); // send address + #endif + for (uint8_t i = 0; i < length * 2; i++) { + #if ((I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE && ARDUINO < 100) || I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_NBWIRE) + Wire.send((uint8_t)(data[i++] >> 8)); // send MSB + Wire.send((uint8_t)data[i]); // send LSB + #elif (I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE && ARDUINO >= 100) + Wire.write((uint8_t)(data[i++] >> 8)); // send MSB + Wire.write((uint8_t)data[i]); // send LSB + #elif (I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_FASTWIRE) + status = Fastwire::write(devAddr, regAddr, (uint8_t)(data[i++] >> 8)); + status = Fastwire::write(devAddr, regAddr + 1, (uint8_t)data[i]); + #endif + #ifdef I2CDEV_SERIAL_DEBUG + Serial.print(data[i], HEX); + if (i + 1 < length) { + Serial.print(" "); + } + #endif + } + #if ((I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE && ARDUINO < 100) || I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_NBWIRE) + Wire.endTransmission(); + #elif (I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE && ARDUINO >= 100) + status = Wire.endTransmission(); + #endif + #ifdef I2CDEV_SERIAL_DEBUG + Serial.println(". Done."); + #endif + return status == 0; +} + +/** Default timeout value for read operations. + Set this to 0 to disable timeout detection. +*/ +uint16_t I2Cdev::readTimeout = I2CDEV_DEFAULT_READ_TIMEOUT; + +#if I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_FASTWIRE +/* + FastWire 0.2 + This is a library to help faster programs to read I2C devices. + Copyright(C) 2011 Francesco Ferrara + occhiobello at gmail dot com +*/ + +boolean Fastwire::waitInt() { + int l = 250; + while (!(TWCR & (1 << TWINT)) && l-- > 0); + return l > 0; +} + +void Fastwire::setup(int khz, boolean pullup) { + TWCR = 0; + #if defined(__AVR_ATmega168__) || defined(__AVR_ATmega8__) || defined(__AVR_ATmega328P__) + // activate internal pull-ups for twi (PORTC bits 4 & 5) + // as per note from atmega8 manual pg167 + if (pullup) { + PORTC |= ((1 << 4) | (1 << 5)); + } else { + PORTC &= ~((1 << 4) | (1 << 5)); + } + #elif defined(__AVR_ATmega644P__) || defined(__AVR_ATmega644__) + // activate internal pull-ups for twi (PORTC bits 0 & 1) + if (pullup) { + PORTC |= ((1 << 0) | (1 << 1)); + } else { + PORTC &= ~((1 << 0) | (1 << 1)); + } + #else + // activate internal pull-ups for twi (PORTD bits 0 & 1) + // as per note from atmega128 manual pg204 + if (pullup) { + PORTD |= ((1 << 0) | (1 << 1)); + } else { + PORTD &= ~((1 << 0) | (1 << 1)); + } + #endif + + TWSR = 0; // no prescaler => prescaler = 1 + TWBR = ((16000L / khz) - 16) / 2; // change the I2C clock rate + TWCR = 1 << TWEN; // enable twi module, no interrupt +} + +byte Fastwire::write(byte device, byte address, byte value) { + byte twst, retry; + + retry = 2; + do { + TWCR = (1 << TWINT) | (1 << TWEN) | (1 << TWSTO) | (1 << TWSTA); + if (!waitInt()) { + return 1; + } + twst = TWSR & 0xF8; + if (twst != TW_START && twst != TW_REP_START) { + return 2; + } + + TWDR = device & 0xFE; // send device address without read bit (1) + TWCR = (1 << TWINT) | (1 << TWEN); + if (!waitInt()) { + return 3; + } + twst = TWSR & 0xF8; + } while (twst == TW_MT_SLA_NACK && retry-- > 0); + if (twst != TW_MT_SLA_ACK) { + return 4; + } + + TWDR = address; // send data to the previously addressed device + TWCR = (1 << TWINT) | (1 << TWEN); + if (!waitInt()) { + return 5; + } + twst = TWSR & 0xF8; + if (twst != TW_MT_DATA_ACK) { + return 6; + } + + TWDR = value; // send data to the previously addressed device + TWCR = (1 << TWINT) | (1 << TWEN); + if (!waitInt()) { + return 7; + } + twst = TWSR & 0xF8; + if (twst != TW_MT_DATA_ACK) { + return 8; + } + + return 0; +} + +byte Fastwire::readBuf(byte device, byte address, byte* data, byte num) { + byte twst, retry; + + retry = 2; + do { + TWCR = (1 << TWINT) | (1 << TWEN) | (1 << TWSTO) | (1 << TWSTA); + if (!waitInt()) { + return 16; + } + twst = TWSR & 0xF8; + if (twst != TW_START && twst != TW_REP_START) { + return 17; + } + + TWDR = device & 0xfe; // send device address to write + TWCR = (1 << TWINT) | (1 << TWEN); + if (!waitInt()) { + return 18; + } + twst = TWSR & 0xF8; + } while (twst == TW_MT_SLA_NACK && retry-- > 0); + if (twst != TW_MT_SLA_ACK) { + return 19; + } + + TWDR = address; // send data to the previously addressed device + TWCR = (1 << TWINT) | (1 << TWEN); + if (!waitInt()) { + return 20; + } + twst = TWSR & 0xF8; + if (twst != TW_MT_DATA_ACK) { + return 21; + } + + /***/ + + retry = 2; + do { + TWCR = (1 << TWINT) | (1 << TWEN) | (1 << TWSTO) | (1 << TWSTA); + if (!waitInt()) { + return 22; + } + twst = TWSR & 0xF8; + if (twst != TW_START && twst != TW_REP_START) { + return 23; + } + + TWDR = device | 0x01; // send device address with the read bit (1) + TWCR = (1 << TWINT) | (1 << TWEN); + if (!waitInt()) { + return 24; + } + twst = TWSR & 0xF8; + } while (twst == TW_MR_SLA_NACK && retry-- > 0); + if (twst != TW_MR_SLA_ACK) { + return 25; + } + + for (uint8_t i = 0; i < num; i++) { + if (i == num - 1) { + TWCR = (1 << TWINT) | (1 << TWEN); + } else { + TWCR = (1 << TWINT) | (1 << TWEN) | (1 << TWEA); + } + if (!waitInt()) { + return 26; + } + twst = TWSR & 0xF8; + if (twst != TW_MR_DATA_ACK && twst != TW_MR_DATA_NACK) { + return twst; + } + data[i] = TWDR; + } + + return 0; +} +#endif + +#if I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_NBWIRE +// NBWire implementation based heavily on code by Gene Knight +// Originally posted on the Arduino forum at http://arduino.cc/forum/index.php/topic,70705.0.html +// Originally offered to the i2cdevlib project at http://arduino.cc/forum/index.php/topic,68210.30.html + +/* + call this version 1.0 + + Offhand, the only funky part that I can think of is in nbrequestFrom, where the buffer + length and index are set *before* the data is actually read. The problem is that these + are variables local to the TwoWire object, and by the time we actually have read the + data, and know what the length actually is, we have no simple access to the object's + variables. The actual bytes read *is* given to the callback function, though. + + The ISR code for a slave receiver is commented out. I don't have that setup, and can't + verify it at this time. Save it for 2.0! + + The handling of the read and write processes here is much like in the demo sketch code: + the process is broken down into sequential functions, where each registers the next as a + callback, essentially. + + For example, for the Read process, twi_read00 just returns if TWI is not yet in a + ready state. When there's another interrupt, and the interface *is* ready, then it + sets up the read, starts it, and registers twi_read01 as the function to call after + the *next* interrupt. twi_read01, then, just returns if the interface is still in a + "reading" state. When the reading is done, it copies the information to the buffer, + cleans up, and calls the user-requested callback function with the actual number of + bytes read. + + The writing is similar. + + Questions, comments and problems can go to Gene@Telobot.com. + + Thumbs Up! + Gene Knight + +*/ + +uint8_t TwoWire::rxBuffer[NBWIRE_BUFFER_LENGTH]; +uint8_t TwoWire::rxBufferIndex = 0; +uint8_t TwoWire::rxBufferLength = 0; + +uint8_t TwoWire::txAddress = 0; +uint8_t TwoWire::txBuffer[NBWIRE_BUFFER_LENGTH]; +uint8_t TwoWire::txBufferIndex = 0; +uint8_t TwoWire::txBufferLength = 0; + +//uint8_t TwoWire::transmitting = 0; +void (*TwoWire::user_onRequest)(void); +void (*TwoWire::user_onReceive)(int); + +static volatile uint8_t twi_transmitting; +static volatile uint8_t twi_state; +static uint8_t twi_slarw; +static volatile uint8_t twi_error; +static uint8_t twi_masterBuffer[TWI_BUFFER_LENGTH]; +static volatile uint8_t twi_masterBufferIndex; +static uint8_t twi_masterBufferLength; +static uint8_t twi_rxBuffer[TWI_BUFFER_LENGTH]; +static volatile uint8_t twi_rxBufferIndex; +//static volatile uint8_t twi_Interrupt_Continue_Command; +static volatile uint8_t twi_Return_Value; +static volatile uint8_t twi_Done; +void (*twi_cbendTransmissionDone)(int); +void (*twi_cbreadFromDone)(int); + +void twi_init() { + // initialize state + twi_state = TWI_READY; + + // activate internal pull-ups for twi + // as per note from atmega8 manual pg167 + sbi(PORTC, 4); + sbi(PORTC, 5); + + // initialize twi prescaler and bit rate + cbi(TWSR, TWPS0); // TWI Status Register - Prescaler bits + cbi(TWSR, TWPS1); + + /* twi bit rate formula from atmega128 manual pg 204 + SCL Frequency = CPU Clock Frequency / (16 + (2 * TWBR)) + note: TWBR should be 10 or higher for master mode + It is 72 for a 16mhz Wiring board with 100kHz TWI */ + + TWBR = ((CPU_FREQ / TWI_FREQ) - 16) / 2; // bitrate register + // enable twi module, acks, and twi interrupt + + TWCR = _BV(TWEN) | _BV(TWIE) | _BV(TWEA); + + /* TWEN - TWI Enable Bit + TWIE - TWI Interrupt Enable + TWEA - TWI Enable Acknowledge Bit + TWINT - TWI Interrupt Flag + TWSTA - TWI Start Condition + */ +} + +typedef struct { + uint8_t address; + uint8_t* data; + uint8_t length; + uint8_t wait; + uint8_t i; +} twi_Write_Vars; + +twi_Write_Vars* ptwv = 0; +static void (*fNextInterruptFunction)(void) = 0; + +void twi_Finish(byte bRetVal) { + if (ptwv) { + free(ptwv); + ptwv = 0; + } + twi_Done = 0xFF; + twi_Return_Value = bRetVal; + fNextInterruptFunction = 0; +} + +uint8_t twii_WaitForDone(uint16_t timeout) { + uint32_t endMillis = millis() + timeout; + while (!twi_Done && (timeout == 0 || millis() < endMillis)) { + continue; + } + return twi_Return_Value; +} + +void twii_SetState(uint8_t ucState) { + twi_state = ucState; +} + +void twii_SetError(uint8_t ucError) { + twi_error = ucError ; +} + +void twii_InitBuffer(uint8_t ucPos, uint8_t ucLength) { + twi_masterBufferIndex = 0; + twi_masterBufferLength = ucLength; +} + +void twii_CopyToBuf(uint8_t* pData, uint8_t ucLength) { + uint8_t i; + for (i = 0; i < ucLength; ++i) { + twi_masterBuffer[i] = pData[i]; + } +} + +void twii_CopyFromBuf(uint8_t* pData, uint8_t ucLength) { + uint8_t i; + for (i = 0; i < ucLength; ++i) { + pData[i] = twi_masterBuffer[i]; + } +} + +void twii_SetSlaRW(uint8_t ucSlaRW) { + twi_slarw = ucSlaRW; +} + +void twii_SetStart() { + TWCR = _BV(TWEN) | _BV(TWIE) | _BV(TWEA) | _BV(TWINT) | _BV(TWSTA); +} + +void twi_write01() { + if (TWI_MTX == twi_state) { + return; // blocking test + } + twi_transmitting = 0 ; + if (twi_error == 0xFF) { + twi_Finish(0); // success + } else if (twi_error == TW_MT_SLA_NACK) { + twi_Finish(2); // error: address send, nack received + } else if (twi_error == TW_MT_DATA_NACK) { + twi_Finish(3); // error: data send, nack received + } else { + twi_Finish(4); // other twi error + } + if (twi_cbendTransmissionDone) { + return twi_cbendTransmissionDone(twi_Return_Value); + } + return; +} + + +void twi_write00() { + if (TWI_READY != twi_state) { + return; // blocking test + } + if (TWI_BUFFER_LENGTH < ptwv -> length) { + twi_Finish(1); // end write with error 1 + return; + } + twi_Done = 0x00; // show as working + twii_SetState(TWI_MTX); // to transmitting + twii_SetError(0xFF); // to No Error + twii_InitBuffer(0, ptwv -> length); // pointer and length + twii_CopyToBuf(ptwv -> data, ptwv -> length); // get the data + twii_SetSlaRW((ptwv -> address << 1) | TW_WRITE); // write command + twii_SetStart(); // start the cycle + fNextInterruptFunction = twi_write01; // next routine + return twi_write01(); +} + +void twi_writeTo(uint8_t address, uint8_t* data, uint8_t length, uint8_t wait) { + uint8_t i; + ptwv = (twi_Write_Vars*)malloc(sizeof(twi_Write_Vars)); + ptwv -> address = address; + ptwv -> data = data; + ptwv -> length = length; + ptwv -> wait = wait; + fNextInterruptFunction = twi_write00; + return twi_write00(); +} + +void twi_read01() { + if (TWI_MRX == twi_state) { + return; // blocking test + } + if (twi_masterBufferIndex < ptwv -> length) { + ptwv -> length = twi_masterBufferIndex; + } + twii_CopyFromBuf(ptwv -> data, ptwv -> length); + twi_Finish(ptwv -> length); + if (twi_cbreadFromDone) { + return twi_cbreadFromDone(twi_Return_Value); + } + return; +} + +void twi_read00() { + if (TWI_READY != twi_state) { + return; // blocking test + } + if (TWI_BUFFER_LENGTH < ptwv -> length) { + twi_Finish(0); // error return + } + twi_Done = 0x00; // show as working + twii_SetState(TWI_MRX); // reading + twii_SetError(0xFF); // reset error + twii_InitBuffer(0, ptwv -> length - 1); // init to one less than length + twii_SetSlaRW((ptwv -> address << 1) | TW_READ); // read command + twii_SetStart(); // start cycle + fNextInterruptFunction = twi_read01; + return twi_read01(); +} + +void twi_readFrom(uint8_t address, uint8_t* data, uint8_t length) { + uint8_t i; + + ptwv = (twi_Write_Vars*)malloc(sizeof(twi_Write_Vars)); + ptwv -> address = address; + ptwv -> data = data; + ptwv -> length = length; + fNextInterruptFunction = twi_read00; + return twi_read00(); +} + +void twi_reply(uint8_t ack) { + // transmit master read ready signal, with or without ack + if (ack) { + TWCR = _BV(TWEN) | _BV(TWIE) | _BV(TWINT) | _BV(TWEA); + } else { + TWCR = _BV(TWEN) | _BV(TWIE) | _BV(TWINT); + } +} + +void twi_stop(void) { + // send stop condition + TWCR = _BV(TWEN) | _BV(TWIE) | _BV(TWEA) | _BV(TWINT) | _BV(TWSTO); + + // wait for stop condition to be exectued on bus + // TWINT is not set after a stop condition! + while (TWCR & _BV(TWSTO)) { + continue; + } + + // update twi state + twi_state = TWI_READY; +} + +void twi_releaseBus(void) { + // release bus + TWCR = _BV(TWEN) | _BV(TWIE) | _BV(TWEA) | _BV(TWINT); + + // update twi state + twi_state = TWI_READY; +} + +SIGNAL(TWI_vect) { + switch (TW_STATUS) { + // All Master + case TW_START: // sent start condition + case TW_REP_START: // sent repeated start condition + // copy device address and r/w bit to output register and ack + TWDR = twi_slarw; + twi_reply(1); + break; + + // Master Transmitter + case TW_MT_SLA_ACK: // slave receiver acked address + case TW_MT_DATA_ACK: // slave receiver acked data + // if there is data to send, send it, otherwise stop + if (twi_masterBufferIndex < twi_masterBufferLength) { + // copy data to output register and ack + TWDR = twi_masterBuffer[twi_masterBufferIndex++]; + twi_reply(1); + } else { + twi_stop(); + } + break; + + case TW_MT_SLA_NACK: // address sent, nack received + twi_error = TW_MT_SLA_NACK; + twi_stop(); + break; + + case TW_MT_DATA_NACK: // data sent, nack received + twi_error = TW_MT_DATA_NACK; + twi_stop(); + break; + + case TW_MT_ARB_LOST: // lost bus arbitration + twi_error = TW_MT_ARB_LOST; + twi_releaseBus(); + break; + + // Master Receiver + case TW_MR_DATA_ACK: // data received, ack sent + // put byte into buffer + twi_masterBuffer[twi_masterBufferIndex++] = TWDR; + + case TW_MR_SLA_ACK: // address sent, ack received + // ack if more bytes are expected, otherwise nack + if (twi_masterBufferIndex < twi_masterBufferLength) { + twi_reply(1); + } else { + twi_reply(0); + } + break; + + case TW_MR_DATA_NACK: // data received, nack sent + // put final byte into buffer + twi_masterBuffer[twi_masterBufferIndex++] = TWDR; + + case TW_MR_SLA_NACK: // address sent, nack received + twi_stop(); + break; + + // TW_MR_ARB_LOST handled by TW_MT_ARB_LOST case + + // Slave Receiver (NOT IMPLEMENTED YET) + /* + case TW_SR_SLA_ACK: // addressed, returned ack + case TW_SR_GCALL_ACK: // addressed generally, returned ack + case TW_SR_ARB_LOST_SLA_ACK: // lost arbitration, returned ack + case TW_SR_ARB_LOST_GCALL_ACK: // lost arbitration, returned ack + // enter slave receiver mode + twi_state = TWI_SRX; + + // indicate that rx buffer can be overwritten and ack + twi_rxBufferIndex = 0; + twi_reply(1); + break; + + case TW_SR_DATA_ACK: // data received, returned ack + case TW_SR_GCALL_DATA_ACK: // data received generally, returned ack + // if there is still room in the rx buffer + if (twi_rxBufferIndex < TWI_BUFFER_LENGTH) { + // put byte in buffer and ack + twi_rxBuffer[twi_rxBufferIndex++] = TWDR; + twi_reply(1); + } else { + // otherwise nack + twi_reply(0); + } + break; + + case TW_SR_STOP: // stop or repeated start condition received + // put a null char after data if there's room + if (twi_rxBufferIndex < TWI_BUFFER_LENGTH) { + twi_rxBuffer[twi_rxBufferIndex] = 0; + } + + // sends ack and stops interface for clock stretching + twi_stop(); + + // callback to user defined callback + twi_onSlaveReceive(twi_rxBuffer, twi_rxBufferIndex); + + // since we submit rx buffer to "wire" library, we can reset it + twi_rxBufferIndex = 0; + + // ack future responses and leave slave receiver state + twi_releaseBus(); + break; + + case TW_SR_DATA_NACK: // data received, returned nack + case TW_SR_GCALL_DATA_NACK: // data received generally, returned nack + // nack back at master + twi_reply(0); + break; + + // Slave Transmitter + case TW_ST_SLA_ACK: // addressed, returned ack + case TW_ST_ARB_LOST_SLA_ACK: // arbitration lost, returned ack + // enter slave transmitter mode + twi_state = TWI_STX; + + // ready the tx buffer index for iteration + twi_txBufferIndex = 0; + + // set tx buffer length to be zero, to verify if user changes it + twi_txBufferLength = 0; + + // request for txBuffer to be filled and length to be set + // note: user must call twi_transmit(bytes, length) to do this + twi_onSlaveTransmit(); + + // if they didn't change buffer & length, initialize it + if (0 == twi_txBufferLength) { + twi_txBufferLength = 1; + twi_txBuffer[0] = 0x00; + } + + // transmit first byte from buffer, fall through + + case TW_ST_DATA_ACK: // byte sent, ack returned + // copy data to output register + TWDR = twi_txBuffer[twi_txBufferIndex++]; + + // if there is more to send, ack, otherwise nack + if (twi_txBufferIndex < twi_txBufferLength) { + twi_reply(1); + } else { + twi_reply(0); + } + break; + + case TW_ST_DATA_NACK: // received nack, we are done + case TW_ST_LAST_DATA: // received ack, but we are done already! + // ack future responses + twi_reply(1); + // leave slave receiver state + twi_state = TWI_READY; + break; + */ + + // all + case TW_NO_INFO: // no state information + break; + + case TW_BUS_ERROR: // bus error, illegal stop/start + twi_error = TW_BUS_ERROR; + twi_stop(); + break; + } + + if (fNextInterruptFunction) { + return fNextInterruptFunction(); + } +} + +TwoWire::TwoWire() { } + +void TwoWire::begin(void) { + rxBufferIndex = 0; + rxBufferLength = 0; + + txBufferIndex = 0; + txBufferLength = 0; + + twi_init(); +} + +void TwoWire::beginTransmission(uint8_t address) { + //beginTransmission((uint8_t)address); + + // indicate that we are transmitting + twi_transmitting = 1; + + // set address of targeted slave + txAddress = address; + + // reset tx buffer iterator vars + txBufferIndex = 0; + txBufferLength = 0; +} + +uint8_t TwoWire::endTransmission(uint16_t timeout) { + // transmit buffer (blocking) + //int8_t ret = + twi_cbendTransmissionDone = NULL; + twi_writeTo(txAddress, txBuffer, txBufferLength, 1); + int8_t ret = twii_WaitForDone(timeout); + + // reset tx buffer iterator vars + txBufferIndex = 0; + txBufferLength = 0; + + // indicate that we are done transmitting + // twi_transmitting = 0; + return ret; +} + +void TwoWire::nbendTransmission(void (*function)(int)) { + twi_cbendTransmissionDone = function; + twi_writeTo(txAddress, txBuffer, txBufferLength, 1); + return; +} + +void TwoWire::send(uint8_t data) { + if (twi_transmitting) { + // in master transmitter mode + // don't bother if buffer is full + if (txBufferLength >= NBWIRE_BUFFER_LENGTH) { + return; + } + + // put byte in tx buffer + txBuffer[txBufferIndex] = data; + ++txBufferIndex; + + // update amount in buffer + txBufferLength = txBufferIndex; + } else { + // in slave send mode + // reply to master + //twi_transmit(&data, 1); + } +} + +uint8_t TwoWire::receive(void) { + // default to returning null char + // for people using with char strings + uint8_t value = 0; + + // get each successive byte on each call + if (rxBufferIndex < rxBufferLength) { + value = rxBuffer[rxBufferIndex]; + ++rxBufferIndex; + } + + return value; +} + +uint8_t TwoWire::requestFrom(uint8_t address, int quantity, uint16_t timeout) { + // clamp to buffer length + if (quantity > NBWIRE_BUFFER_LENGTH) { + quantity = NBWIRE_BUFFER_LENGTH; + } + + // perform blocking read into buffer + twi_cbreadFromDone = NULL; + twi_readFrom(address, rxBuffer, quantity); + uint8_t read = twii_WaitForDone(timeout); + + // set rx buffer iterator vars + rxBufferIndex = 0; + rxBufferLength = read; + + return read; +} + +void TwoWire::nbrequestFrom(uint8_t address, int quantity, void (*function)(int)) { + // clamp to buffer length + if (quantity > NBWIRE_BUFFER_LENGTH) { + quantity = NBWIRE_BUFFER_LENGTH; + } + + // perform blocking read into buffer + twi_cbreadFromDone = function; + twi_readFrom(address, rxBuffer, quantity); + //uint8_t read = twii_WaitForDone(); + + // set rx buffer iterator vars + //rxBufferIndex = 0; + //rxBufferLength = read; + + rxBufferIndex = 0; + rxBufferLength = quantity; // this is a hack + + return; //read; +} + +uint8_t TwoWire::available(void) { + return rxBufferLength - rxBufferIndex; +} + +#endif diff --git a/labyrinthe/3-arduino/3-labyrinthe-imu/I2Cdev.h b/labyrinthe/3-arduino/3-labyrinthe-imu/I2Cdev.h new file mode 100644 index 0000000..e7e0cbb --- /dev/null +++ b/labyrinthe/3-arduino/3-labyrinthe-imu/I2Cdev.h @@ -0,0 +1,270 @@ +// I2Cdev library collection - Main I2C device class header file +// Abstracts bit and byte I2C R/W functions into a convenient class +// 6/9/2012 by Jeff Rowberg +// +// Changelog: +// 2012-06-09 - fix major issue with reading > 32 bytes at a time with Arduino Wire +// - add compiler warnings when using outdated or IDE or limited I2Cdev implementation +// 2011-11-01 - fix write*Bits mask calculation (thanks sasquatch @ Arduino forums) +// 2011-10-03 - added automatic Arduino version detection for ease of use +// 2011-10-02 - added Gene Knight's NBWire TwoWire class implementation with small modifications +// 2011-08-31 - added support for Arduino 1.0 Wire library (methods are different from 0.x) +// 2011-08-03 - added optional timeout parameter to read* methods to easily change from default +// 2011-08-02 - added support for 16-bit registers +// - fixed incorrect Doxygen comments on some methods +// - added timeout value for read operations (thanks mem @ Arduino forums) +// 2011-07-30 - changed read/write function structures to return success or byte counts +// - made all methods static for multi-device memory savings +// 2011-07-28 - initial release + +/* ============================================ + I2Cdev device library code is placed under the MIT license + Copyright (c) 2012 Jeff Rowberg + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + =============================================== +*/ + +#ifndef _I2CDEV_H_ +#define _I2CDEV_H_ + +// ----------------------------------------------------------------------------- +// I2C interface implementation setting +// ----------------------------------------------------------------------------- +#define I2CDEV_IMPLEMENTATION I2CDEV_ARDUINO_WIRE + +// comment this out if you are using a non-optimal IDE/implementation setting +// but want the compiler to shut up about it +#define I2CDEV_IMPLEMENTATION_WARNINGS + +// ----------------------------------------------------------------------------- +// I2C interface implementation options +// ----------------------------------------------------------------------------- +#define I2CDEV_ARDUINO_WIRE 1 // Wire object from Arduino +#define I2CDEV_BUILTIN_NBWIRE 2 // Tweaked Wire object from Gene Knight's NBWire project +// ^^^ NBWire implementation is still buggy w/some interrupts! +#define I2CDEV_BUILTIN_FASTWIRE 3 // FastWire object from Francesco Ferrara's project +// ^^^ FastWire implementation in I2Cdev is INCOMPLETE! +#ifndef BUFFER_LENGTH +#define BUFFER_LENGTH 32 +#endif + +// ----------------------------------------------------------------------------- +// Arduino-style "Serial.print" debug constant (uncomment to enable) +// ----------------------------------------------------------------------------- +//#define I2CDEV_SERIAL_DEBUG + +#ifdef ARDUINO + #if ARDUINO < 100 + #include "WProgram.h" + #else + #include "Arduino.h" + #endif + #if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE + #include + #endif +#else + #include "ArduinoWrapper.h" +#endif + +// 1000ms default read timeout (modify with "I2Cdev::readTimeout = [ms];") +#define I2CDEV_DEFAULT_READ_TIMEOUT 1000 + +class I2Cdev { + public: + I2Cdev(); + + static int8_t readBit(uint8_t devAddr, uint8_t regAddr, uint8_t bitNum, uint8_t* data, + uint16_t timeout = I2Cdev::readTimeout); + static int8_t readBitW(uint8_t devAddr, uint8_t regAddr, uint8_t bitNum, uint16_t* data, + uint16_t timeout = I2Cdev::readTimeout); + static int8_t readBits(uint8_t devAddr, uint8_t regAddr, uint8_t bitStart, uint8_t length, uint8_t* data, + uint16_t timeout = I2Cdev::readTimeout); + static int8_t readBitsW(uint8_t devAddr, uint8_t regAddr, uint8_t bitStart, uint8_t length, uint16_t* data, + uint16_t timeout = I2Cdev::readTimeout); + static int8_t readByte(uint8_t devAddr, uint8_t regAddr, uint8_t* data, uint16_t timeout = I2Cdev::readTimeout); + static int8_t readWord(uint8_t devAddr, uint8_t regAddr, uint16_t* data, uint16_t timeout = I2Cdev::readTimeout); + static int8_t readBytes(uint8_t devAddr, uint8_t regAddr, uint8_t length, uint8_t* data, + uint16_t timeout = I2Cdev::readTimeout); + static int8_t readWords(uint8_t devAddr, uint8_t regAddr, uint8_t length, uint16_t* data, + uint16_t timeout = I2Cdev::readTimeout); + + static bool writeBit(uint8_t devAddr, uint8_t regAddr, uint8_t bitNum, uint8_t data); + static bool writeBitW(uint8_t devAddr, uint8_t regAddr, uint8_t bitNum, uint16_t data); + static bool writeBits(uint8_t devAddr, uint8_t regAddr, uint8_t bitStart, uint8_t length, uint8_t data); + static bool writeBitsW(uint8_t devAddr, uint8_t regAddr, uint8_t bitStart, uint8_t length, uint16_t data); + static bool writeByte(uint8_t devAddr, uint8_t regAddr, uint8_t data); + static bool writeWord(uint8_t devAddr, uint8_t regAddr, uint16_t data); + static bool writeBytes(uint8_t devAddr, uint8_t regAddr, uint8_t length, uint8_t* data); + static bool writeWords(uint8_t devAddr, uint8_t regAddr, uint8_t length, uint16_t* data); + + static uint16_t readTimeout; +}; + +#if I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_FASTWIRE +////////////////////// +// FastWire 0.2 +// This is a library to help faster programs to read I2C devices. +// Copyright(C) 2011 +// Francesco Ferrara +////////////////////// + +/* Master */ +#define TW_START 0x08 +#define TW_REP_START 0x10 + +/* Master Transmitter */ +#define TW_MT_SLA_ACK 0x18 +#define TW_MT_SLA_NACK 0x20 +#define TW_MT_DATA_ACK 0x28 +#define TW_MT_DATA_NACK 0x30 +#define TW_MT_ARB_LOST 0x38 + +/* Master Receiver */ +#define TW_MR_ARB_LOST 0x38 +#define TW_MR_SLA_ACK 0x40 +#define TW_MR_SLA_NACK 0x48 +#define TW_MR_DATA_ACK 0x50 +#define TW_MR_DATA_NACK 0x58 + +#define TW_OK 0 +#define TW_ERROR 1 + +class Fastwire { + private: + static boolean waitInt(); + + public: + static void setup(int khz, boolean pullup); + static byte write(byte device, byte address, byte value); + static byte readBuf(byte device, byte address, byte* data, byte num); +}; +#endif + +#if I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_NBWIRE +// NBWire implementation based heavily on code by Gene Knight +// Originally posted on the Arduino forum at http://arduino.cc/forum/index.php/topic,70705.0.html +// Originally offered to the i2cdevlib project at http://arduino.cc/forum/index.php/topic,68210.30.html + +#define NBWIRE_BUFFER_LENGTH 32 + +class TwoWire { + private: + static uint8_t rxBuffer[]; + static uint8_t rxBufferIndex; + static uint8_t rxBufferLength; + + static uint8_t txAddress; + static uint8_t txBuffer[]; + static uint8_t txBufferIndex; + static uint8_t txBufferLength; + + // static uint8_t transmitting; + static void (*user_onRequest)(void); + static void (*user_onReceive)(int); + static void onRequestService(void); + static void onReceiveService(uint8_t*, int); + + public: + TwoWire(); + void begin(); + void begin(uint8_t); + void begin(int); + void beginTransmission(uint8_t); + //void beginTransmission(int); + uint8_t endTransmission(uint16_t timeout = 0); + void nbendTransmission(void (*function)(int)) ; + uint8_t requestFrom(uint8_t, int, uint16_t timeout = 0); + //uint8_t requestFrom(int, int); + void nbrequestFrom(uint8_t, int, void (*function)(int)); + void send(uint8_t); + void send(uint8_t*, uint8_t); + //void send(int); + void send(char*); + uint8_t available(void); + uint8_t receive(void); + void onReceive(void (*)(int)); + void onRequest(void (*)(void)); +}; + +#define TWI_READY 0 +#define TWI_MRX 1 +#define TWI_MTX 2 +#define TWI_SRX 3 +#define TWI_STX 4 + +#define TW_WRITE 0 +#define TW_READ 1 + +#define TW_MT_SLA_NACK 0x20 +#define TW_MT_DATA_NACK 0x30 + +#define CPU_FREQ 16000000L +#define TWI_FREQ 100000L +#define TWI_BUFFER_LENGTH 32 + +/* TWI Status is in TWSR, in the top 5 bits: TWS7 - TWS3 */ + +#define TW_STATUS_MASK (_BV(TWS7)|_BV(TWS6)|_BV(TWS5)|_BV(TWS4)|_BV(TWS3)) +#define TW_STATUS (TWSR & TW_STATUS_MASK) +#define TW_START 0x08 +#define TW_REP_START 0x10 +#define TW_MT_SLA_ACK 0x18 +#define TW_MT_SLA_NACK 0x20 +#define TW_MT_DATA_ACK 0x28 +#define TW_MT_DATA_NACK 0x30 +#define TW_MT_ARB_LOST 0x38 +#define TW_MR_ARB_LOST 0x38 +#define TW_MR_SLA_ACK 0x40 +#define TW_MR_SLA_NACK 0x48 +#define TW_MR_DATA_ACK 0x50 +#define TW_MR_DATA_NACK 0x58 +#define TW_ST_SLA_ACK 0xA8 +#define TW_ST_ARB_LOST_SLA_ACK 0xB0 +#define TW_ST_DATA_ACK 0xB8 +#define TW_ST_DATA_NACK 0xC0 +#define TW_ST_LAST_DATA 0xC8 +#define TW_SR_SLA_ACK 0x60 +#define TW_SR_ARB_LOST_SLA_ACK 0x68 +#define TW_SR_GCALL_ACK 0x70 +#define TW_SR_ARB_LOST_GCALL_ACK 0x78 +#define TW_SR_DATA_ACK 0x80 +#define TW_SR_DATA_NACK 0x88 +#define TW_SR_GCALL_DATA_ACK 0x90 +#define TW_SR_GCALL_DATA_NACK 0x98 +#define TW_SR_STOP 0xA0 +#define TW_NO_INFO 0xF8 +#define TW_BUS_ERROR 0x00 + +//#define _MMIO_BYTE(mem_addr) (*(volatile uint8_t *)(mem_addr)) +//#define _SFR_BYTE(sfr) _MMIO_BYTE(_SFR_ADDR(sfr)) + +#ifndef sbi // set bit + #define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit)) +#endif // sbi + +#ifndef cbi // clear bit + #define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit)) +#endif // cbi + +extern TwoWire Wire; + +#endif // I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_NBWIRE + +#endif /* _I2CDEV_H_ */ diff --git a/labyrinthe/3-arduino/3-labyrinthe-imu/MPU6050.cpp b/labyrinthe/3-arduino/3-labyrinthe-imu/MPU6050.cpp new file mode 100644 index 0000000..6a0fd44 --- /dev/null +++ b/labyrinthe/3-arduino/3-labyrinthe-imu/MPU6050.cpp @@ -0,0 +1,3237 @@ +// I2Cdev library collection - MPU6050 I2C device class +// Based on InvenSense MPU-6050 register map document rev. 2.0, 5/19/2011 (RM-MPU-6000A-00) +// 8/24/2011 by Jeff Rowberg +// Updates should (hopefully) always be available at https://github.com/jrowberg/i2cdevlib +// +// Changelog: +// ... - ongoing debug release + +// NOTE: THIS IS ONLY A PARIAL RELEASE. THIS DEVICE CLASS IS CURRENTLY UNDERGOING ACTIVE +// DEVELOPMENT AND IS STILL MISSING SOME IMPORTANT FEATURES. PLEASE KEEP THIS IN MIND IF +// YOU DECIDE TO USE THIS PARTICULAR CODE FOR ANYTHING. + +/* ============================================ + I2Cdev device library code is placed under the MIT license + Copyright (c) 2012 Jeff Rowberg + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + =============================================== +*/ + +#include "MPU6050.h" + +/** Default constructor, uses default I2C address. + @see MPU6050_DEFAULT_ADDRESS +*/ +MPU6050::MPU6050() { + devAddr = MPU6050_DEFAULT_ADDRESS; +} + +/** Specific address constructor. + @param address I2C address + @see MPU6050_DEFAULT_ADDRESS + @see MPU6050_ADDRESS_AD0_LOW + @see MPU6050_ADDRESS_AD0_HIGH +*/ +MPU6050::MPU6050(uint8_t address) { + devAddr = address; +} + +/** Power on and prepare for general usage. + This will activate the device and take it out of sleep mode (which must be done + after start-up). This function also sets both the accelerometer and the gyroscope + to their most sensitive settings, namely +/- 2g and +/- 250 degrees/sec, and sets + the clock source to use the X Gyro for reference, which is slightly better than + the default internal clock source. +*/ +void MPU6050::initialize() { + setClockSource(MPU6050_CLOCK_PLL_XGYRO); + setFullScaleGyroRange(MPU6050_GYRO_FS_250); + setFullScaleAccelRange(MPU6050_ACCEL_FS_2); + setSleepEnabled(false); // thanks to Jack Elston for pointing this one out! +} + +/** Verify the I2C connection. + Make sure the device is connected and responds as expected. + @return True if connection is valid, false otherwise +*/ +bool MPU6050::testConnection() { + return getDeviceID() == 0x34; +} + +// AUX_VDDIO register (InvenSense demo code calls this RA_*G_OFFS_TC) + +/** Get the auxiliary I2C supply voltage level. + When set to 1, the auxiliary I2C bus high logic level is VDD. When cleared to + 0, the auxiliary I2C bus high logic level is VLOGIC. This does not apply to + the MPU-6000, which does not have a VLOGIC pin. + @return I2C supply voltage level (0=VLOGIC, 1=VDD) +*/ +uint8_t MPU6050::getAuxVDDIOLevel() { + I2Cdev::readBit(devAddr, MPU6050_RA_YG_OFFS_TC, MPU6050_TC_PWR_MODE_BIT, buffer); + return buffer[0]; +} +/** Set the auxiliary I2C supply voltage level. + When set to 1, the auxiliary I2C bus high logic level is VDD. When cleared to + 0, the auxiliary I2C bus high logic level is VLOGIC. This does not apply to + the MPU-6000, which does not have a VLOGIC pin. + @param level I2C supply voltage level (0=VLOGIC, 1=VDD) +*/ +void MPU6050::setAuxVDDIOLevel(uint8_t level) { + I2Cdev::writeBit(devAddr, MPU6050_RA_YG_OFFS_TC, MPU6050_TC_PWR_MODE_BIT, level); +} + +// SMPLRT_DIV register + +/** Get gyroscope output rate divider. + The sensor register output, FIFO output, DMP sampling, Motion detection, Zero + Motion detection, and Free Fall detection are all based on the Sample Rate. + The Sample Rate is generated by dividing the gyroscope output rate by + SMPLRT_DIV: + + Sample Rate = Gyroscope Output Rate / (1 + SMPLRT_DIV) + + where Gyroscope Output Rate = 8kHz when the DLPF is disabled (DLPF_CFG = 0 or + 7), and 1kHz when the DLPF is enabled (see Register 26). + + Note: The accelerometer output rate is 1kHz. This means that for a Sample + Rate greater than 1kHz, the same accelerometer sample may be output to the + FIFO, DMP, and sensor registers more than once. + + For a diagram of the gyroscope and accelerometer signal paths, see Section 8 + of the MPU-6000/MPU-6050 Product Specification document. + + @return Current sample rate + @see MPU6050_RA_SMPLRT_DIV +*/ +uint8_t MPU6050::getRate() { + I2Cdev::readByte(devAddr, MPU6050_RA_SMPLRT_DIV, buffer); + return buffer[0]; +} +/** Set gyroscope sample rate divider. + @param rate New sample rate divider + @see getRate() + @see MPU6050_RA_SMPLRT_DIV +*/ +void MPU6050::setRate(uint8_t rate) { + I2Cdev::writeByte(devAddr, MPU6050_RA_SMPLRT_DIV, rate); +} + +// CONFIG register + +/** Get external FSYNC configuration. + Configures the external Frame Synchronization (FSYNC) pin sampling. An + external signal connected to the FSYNC pin can be sampled by configuring + EXT_SYNC_SET. Signal changes to the FSYNC pin are latched so that short + strobes may be captured. The latched FSYNC signal will be sampled at the + Sampling Rate, as defined in register 25. After sampling, the latch will + reset to the current FSYNC signal state. + + The sampled value will be reported in place of the least significant bit in + a sensor data register determined by the value of EXT_SYNC_SET according to + the following table. + +

+    EXT_SYNC_SET | FSYNC Bit Location
+    -------------+-------------------
+    0            | Input disabled
+    1            | TEMP_OUT_L[0]
+    2            | GYRO_XOUT_L[0]
+    3            | GYRO_YOUT_L[0]
+    4            | GYRO_ZOUT_L[0]
+    5            | ACCEL_XOUT_L[0]
+    6            | ACCEL_YOUT_L[0]
+    7            | ACCEL_ZOUT_L[0]
+    
+ + @return FSYNC configuration value +*/ +uint8_t MPU6050::getExternalFrameSync() { + I2Cdev::readBits(devAddr, MPU6050_RA_CONFIG, MPU6050_CFG_EXT_SYNC_SET_BIT, MPU6050_CFG_EXT_SYNC_SET_LENGTH, buffer); + return buffer[0]; +} +/** Set external FSYNC configuration. + @see getExternalFrameSync() + @see MPU6050_RA_CONFIG + @param sync New FSYNC configuration value +*/ +void MPU6050::setExternalFrameSync(uint8_t sync) { + I2Cdev::writeBits(devAddr, MPU6050_RA_CONFIG, MPU6050_CFG_EXT_SYNC_SET_BIT, MPU6050_CFG_EXT_SYNC_SET_LENGTH, sync); +} +/** Get digital low-pass filter configuration. + The DLPF_CFG parameter sets the digital low pass filter configuration. It + also determines the internal sampling rate used by the device as shown in + the table below. + + Note: The accelerometer output rate is 1kHz. This means that for a Sample + Rate greater than 1kHz, the same accelerometer sample may be output to the + FIFO, DMP, and sensor registers more than once. + +
+            |   ACCELEROMETER    |           GYROSCOPE
+    DLPF_CFG | Bandwidth | Delay  | Bandwidth | Delay  | Sample Rate
+    ---------+-----------+--------+-----------+--------+-------------
+    0        | 260Hz     | 0ms    | 256Hz     | 0.98ms | 8kHz
+    1        | 184Hz     | 2.0ms  | 188Hz     | 1.9ms  | 1kHz
+    2        | 94Hz      | 3.0ms  | 98Hz      | 2.8ms  | 1kHz
+    3        | 44Hz      | 4.9ms  | 42Hz      | 4.8ms  | 1kHz
+    4        | 21Hz      | 8.5ms  | 20Hz      | 8.3ms  | 1kHz
+    5        | 10Hz      | 13.8ms | 10Hz      | 13.4ms | 1kHz
+    6        | 5Hz       | 19.0ms | 5Hz       | 18.6ms | 1kHz
+    7        |   -- Reserved --   |   -- Reserved --   | Reserved
+    
+ + @return DLFP configuration + @see MPU6050_RA_CONFIG + @see MPU6050_CFG_DLPF_CFG_BIT + @see MPU6050_CFG_DLPF_CFG_LENGTH +*/ +uint8_t MPU6050::getDLPFMode() { + I2Cdev::readBits(devAddr, MPU6050_RA_CONFIG, MPU6050_CFG_DLPF_CFG_BIT, MPU6050_CFG_DLPF_CFG_LENGTH, buffer); + return buffer[0]; +} +/** Set digital low-pass filter configuration. + @param mode New DLFP configuration setting + @see getDLPFBandwidth() + @see MPU6050_DLPF_BW_256 + @see MPU6050_RA_CONFIG + @see MPU6050_CFG_DLPF_CFG_BIT + @see MPU6050_CFG_DLPF_CFG_LENGTH +*/ +void MPU6050::setDLPFMode(uint8_t mode) { + I2Cdev::writeBits(devAddr, MPU6050_RA_CONFIG, MPU6050_CFG_DLPF_CFG_BIT, MPU6050_CFG_DLPF_CFG_LENGTH, mode); +} + +// GYRO_CONFIG register + +/** Get full-scale gyroscope range. + The FS_SEL parameter allows setting the full-scale range of the gyro sensors, + as described in the table below. + +
+    0 = +/- 250 degrees/sec
+    1 = +/- 500 degrees/sec
+    2 = +/- 1000 degrees/sec
+    3 = +/- 2000 degrees/sec
+    
+ + @return Current full-scale gyroscope range setting + @see MPU6050_GYRO_FS_250 + @see MPU6050_RA_GYRO_CONFIG + @see MPU6050_GCONFIG_FS_SEL_BIT + @see MPU6050_GCONFIG_FS_SEL_LENGTH +*/ +uint8_t MPU6050::getFullScaleGyroRange() { + I2Cdev::readBits(devAddr, MPU6050_RA_GYRO_CONFIG, MPU6050_GCONFIG_FS_SEL_BIT, MPU6050_GCONFIG_FS_SEL_LENGTH, buffer); + return buffer[0]; +} +/** Set full-scale gyroscope range. + @param range New full-scale gyroscope range value + @see getFullScaleRange() + @see MPU6050_GYRO_FS_250 + @see MPU6050_RA_GYRO_CONFIG + @see MPU6050_GCONFIG_FS_SEL_BIT + @see MPU6050_GCONFIG_FS_SEL_LENGTH +*/ +void MPU6050::setFullScaleGyroRange(uint8_t range) { + I2Cdev::writeBits(devAddr, MPU6050_RA_GYRO_CONFIG, MPU6050_GCONFIG_FS_SEL_BIT, MPU6050_GCONFIG_FS_SEL_LENGTH, range); +} + +// ACCEL_CONFIG register + +/** Get self-test enabled setting for accelerometer X axis. + @return Self-test enabled value + @see MPU6050_RA_ACCEL_CONFIG +*/ +bool MPU6050::getAccelXSelfTest() { + I2Cdev::readBit(devAddr, MPU6050_RA_ACCEL_CONFIG, MPU6050_ACONFIG_XA_ST_BIT, buffer); + return buffer[0]; +} +/** Get self-test enabled setting for accelerometer X axis. + @param enabled Self-test enabled value + @see MPU6050_RA_ACCEL_CONFIG +*/ +void MPU6050::setAccelXSelfTest(bool enabled) { + I2Cdev::writeBit(devAddr, MPU6050_RA_ACCEL_CONFIG, MPU6050_ACONFIG_XA_ST_BIT, enabled); +} +/** Get self-test enabled value for accelerometer Y axis. + @return Self-test enabled value + @see MPU6050_RA_ACCEL_CONFIG +*/ +bool MPU6050::getAccelYSelfTest() { + I2Cdev::readBit(devAddr, MPU6050_RA_ACCEL_CONFIG, MPU6050_ACONFIG_YA_ST_BIT, buffer); + return buffer[0]; +} +/** Get self-test enabled value for accelerometer Y axis. + @param enabled Self-test enabled value + @see MPU6050_RA_ACCEL_CONFIG +*/ +void MPU6050::setAccelYSelfTest(bool enabled) { + I2Cdev::writeBit(devAddr, MPU6050_RA_ACCEL_CONFIG, MPU6050_ACONFIG_YA_ST_BIT, enabled); +} +/** Get self-test enabled value for accelerometer Z axis. + @return Self-test enabled value + @see MPU6050_RA_ACCEL_CONFIG +*/ +bool MPU6050::getAccelZSelfTest() { + I2Cdev::readBit(devAddr, MPU6050_RA_ACCEL_CONFIG, MPU6050_ACONFIG_ZA_ST_BIT, buffer); + return buffer[0]; +} +/** Set self-test enabled value for accelerometer Z axis. + @param enabled Self-test enabled value + @see MPU6050_RA_ACCEL_CONFIG +*/ +void MPU6050::setAccelZSelfTest(bool enabled) { + I2Cdev::writeBit(devAddr, MPU6050_RA_ACCEL_CONFIG, MPU6050_ACONFIG_ZA_ST_BIT, enabled); +} +/** Get full-scale accelerometer range. + The FS_SEL parameter allows setting the full-scale range of the accelerometer + sensors, as described in the table below. + +
+    0 = +/- 2g
+    1 = +/- 4g
+    2 = +/- 8g
+    3 = +/- 16g
+    
+ + @return Current full-scale accelerometer range setting + @see MPU6050_ACCEL_FS_2 + @see MPU6050_RA_ACCEL_CONFIG + @see MPU6050_ACONFIG_AFS_SEL_BIT + @see MPU6050_ACONFIG_AFS_SEL_LENGTH +*/ +uint8_t MPU6050::getFullScaleAccelRange() { + I2Cdev::readBits(devAddr, MPU6050_RA_ACCEL_CONFIG, MPU6050_ACONFIG_AFS_SEL_BIT, MPU6050_ACONFIG_AFS_SEL_LENGTH, buffer); + return buffer[0]; +} +/** Set full-scale accelerometer range. + @param range New full-scale accelerometer range setting + @see getFullScaleAccelRange() +*/ +void MPU6050::setFullScaleAccelRange(uint8_t range) { + I2Cdev::writeBits(devAddr, MPU6050_RA_ACCEL_CONFIG, MPU6050_ACONFIG_AFS_SEL_BIT, MPU6050_ACONFIG_AFS_SEL_LENGTH, range); +} +/** Get the high-pass filter configuration. + The DHPF is a filter module in the path leading to motion detectors (Free + Fall, Motion threshold, and Zero Motion). The high pass filter output is not + available to the data registers (see Figure in Section 8 of the MPU-6000/ + MPU-6050 Product Specification document). + + The high pass filter has three modes: + +
+      Reset: The filter output settles to zero within one sample. This
+             effectively disables the high pass filter. This mode may be toggled
+             to quickly settle the filter.
+
+      On:    The high pass filter will pass signals above the cut off frequency.
+
+      Hold:  When triggered, the filter holds the present sample. The filter
+             output will be the difference between the input sample and the held
+             sample.
+    
+ +
+    ACCEL_HPF | Filter Mode | Cut-off Frequency
+    ----------+-------------+------------------
+    0         | Reset       | None
+    1         | On          | 5Hz
+    2         | On          | 2.5Hz
+    3         | On          | 1.25Hz
+    4         | On          | 0.63Hz
+    7         | Hold        | None
+    
+ + @return Current high-pass filter configuration + @see MPU6050_DHPF_RESET + @see MPU6050_RA_ACCEL_CONFIG +*/ +uint8_t MPU6050::getDHPFMode() { + I2Cdev::readBits(devAddr, MPU6050_RA_ACCEL_CONFIG, MPU6050_ACONFIG_ACCEL_HPF_BIT, MPU6050_ACONFIG_ACCEL_HPF_LENGTH, + buffer); + return buffer[0]; +} +/** Set the high-pass filter configuration. + @param bandwidth New high-pass filter configuration + @see setDHPFMode() + @see MPU6050_DHPF_RESET + @see MPU6050_RA_ACCEL_CONFIG +*/ +void MPU6050::setDHPFMode(uint8_t bandwidth) { + I2Cdev::writeBits(devAddr, MPU6050_RA_ACCEL_CONFIG, MPU6050_ACONFIG_ACCEL_HPF_BIT, MPU6050_ACONFIG_ACCEL_HPF_LENGTH, + bandwidth); +} + +// FF_THR register + +/** Get free-fall event acceleration threshold. + This register configures the detection threshold for Free Fall event + detection. The unit of FF_THR is 1LSB = 2mg. Free Fall is detected when the + absolute value of the accelerometer measurements for the three axes are each + less than the detection threshold. This condition increments the Free Fall + duration counter (Register 30). The Free Fall interrupt is triggered when the + Free Fall duration counter reaches the time specified in FF_DUR. + + For more details on the Free Fall detection interrupt, see Section 8.2 of the + MPU-6000/MPU-6050 Product Specification document as well as Registers 56 and + 58 of this document. + + @return Current free-fall acceleration threshold value (LSB = 2mg) + @see MPU6050_RA_FF_THR +*/ +uint8_t MPU6050::getFreefallDetectionThreshold() { + I2Cdev::readByte(devAddr, MPU6050_RA_FF_THR, buffer); + return buffer[0]; +} +/** Get free-fall event acceleration threshold. + @param threshold New free-fall acceleration threshold value (LSB = 2mg) + @see getFreefallDetectionThreshold() + @see MPU6050_RA_FF_THR +*/ +void MPU6050::setFreefallDetectionThreshold(uint8_t threshold) { + I2Cdev::writeByte(devAddr, MPU6050_RA_FF_THR, threshold); +} + +// FF_DUR register + +/** Get free-fall event duration threshold. + This register configures the duration counter threshold for Free Fall event + detection. The duration counter ticks at 1kHz, therefore FF_DUR has a unit + of 1 LSB = 1 ms. + + The Free Fall duration counter increments while the absolute value of the + accelerometer measurements are each less than the detection threshold + (Register 29). The Free Fall interrupt is triggered when the Free Fall + duration counter reaches the time specified in this register. + + For more details on the Free Fall detection interrupt, see Section 8.2 of + the MPU-6000/MPU-6050 Product Specification document as well as Registers 56 + and 58 of this document. + + @return Current free-fall duration threshold value (LSB = 1ms) + @see MPU6050_RA_FF_DUR +*/ +uint8_t MPU6050::getFreefallDetectionDuration() { + I2Cdev::readByte(devAddr, MPU6050_RA_FF_DUR, buffer); + return buffer[0]; +} +/** Get free-fall event duration threshold. + @param duration New free-fall duration threshold value (LSB = 1ms) + @see getFreefallDetectionDuration() + @see MPU6050_RA_FF_DUR +*/ +void MPU6050::setFreefallDetectionDuration(uint8_t duration) { + I2Cdev::writeByte(devAddr, MPU6050_RA_FF_DUR, duration); +} + +// MOT_THR register + +/** Get motion detection event acceleration threshold. + This register configures the detection threshold for Motion interrupt + generation. The unit of MOT_THR is 1LSB = 2mg. Motion is detected when the + absolute value of any of the accelerometer measurements exceeds this Motion + detection threshold. This condition increments the Motion detection duration + counter (Register 32). The Motion detection interrupt is triggered when the + Motion Detection counter reaches the time count specified in MOT_DUR + (Register 32). + + The Motion interrupt will indicate the axis and polarity of detected motion + in MOT_DETECT_STATUS (Register 97). + + For more details on the Motion detection interrupt, see Section 8.3 of the + MPU-6000/MPU-6050 Product Specification document as well as Registers 56 and + 58 of this document. + + @return Current motion detection acceleration threshold value (LSB = 2mg) + @see MPU6050_RA_MOT_THR +*/ +uint8_t MPU6050::getMotionDetectionThreshold() { + I2Cdev::readByte(devAddr, MPU6050_RA_MOT_THR, buffer); + return buffer[0]; +} +/** Set free-fall event acceleration threshold. + @param threshold New motion detection acceleration threshold value (LSB = 2mg) + @see getMotionDetectionThreshold() + @see MPU6050_RA_MOT_THR +*/ +void MPU6050::setMotionDetectionThreshold(uint8_t threshold) { + I2Cdev::writeByte(devAddr, MPU6050_RA_MOT_THR, threshold); +} + +// MOT_DUR register + +/** Get motion detection event duration threshold. + This register configures the duration counter threshold for Motion interrupt + generation. The duration counter ticks at 1 kHz, therefore MOT_DUR has a unit + of 1LSB = 1ms. The Motion detection duration counter increments when the + absolute value of any of the accelerometer measurements exceeds the Motion + detection threshold (Register 31). The Motion detection interrupt is + triggered when the Motion detection counter reaches the time count specified + in this register. + + For more details on the Motion detection interrupt, see Section 8.3 of the + MPU-6000/MPU-6050 Product Specification document. + + @return Current motion detection duration threshold value (LSB = 1ms) + @see MPU6050_RA_MOT_DUR +*/ +uint8_t MPU6050::getMotionDetectionDuration() { + I2Cdev::readByte(devAddr, MPU6050_RA_MOT_DUR, buffer); + return buffer[0]; +} +/** Set motion detection event duration threshold. + @param duration New motion detection duration threshold value (LSB = 1ms) + @see getMotionDetectionDuration() + @see MPU6050_RA_MOT_DUR +*/ +void MPU6050::setMotionDetectionDuration(uint8_t duration) { + I2Cdev::writeByte(devAddr, MPU6050_RA_MOT_DUR, duration); +} + +// ZRMOT_THR register + +/** Get zero motion detection event acceleration threshold. + This register configures the detection threshold for Zero Motion interrupt + generation. The unit of ZRMOT_THR is 1LSB = 2mg. Zero Motion is detected when + the absolute value of the accelerometer measurements for the 3 axes are each + less than the detection threshold. This condition increments the Zero Motion + duration counter (Register 34). The Zero Motion interrupt is triggered when + the Zero Motion duration counter reaches the time count specified in + ZRMOT_DUR (Register 34). + + Unlike Free Fall or Motion detection, Zero Motion detection triggers an + interrupt both when Zero Motion is first detected and when Zero Motion is no + longer detected. + + When a zero motion event is detected, a Zero Motion Status will be indicated + in the MOT_DETECT_STATUS register (Register 97). When a motion-to-zero-motion + condition is detected, the status bit is set to 1. When a zero-motion-to- + motion condition is detected, the status bit is set to 0. + + For more details on the Zero Motion detection interrupt, see Section 8.4 of + the MPU-6000/MPU-6050 Product Specification document as well as Registers 56 + and 58 of this document. + + @return Current zero motion detection acceleration threshold value (LSB = 2mg) + @see MPU6050_RA_ZRMOT_THR +*/ +uint8_t MPU6050::getZeroMotionDetectionThreshold() { + I2Cdev::readByte(devAddr, MPU6050_RA_ZRMOT_THR, buffer); + return buffer[0]; +} +/** Set zero motion detection event acceleration threshold. + @param threshold New zero motion detection acceleration threshold value (LSB = 2mg) + @see getZeroMotionDetectionThreshold() + @see MPU6050_RA_ZRMOT_THR +*/ +void MPU6050::setZeroMotionDetectionThreshold(uint8_t threshold) { + I2Cdev::writeByte(devAddr, MPU6050_RA_ZRMOT_THR, threshold); +} + +// ZRMOT_DUR register + +/** Get zero motion detection event duration threshold. + This register configures the duration counter threshold for Zero Motion + interrupt generation. The duration counter ticks at 16 Hz, therefore + ZRMOT_DUR has a unit of 1 LSB = 64 ms. The Zero Motion duration counter + increments while the absolute value of the accelerometer measurements are + each less than the detection threshold (Register 33). The Zero Motion + interrupt is triggered when the Zero Motion duration counter reaches the time + count specified in this register. + + For more details on the Zero Motion detection interrupt, see Section 8.4 of + the MPU-6000/MPU-6050 Product Specification document, as well as Registers 56 + and 58 of this document. + + @return Current zero motion detection duration threshold value (LSB = 64ms) + @see MPU6050_RA_ZRMOT_DUR +*/ +uint8_t MPU6050::getZeroMotionDetectionDuration() { + I2Cdev::readByte(devAddr, MPU6050_RA_ZRMOT_DUR, buffer); + return buffer[0]; +} +/** Set zero motion detection event duration threshold. + @param duration New zero motion detection duration threshold value (LSB = 1ms) + @see getZeroMotionDetectionDuration() + @see MPU6050_RA_ZRMOT_DUR +*/ +void MPU6050::setZeroMotionDetectionDuration(uint8_t duration) { + I2Cdev::writeByte(devAddr, MPU6050_RA_ZRMOT_DUR, duration); +} + +// FIFO_EN register + +/** Get temperature FIFO enabled value. + When set to 1, this bit enables TEMP_OUT_H and TEMP_OUT_L (Registers 65 and + 66) to be written into the FIFO buffer. + @return Current temperature FIFO enabled value + @see MPU6050_RA_FIFO_EN +*/ +bool MPU6050::getTempFIFOEnabled() { + I2Cdev::readBit(devAddr, MPU6050_RA_FIFO_EN, MPU6050_TEMP_FIFO_EN_BIT, buffer); + return buffer[0]; +} +/** Set temperature FIFO enabled value. + @param enabled New temperature FIFO enabled value + @see getTempFIFOEnabled() + @see MPU6050_RA_FIFO_EN +*/ +void MPU6050::setTempFIFOEnabled(bool enabled) { + I2Cdev::writeBit(devAddr, MPU6050_RA_FIFO_EN, MPU6050_TEMP_FIFO_EN_BIT, enabled); +} +/** Get gyroscope X-axis FIFO enabled value. + When set to 1, this bit enables GYRO_XOUT_H and GYRO_XOUT_L (Registers 67 and + 68) to be written into the FIFO buffer. + @return Current gyroscope X-axis FIFO enabled value + @see MPU6050_RA_FIFO_EN +*/ +bool MPU6050::getXGyroFIFOEnabled() { + I2Cdev::readBit(devAddr, MPU6050_RA_FIFO_EN, MPU6050_XG_FIFO_EN_BIT, buffer); + return buffer[0]; +} +/** Set gyroscope X-axis FIFO enabled value. + @param enabled New gyroscope X-axis FIFO enabled value + @see getXGyroFIFOEnabled() + @see MPU6050_RA_FIFO_EN +*/ +void MPU6050::setXGyroFIFOEnabled(bool enabled) { + I2Cdev::writeBit(devAddr, MPU6050_RA_FIFO_EN, MPU6050_XG_FIFO_EN_BIT, enabled); +} +/** Get gyroscope Y-axis FIFO enabled value. + When set to 1, this bit enables GYRO_YOUT_H and GYRO_YOUT_L (Registers 69 and + 70) to be written into the FIFO buffer. + @return Current gyroscope Y-axis FIFO enabled value + @see MPU6050_RA_FIFO_EN +*/ +bool MPU6050::getYGyroFIFOEnabled() { + I2Cdev::readBit(devAddr, MPU6050_RA_FIFO_EN, MPU6050_YG_FIFO_EN_BIT, buffer); + return buffer[0]; +} +/** Set gyroscope Y-axis FIFO enabled value. + @param enabled New gyroscope Y-axis FIFO enabled value + @see getYGyroFIFOEnabled() + @see MPU6050_RA_FIFO_EN +*/ +void MPU6050::setYGyroFIFOEnabled(bool enabled) { + I2Cdev::writeBit(devAddr, MPU6050_RA_FIFO_EN, MPU6050_YG_FIFO_EN_BIT, enabled); +} +/** Get gyroscope Z-axis FIFO enabled value. + When set to 1, this bit enables GYRO_ZOUT_H and GYRO_ZOUT_L (Registers 71 and + 72) to be written into the FIFO buffer. + @return Current gyroscope Z-axis FIFO enabled value + @see MPU6050_RA_FIFO_EN +*/ +bool MPU6050::getZGyroFIFOEnabled() { + I2Cdev::readBit(devAddr, MPU6050_RA_FIFO_EN, MPU6050_ZG_FIFO_EN_BIT, buffer); + return buffer[0]; +} +/** Set gyroscope Z-axis FIFO enabled value. + @param enabled New gyroscope Z-axis FIFO enabled value + @see getZGyroFIFOEnabled() + @see MPU6050_RA_FIFO_EN +*/ +void MPU6050::setZGyroFIFOEnabled(bool enabled) { + I2Cdev::writeBit(devAddr, MPU6050_RA_FIFO_EN, MPU6050_ZG_FIFO_EN_BIT, enabled); +} +/** Get accelerometer FIFO enabled value. + When set to 1, this bit enables ACCEL_XOUT_H, ACCEL_XOUT_L, ACCEL_YOUT_H, + ACCEL_YOUT_L, ACCEL_ZOUT_H, and ACCEL_ZOUT_L (Registers 59 to 64) to be + written into the FIFO buffer. + @return Current accelerometer FIFO enabled value + @see MPU6050_RA_FIFO_EN +*/ +bool MPU6050::getAccelFIFOEnabled() { + I2Cdev::readBit(devAddr, MPU6050_RA_FIFO_EN, MPU6050_ACCEL_FIFO_EN_BIT, buffer); + return buffer[0]; +} +/** Set accelerometer FIFO enabled value. + @param enabled New accelerometer FIFO enabled value + @see getAccelFIFOEnabled() + @see MPU6050_RA_FIFO_EN +*/ +void MPU6050::setAccelFIFOEnabled(bool enabled) { + I2Cdev::writeBit(devAddr, MPU6050_RA_FIFO_EN, MPU6050_ACCEL_FIFO_EN_BIT, enabled); +} +/** Get Slave 2 FIFO enabled value. + When set to 1, this bit enables EXT_SENS_DATA registers (Registers 73 to 96) + associated with Slave 2 to be written into the FIFO buffer. + @return Current Slave 2 FIFO enabled value + @see MPU6050_RA_FIFO_EN +*/ +bool MPU6050::getSlave2FIFOEnabled() { + I2Cdev::readBit(devAddr, MPU6050_RA_FIFO_EN, MPU6050_SLV2_FIFO_EN_BIT, buffer); + return buffer[0]; +} +/** Set Slave 2 FIFO enabled value. + @param enabled New Slave 2 FIFO enabled value + @see getSlave2FIFOEnabled() + @see MPU6050_RA_FIFO_EN +*/ +void MPU6050::setSlave2FIFOEnabled(bool enabled) { + I2Cdev::writeBit(devAddr, MPU6050_RA_FIFO_EN, MPU6050_SLV2_FIFO_EN_BIT, enabled); +} +/** Get Slave 1 FIFO enabled value. + When set to 1, this bit enables EXT_SENS_DATA registers (Registers 73 to 96) + associated with Slave 1 to be written into the FIFO buffer. + @return Current Slave 1 FIFO enabled value + @see MPU6050_RA_FIFO_EN +*/ +bool MPU6050::getSlave1FIFOEnabled() { + I2Cdev::readBit(devAddr, MPU6050_RA_FIFO_EN, MPU6050_SLV1_FIFO_EN_BIT, buffer); + return buffer[0]; +} +/** Set Slave 1 FIFO enabled value. + @param enabled New Slave 1 FIFO enabled value + @see getSlave1FIFOEnabled() + @see MPU6050_RA_FIFO_EN +*/ +void MPU6050::setSlave1FIFOEnabled(bool enabled) { + I2Cdev::writeBit(devAddr, MPU6050_RA_FIFO_EN, MPU6050_SLV1_FIFO_EN_BIT, enabled); +} +/** Get Slave 0 FIFO enabled value. + When set to 1, this bit enables EXT_SENS_DATA registers (Registers 73 to 96) + associated with Slave 0 to be written into the FIFO buffer. + @return Current Slave 0 FIFO enabled value + @see MPU6050_RA_FIFO_EN +*/ +bool MPU6050::getSlave0FIFOEnabled() { + I2Cdev::readBit(devAddr, MPU6050_RA_FIFO_EN, MPU6050_SLV0_FIFO_EN_BIT, buffer); + return buffer[0]; +} +/** Set Slave 0 FIFO enabled value. + @param enabled New Slave 0 FIFO enabled value + @see getSlave0FIFOEnabled() + @see MPU6050_RA_FIFO_EN +*/ +void MPU6050::setSlave0FIFOEnabled(bool enabled) { + I2Cdev::writeBit(devAddr, MPU6050_RA_FIFO_EN, MPU6050_SLV0_FIFO_EN_BIT, enabled); +} + +// I2C_MST_CTRL register + +/** Get multi-master enabled value. + Multi-master capability allows multiple I2C masters to operate on the same + bus. In circuits where multi-master capability is required, set MULT_MST_EN + to 1. This will increase current drawn by approximately 30uA. + + In circuits where multi-master capability is required, the state of the I2C + bus must always be monitored by each separate I2C Master. Before an I2C + Master can assume arbitration of the bus, it must first confirm that no other + I2C Master has arbitration of the bus. When MULT_MST_EN is set to 1, the + MPU-60X0's bus arbitration detection logic is turned on, enabling it to + detect when the bus is available. + + @return Current multi-master enabled value + @see MPU6050_RA_I2C_MST_CTRL +*/ +bool MPU6050::getMultiMasterEnabled() { + I2Cdev::readBit(devAddr, MPU6050_RA_I2C_MST_CTRL, MPU6050_MULT_MST_EN_BIT, buffer); + return buffer[0]; +} +/** Set multi-master enabled value. + @param enabled New multi-master enabled value + @see getMultiMasterEnabled() + @see MPU6050_RA_I2C_MST_CTRL +*/ +void MPU6050::setMultiMasterEnabled(bool enabled) { + I2Cdev::writeBit(devAddr, MPU6050_RA_I2C_MST_CTRL, MPU6050_MULT_MST_EN_BIT, enabled); +} +/** Get wait-for-external-sensor-data enabled value. + When the WAIT_FOR_ES bit is set to 1, the Data Ready interrupt will be + delayed until External Sensor data from the Slave Devices are loaded into the + EXT_SENS_DATA registers. This is used to ensure that both the internal sensor + data (i.e. from gyro and accel) and external sensor data have been loaded to + their respective data registers (i.e. the data is synced) when the Data Ready + interrupt is triggered. + + @return Current wait-for-external-sensor-data enabled value + @see MPU6050_RA_I2C_MST_CTRL +*/ +bool MPU6050::getWaitForExternalSensorEnabled() { + I2Cdev::readBit(devAddr, MPU6050_RA_I2C_MST_CTRL, MPU6050_WAIT_FOR_ES_BIT, buffer); + return buffer[0]; +} +/** Set wait-for-external-sensor-data enabled value. + @param enabled New wait-for-external-sensor-data enabled value + @see getWaitForExternalSensorEnabled() + @see MPU6050_RA_I2C_MST_CTRL +*/ +void MPU6050::setWaitForExternalSensorEnabled(bool enabled) { + I2Cdev::writeBit(devAddr, MPU6050_RA_I2C_MST_CTRL, MPU6050_WAIT_FOR_ES_BIT, enabled); +} +/** Get Slave 3 FIFO enabled value. + When set to 1, this bit enables EXT_SENS_DATA registers (Registers 73 to 96) + associated with Slave 3 to be written into the FIFO buffer. + @return Current Slave 3 FIFO enabled value + @see MPU6050_RA_MST_CTRL +*/ +bool MPU6050::getSlave3FIFOEnabled() { + I2Cdev::readBit(devAddr, MPU6050_RA_I2C_MST_CTRL, MPU6050_SLV_3_FIFO_EN_BIT, buffer); + return buffer[0]; +} +/** Set Slave 3 FIFO enabled value. + @param enabled New Slave 3 FIFO enabled value + @see getSlave3FIFOEnabled() + @see MPU6050_RA_MST_CTRL +*/ +void MPU6050::setSlave3FIFOEnabled(bool enabled) { + I2Cdev::writeBit(devAddr, MPU6050_RA_I2C_MST_CTRL, MPU6050_SLV_3_FIFO_EN_BIT, enabled); +} +/** Get slave read/write transition enabled value. + The I2C_MST_P_NSR bit configures the I2C Master's transition from one slave + read to the next slave read. If the bit equals 0, there will be a restart + between reads. If the bit equals 1, there will be a stop followed by a start + of the following read. When a write transaction follows a read transaction, + the stop followed by a start of the successive write will be always used. + + @return Current slave read/write transition enabled value + @see MPU6050_RA_I2C_MST_CTRL +*/ +bool MPU6050::getSlaveReadWriteTransitionEnabled() { + I2Cdev::readBit(devAddr, MPU6050_RA_I2C_MST_CTRL, MPU6050_I2C_MST_P_NSR_BIT, buffer); + return buffer[0]; +} +/** Set slave read/write transition enabled value. + @param enabled New slave read/write transition enabled value + @see getSlaveReadWriteTransitionEnabled() + @see MPU6050_RA_I2C_MST_CTRL +*/ +void MPU6050::setSlaveReadWriteTransitionEnabled(bool enabled) { + I2Cdev::writeBit(devAddr, MPU6050_RA_I2C_MST_CTRL, MPU6050_I2C_MST_P_NSR_BIT, enabled); +} +/** Get I2C master clock speed. + I2C_MST_CLK is a 4 bit unsigned value which configures a divider on the + MPU-60X0 internal 8MHz clock. It sets the I2C master clock speed according to + the following table: + +
+    I2C_MST_CLK | I2C Master Clock Speed | 8MHz Clock Divider
+    ------------+------------------------+-------------------
+    0           | 348kHz                 | 23
+    1           | 333kHz                 | 24
+    2           | 320kHz                 | 25
+    3           | 308kHz                 | 26
+    4           | 296kHz                 | 27
+    5           | 286kHz                 | 28
+    6           | 276kHz                 | 29
+    7           | 267kHz                 | 30
+    8           | 258kHz                 | 31
+    9           | 500kHz                 | 16
+    10          | 471kHz                 | 17
+    11          | 444kHz                 | 18
+    12          | 421kHz                 | 19
+    13          | 400kHz                 | 20
+    14          | 381kHz                 | 21
+    15          | 364kHz                 | 22
+    
+ + @return Current I2C master clock speed + @see MPU6050_RA_I2C_MST_CTRL +*/ +uint8_t MPU6050::getMasterClockSpeed() { + I2Cdev::readBits(devAddr, MPU6050_RA_I2C_MST_CTRL, MPU6050_I2C_MST_CLK_BIT, MPU6050_I2C_MST_CLK_LENGTH, buffer); + return buffer[0]; +} +/** Set I2C master clock speed. + @reparam speed Current I2C master clock speed + @see MPU6050_RA_I2C_MST_CTRL +*/ +void MPU6050::setMasterClockSpeed(uint8_t speed) { + I2Cdev::writeBits(devAddr, MPU6050_RA_I2C_MST_CTRL, MPU6050_I2C_MST_CLK_BIT, MPU6050_I2C_MST_CLK_LENGTH, speed); +} + +// I2C_SLV* registers (Slave 0-3) + +/** Get the I2C address of the specified slave (0-3). + Note that Bit 7 (MSB) controls read/write mode. If Bit 7 is set, it's a read + operation, and if it is cleared, then it's a write operation. The remaining + bits (6-0) are the 7-bit device address of the slave device. + + In read mode, the result of the read is placed in the lowest available + EXT_SENS_DATA register. For further information regarding the allocation of + read results, please refer to the EXT_SENS_DATA register description + (Registers 73 - 96). + + The MPU-6050 supports a total of five slaves, but Slave 4 has unique + characteristics, and so it has its own functions (getSlave4* and setSlave4*). + + I2C data transactions are performed at the Sample Rate, as defined in + Register 25. The user is responsible for ensuring that I2C data transactions + to and from each enabled Slave can be completed within a single period of the + Sample Rate. + + The I2C slave access rate can be reduced relative to the Sample Rate. This + reduced access rate is determined by I2C_MST_DLY (Register 52). Whether a + slave's access rate is reduced relative to the Sample Rate is determined by + I2C_MST_DELAY_CTRL (Register 103). + + The processing order for the slaves is fixed. The sequence followed for + processing the slaves is Slave 0, Slave 1, Slave 2, Slave 3 and Slave 4. If a + particular Slave is disabled it will be skipped. + + Each slave can either be accessed at the sample rate or at a reduced sample + rate. In a case where some slaves are accessed at the Sample Rate and some + slaves are accessed at the reduced rate, the sequence of accessing the slaves + (Slave 0 to Slave 4) is still followed. However, the reduced rate slaves will + be skipped if their access rate dictates that they should not be accessed + during that particular cycle. For further information regarding the reduced + access rate, please refer to Register 52. Whether a slave is accessed at the + Sample Rate or at the reduced rate is determined by the Delay Enable bits in + Register 103. + + @param num Slave number (0-3) + @return Current address for specified slave + @see MPU6050_RA_I2C_SLV0_ADDR +*/ +uint8_t MPU6050::getSlaveAddress(uint8_t num) { + if (num > 3) { + return 0; + } + I2Cdev::readByte(devAddr, MPU6050_RA_I2C_SLV0_ADDR + num * 3, buffer); + return buffer[0]; +} +/** Set the I2C address of the specified slave (0-3). + @param num Slave number (0-3) + @param address New address for specified slave + @see getSlaveAddress() + @see MPU6050_RA_I2C_SLV0_ADDR +*/ +void MPU6050::setSlaveAddress(uint8_t num, uint8_t address) { + if (num > 3) { + return; + } + I2Cdev::writeByte(devAddr, MPU6050_RA_I2C_SLV0_ADDR + num * 3, address); +} +/** Get the active internal register for the specified slave (0-3). + Read/write operations for this slave will be done to whatever internal + register address is stored in this MPU register. + + The MPU-6050 supports a total of five slaves, but Slave 4 has unique + characteristics, and so it has its own functions. + + @param num Slave number (0-3) + @return Current active register for specified slave + @see MPU6050_RA_I2C_SLV0_REG +*/ +uint8_t MPU6050::getSlaveRegister(uint8_t num) { + if (num > 3) { + return 0; + } + I2Cdev::readByte(devAddr, MPU6050_RA_I2C_SLV0_REG + num * 3, buffer); + return buffer[0]; +} +/** Set the active internal register for the specified slave (0-3). + @param num Slave number (0-3) + @param reg New active register for specified slave + @see getSlaveRegister() + @see MPU6050_RA_I2C_SLV0_REG +*/ +void MPU6050::setSlaveRegister(uint8_t num, uint8_t reg) { + if (num > 3) { + return; + } + I2Cdev::writeByte(devAddr, MPU6050_RA_I2C_SLV0_REG + num * 3, reg); +} +/** Get the enabled value for the specified slave (0-3). + When set to 1, this bit enables Slave 0 for data transfer operations. When + cleared to 0, this bit disables Slave 0 from data transfer operations. + @param num Slave number (0-3) + @return Current enabled value for specified slave + @see MPU6050_RA_I2C_SLV0_CTRL +*/ +bool MPU6050::getSlaveEnabled(uint8_t num) { + if (num > 3) { + return 0; + } + I2Cdev::readBit(devAddr, MPU6050_RA_I2C_SLV0_CTRL + num * 3, MPU6050_I2C_SLV_EN_BIT, buffer); + return buffer[0]; +} +/** Set the enabled value for the specified slave (0-3). + @param num Slave number (0-3) + @param enabled New enabled value for specified slave + @see getSlaveEnabled() + @see MPU6050_RA_I2C_SLV0_CTRL +*/ +void MPU6050::setSlaveEnabled(uint8_t num, bool enabled) { + if (num > 3) { + return; + } + I2Cdev::writeBit(devAddr, MPU6050_RA_I2C_SLV0_CTRL + num * 3, MPU6050_I2C_SLV_EN_BIT, enabled); +} +/** Get word pair byte-swapping enabled for the specified slave (0-3). + When set to 1, this bit enables byte swapping. When byte swapping is enabled, + the high and low bytes of a word pair are swapped. Please refer to + I2C_SLV0_GRP for the pairing convention of the word pairs. When cleared to 0, + bytes transferred to and from Slave 0 will be written to EXT_SENS_DATA + registers in the order they were transferred. + + @param num Slave number (0-3) + @return Current word pair byte-swapping enabled value for specified slave + @see MPU6050_RA_I2C_SLV0_CTRL +*/ +bool MPU6050::getSlaveWordByteSwap(uint8_t num) { + if (num > 3) { + return 0; + } + I2Cdev::readBit(devAddr, MPU6050_RA_I2C_SLV0_CTRL + num * 3, MPU6050_I2C_SLV_BYTE_SW_BIT, buffer); + return buffer[0]; +} +/** Set word pair byte-swapping enabled for the specified slave (0-3). + @param num Slave number (0-3) + @param enabled New word pair byte-swapping enabled value for specified slave + @see getSlaveWordByteSwap() + @see MPU6050_RA_I2C_SLV0_CTRL +*/ +void MPU6050::setSlaveWordByteSwap(uint8_t num, bool enabled) { + if (num > 3) { + return; + } + I2Cdev::writeBit(devAddr, MPU6050_RA_I2C_SLV0_CTRL + num * 3, MPU6050_I2C_SLV_BYTE_SW_BIT, enabled); +} +/** Get write mode for the specified slave (0-3). + When set to 1, the transaction will read or write data only. When cleared to + 0, the transaction will write a register address prior to reading or writing + data. This should equal 0 when specifying the register address within the + Slave device to/from which the ensuing data transaction will take place. + + @param num Slave number (0-3) + @return Current write mode for specified slave (0 = register address + data, 1 = data only) + @see MPU6050_RA_I2C_SLV0_CTRL +*/ +bool MPU6050::getSlaveWriteMode(uint8_t num) { + if (num > 3) { + return 0; + } + I2Cdev::readBit(devAddr, MPU6050_RA_I2C_SLV0_CTRL + num * 3, MPU6050_I2C_SLV_REG_DIS_BIT, buffer); + return buffer[0]; +} +/** Set write mode for the specified slave (0-3). + @param num Slave number (0-3) + @param mode New write mode for specified slave (0 = register address + data, 1 = data only) + @see getSlaveWriteMode() + @see MPU6050_RA_I2C_SLV0_CTRL +*/ +void MPU6050::setSlaveWriteMode(uint8_t num, bool mode) { + if (num > 3) { + return; + } + I2Cdev::writeBit(devAddr, MPU6050_RA_I2C_SLV0_CTRL + num * 3, MPU6050_I2C_SLV_REG_DIS_BIT, mode); +} +/** Get word pair grouping order offset for the specified slave (0-3). + This sets specifies the grouping order of word pairs received from registers. + When cleared to 0, bytes from register addresses 0 and 1, 2 and 3, etc (even, + then odd register addresses) are paired to form a word. When set to 1, bytes + from register addresses are paired 1 and 2, 3 and 4, etc. (odd, then even + register addresses) are paired to form a word. + + @param num Slave number (0-3) + @return Current word pair grouping order offset for specified slave + @see MPU6050_RA_I2C_SLV0_CTRL +*/ +bool MPU6050::getSlaveWordGroupOffset(uint8_t num) { + if (num > 3) { + return 0; + } + I2Cdev::readBit(devAddr, MPU6050_RA_I2C_SLV0_CTRL + num * 3, MPU6050_I2C_SLV_GRP_BIT, buffer); + return buffer[0]; +} +/** Set word pair grouping order offset for the specified slave (0-3). + @param num Slave number (0-3) + @param enabled New word pair grouping order offset for specified slave + @see getSlaveWordGroupOffset() + @see MPU6050_RA_I2C_SLV0_CTRL +*/ +void MPU6050::setSlaveWordGroupOffset(uint8_t num, bool enabled) { + if (num > 3) { + return; + } + I2Cdev::writeBit(devAddr, MPU6050_RA_I2C_SLV0_CTRL + num * 3, MPU6050_I2C_SLV_GRP_BIT, enabled); +} +/** Get number of bytes to read for the specified slave (0-3). + Specifies the number of bytes transferred to and from Slave 0. Clearing this + bit to 0 is equivalent to disabling the register by writing 0 to I2C_SLV0_EN. + @param num Slave number (0-3) + @return Number of bytes to read for specified slave + @see MPU6050_RA_I2C_SLV0_CTRL +*/ +uint8_t MPU6050::getSlaveDataLength(uint8_t num) { + if (num > 3) { + return 0; + } + I2Cdev::readBits(devAddr, MPU6050_RA_I2C_SLV0_CTRL + num * 3, MPU6050_I2C_SLV_LEN_BIT, MPU6050_I2C_SLV_LEN_LENGTH, + buffer); + return buffer[0]; +} +/** Set number of bytes to read for the specified slave (0-3). + @param num Slave number (0-3) + @param length Number of bytes to read for specified slave + @see getSlaveDataLength() + @see MPU6050_RA_I2C_SLV0_CTRL +*/ +void MPU6050::setSlaveDataLength(uint8_t num, uint8_t length) { + if (num > 3) { + return; + } + I2Cdev::writeBits(devAddr, MPU6050_RA_I2C_SLV0_CTRL + num * 3, MPU6050_I2C_SLV_LEN_BIT, MPU6050_I2C_SLV_LEN_LENGTH, + length); +} + +// I2C_SLV* registers (Slave 4) + +/** Get the I2C address of Slave 4. + Note that Bit 7 (MSB) controls read/write mode. If Bit 7 is set, it's a read + operation, and if it is cleared, then it's a write operation. The remaining + bits (6-0) are the 7-bit device address of the slave device. + + @return Current address for Slave 4 + @see getSlaveAddress() + @see MPU6050_RA_I2C_SLV4_ADDR +*/ +uint8_t MPU6050::getSlave4Address() { + I2Cdev::readByte(devAddr, MPU6050_RA_I2C_SLV4_ADDR, buffer); + return buffer[0]; +} +/** Set the I2C address of Slave 4. + @param address New address for Slave 4 + @see getSlave4Address() + @see MPU6050_RA_I2C_SLV4_ADDR +*/ +void MPU6050::setSlave4Address(uint8_t address) { + I2Cdev::writeByte(devAddr, MPU6050_RA_I2C_SLV4_ADDR, address); +} +/** Get the active internal register for the Slave 4. + Read/write operations for this slave will be done to whatever internal + register address is stored in this MPU register. + + @return Current active register for Slave 4 + @see MPU6050_RA_I2C_SLV4_REG +*/ +uint8_t MPU6050::getSlave4Register() { + I2Cdev::readByte(devAddr, MPU6050_RA_I2C_SLV4_REG, buffer); + return buffer[0]; +} +/** Set the active internal register for Slave 4. + @param reg New active register for Slave 4 + @see getSlave4Register() + @see MPU6050_RA_I2C_SLV4_REG +*/ +void MPU6050::setSlave4Register(uint8_t reg) { + I2Cdev::writeByte(devAddr, MPU6050_RA_I2C_SLV4_REG, reg); +} +/** Set new byte to write to Slave 4. + This register stores the data to be written into the Slave 4. If I2C_SLV4_RW + is set 1 (set to read), this register has no effect. + @param data New byte to write to Slave 4 + @see MPU6050_RA_I2C_SLV4_DO +*/ +void MPU6050::setSlave4OutputByte(uint8_t data) { + I2Cdev::writeByte(devAddr, MPU6050_RA_I2C_SLV4_DO, data); +} +/** Get the enabled value for the Slave 4. + When set to 1, this bit enables Slave 4 for data transfer operations. When + cleared to 0, this bit disables Slave 4 from data transfer operations. + @return Current enabled value for Slave 4 + @see MPU6050_RA_I2C_SLV4_CTRL +*/ +bool MPU6050::getSlave4Enabled() { + I2Cdev::readBit(devAddr, MPU6050_RA_I2C_SLV4_CTRL, MPU6050_I2C_SLV4_EN_BIT, buffer); + return buffer[0]; +} +/** Set the enabled value for Slave 4. + @param enabled New enabled value for Slave 4 + @see getSlave4Enabled() + @see MPU6050_RA_I2C_SLV4_CTRL +*/ +void MPU6050::setSlave4Enabled(bool enabled) { + I2Cdev::writeBit(devAddr, MPU6050_RA_I2C_SLV4_CTRL, MPU6050_I2C_SLV4_EN_BIT, enabled); +} +/** Get the enabled value for Slave 4 transaction interrupts. + When set to 1, this bit enables the generation of an interrupt signal upon + completion of a Slave 4 transaction. When cleared to 0, this bit disables the + generation of an interrupt signal upon completion of a Slave 4 transaction. + The interrupt status can be observed in Register 54. + + @return Current enabled value for Slave 4 transaction interrupts. + @see MPU6050_RA_I2C_SLV4_CTRL +*/ +bool MPU6050::getSlave4InterruptEnabled() { + I2Cdev::readBit(devAddr, MPU6050_RA_I2C_SLV4_CTRL, MPU6050_I2C_SLV4_INT_EN_BIT, buffer); + return buffer[0]; +} +/** Set the enabled value for Slave 4 transaction interrupts. + @param enabled New enabled value for Slave 4 transaction interrupts. + @see getSlave4InterruptEnabled() + @see MPU6050_RA_I2C_SLV4_CTRL +*/ +void MPU6050::setSlave4InterruptEnabled(bool enabled) { + I2Cdev::writeBit(devAddr, MPU6050_RA_I2C_SLV4_CTRL, MPU6050_I2C_SLV4_INT_EN_BIT, enabled); +} +/** Get write mode for Slave 4. + When set to 1, the transaction will read or write data only. When cleared to + 0, the transaction will write a register address prior to reading or writing + data. This should equal 0 when specifying the register address within the + Slave device to/from which the ensuing data transaction will take place. + + @return Current write mode for Slave 4 (0 = register address + data, 1 = data only) + @see MPU6050_RA_I2C_SLV4_CTRL +*/ +bool MPU6050::getSlave4WriteMode() { + I2Cdev::readBit(devAddr, MPU6050_RA_I2C_SLV4_CTRL, MPU6050_I2C_SLV4_REG_DIS_BIT, buffer); + return buffer[0]; +} +/** Set write mode for the Slave 4. + @param mode New write mode for Slave 4 (0 = register address + data, 1 = data only) + @see getSlave4WriteMode() + @see MPU6050_RA_I2C_SLV4_CTRL +*/ +void MPU6050::setSlave4WriteMode(bool mode) { + I2Cdev::writeBit(devAddr, MPU6050_RA_I2C_SLV4_CTRL, MPU6050_I2C_SLV4_REG_DIS_BIT, mode); +} +/** Get Slave 4 master delay value. + This configures the reduced access rate of I2C slaves relative to the Sample + Rate. When a slave's access rate is decreased relative to the Sample Rate, + the slave is accessed every: + + 1 / (1 + I2C_MST_DLY) samples + + This base Sample Rate in turn is determined by SMPLRT_DIV (register 25) and + DLPF_CFG (register 26). Whether a slave's access rate is reduced relative to + the Sample Rate is determined by I2C_MST_DELAY_CTRL (register 103). For + further information regarding the Sample Rate, please refer to register 25. + + @return Current Slave 4 master delay value + @see MPU6050_RA_I2C_SLV4_CTRL +*/ +uint8_t MPU6050::getSlave4MasterDelay() { + I2Cdev::readBits(devAddr, MPU6050_RA_I2C_SLV4_CTRL, MPU6050_I2C_SLV4_MST_DLY_BIT, MPU6050_I2C_SLV4_MST_DLY_LENGTH, + buffer); + return buffer[0]; +} +/** Set Slave 4 master delay value. + @param delay New Slave 4 master delay value + @see getSlave4MasterDelay() + @see MPU6050_RA_I2C_SLV4_CTRL +*/ +void MPU6050::setSlave4MasterDelay(uint8_t delay) { + I2Cdev::writeBits(devAddr, MPU6050_RA_I2C_SLV4_CTRL, MPU6050_I2C_SLV4_MST_DLY_BIT, MPU6050_I2C_SLV4_MST_DLY_LENGTH, + delay); +} +/** Get last available byte read from Slave 4. + This register stores the data read from Slave 4. This field is populated + after a read transaction. + @return Last available byte read from to Slave 4 + @see MPU6050_RA_I2C_SLV4_DI +*/ +uint8_t MPU6050::getSlate4InputByte() { + I2Cdev::readByte(devAddr, MPU6050_RA_I2C_SLV4_DI, buffer); + return buffer[0]; +} + +// I2C_MST_STATUS register + +/** Get FSYNC interrupt status. + This bit reflects the status of the FSYNC interrupt from an external device + into the MPU-60X0. This is used as a way to pass an external interrupt + through the MPU-60X0 to the host application processor. When set to 1, this + bit will cause an interrupt if FSYNC_INT_EN is asserted in INT_PIN_CFG + (Register 55). + @return FSYNC interrupt status + @see MPU6050_RA_I2C_MST_STATUS +*/ +bool MPU6050::getPassthroughStatus() { + I2Cdev::readBit(devAddr, MPU6050_RA_I2C_MST_STATUS, MPU6050_MST_PASS_THROUGH_BIT, buffer); + return buffer[0]; +} +/** Get Slave 4 transaction done status. + Automatically sets to 1 when a Slave 4 transaction has completed. This + triggers an interrupt if the I2C_MST_INT_EN bit in the INT_ENABLE register + (Register 56) is asserted and if the SLV_4_DONE_INT bit is asserted in the + I2C_SLV4_CTRL register (Register 52). + @return Slave 4 transaction done status + @see MPU6050_RA_I2C_MST_STATUS +*/ +bool MPU6050::getSlave4IsDone() { + I2Cdev::readBit(devAddr, MPU6050_RA_I2C_MST_STATUS, MPU6050_MST_I2C_SLV4_DONE_BIT, buffer); + return buffer[0]; +} +/** Get master arbitration lost status. + This bit automatically sets to 1 when the I2C Master has lost arbitration of + the auxiliary I2C bus (an error condition). This triggers an interrupt if the + I2C_MST_INT_EN bit in the INT_ENABLE register (Register 56) is asserted. + @return Master arbitration lost status + @see MPU6050_RA_I2C_MST_STATUS +*/ +bool MPU6050::getLostArbitration() { + I2Cdev::readBit(devAddr, MPU6050_RA_I2C_MST_STATUS, MPU6050_MST_I2C_LOST_ARB_BIT, buffer); + return buffer[0]; +} +/** Get Slave 4 NACK status. + This bit automatically sets to 1 when the I2C Master receives a NACK in a + transaction with Slave 4. This triggers an interrupt if the I2C_MST_INT_EN + bit in the INT_ENABLE register (Register 56) is asserted. + @return Slave 4 NACK interrupt status + @see MPU6050_RA_I2C_MST_STATUS +*/ +bool MPU6050::getSlave4Nack() { + I2Cdev::readBit(devAddr, MPU6050_RA_I2C_MST_STATUS, MPU6050_MST_I2C_SLV4_NACK_BIT, buffer); + return buffer[0]; +} +/** Get Slave 3 NACK status. + This bit automatically sets to 1 when the I2C Master receives a NACK in a + transaction with Slave 3. This triggers an interrupt if the I2C_MST_INT_EN + bit in the INT_ENABLE register (Register 56) is asserted. + @return Slave 3 NACK interrupt status + @see MPU6050_RA_I2C_MST_STATUS +*/ +bool MPU6050::getSlave3Nack() { + I2Cdev::readBit(devAddr, MPU6050_RA_I2C_MST_STATUS, MPU6050_MST_I2C_SLV3_NACK_BIT, buffer); + return buffer[0]; +} +/** Get Slave 2 NACK status. + This bit automatically sets to 1 when the I2C Master receives a NACK in a + transaction with Slave 2. This triggers an interrupt if the I2C_MST_INT_EN + bit in the INT_ENABLE register (Register 56) is asserted. + @return Slave 2 NACK interrupt status + @see MPU6050_RA_I2C_MST_STATUS +*/ +bool MPU6050::getSlave2Nack() { + I2Cdev::readBit(devAddr, MPU6050_RA_I2C_MST_STATUS, MPU6050_MST_I2C_SLV2_NACK_BIT, buffer); + return buffer[0]; +} +/** Get Slave 1 NACK status. + This bit automatically sets to 1 when the I2C Master receives a NACK in a + transaction with Slave 1. This triggers an interrupt if the I2C_MST_INT_EN + bit in the INT_ENABLE register (Register 56) is asserted. + @return Slave 1 NACK interrupt status + @see MPU6050_RA_I2C_MST_STATUS +*/ +bool MPU6050::getSlave1Nack() { + I2Cdev::readBit(devAddr, MPU6050_RA_I2C_MST_STATUS, MPU6050_MST_I2C_SLV1_NACK_BIT, buffer); + return buffer[0]; +} +/** Get Slave 0 NACK status. + This bit automatically sets to 1 when the I2C Master receives a NACK in a + transaction with Slave 0. This triggers an interrupt if the I2C_MST_INT_EN + bit in the INT_ENABLE register (Register 56) is asserted. + @return Slave 0 NACK interrupt status + @see MPU6050_RA_I2C_MST_STATUS +*/ +bool MPU6050::getSlave0Nack() { + I2Cdev::readBit(devAddr, MPU6050_RA_I2C_MST_STATUS, MPU6050_MST_I2C_SLV0_NACK_BIT, buffer); + return buffer[0]; +} + +// INT_PIN_CFG register + +/** Get interrupt logic level mode. + Will be set 0 for active-high, 1 for active-low. + @return Current interrupt mode (0=active-high, 1=active-low) + @see MPU6050_RA_INT_PIN_CFG + @see MPU6050_INTCFG_INT_LEVEL_BIT +*/ +bool MPU6050::getInterruptMode() { + I2Cdev::readBit(devAddr, MPU6050_RA_INT_PIN_CFG, MPU6050_INTCFG_INT_LEVEL_BIT, buffer); + return buffer[0]; +} +/** Set interrupt logic level mode. + @param mode New interrupt mode (0=active-high, 1=active-low) + @see getInterruptMode() + @see MPU6050_RA_INT_PIN_CFG + @see MPU6050_INTCFG_INT_LEVEL_BIT +*/ +void MPU6050::setInterruptMode(bool mode) { + I2Cdev::writeBit(devAddr, MPU6050_RA_INT_PIN_CFG, MPU6050_INTCFG_INT_LEVEL_BIT, mode); +} +/** Get interrupt drive mode. + Will be set 0 for push-pull, 1 for open-drain. + @return Current interrupt drive mode (0=push-pull, 1=open-drain) + @see MPU6050_RA_INT_PIN_CFG + @see MPU6050_INTCFG_INT_OPEN_BIT +*/ +bool MPU6050::getInterruptDrive() { + I2Cdev::readBit(devAddr, MPU6050_RA_INT_PIN_CFG, MPU6050_INTCFG_INT_OPEN_BIT, buffer); + return buffer[0]; +} +/** Set interrupt drive mode. + @param drive New interrupt drive mode (0=push-pull, 1=open-drain) + @see getInterruptDrive() + @see MPU6050_RA_INT_PIN_CFG + @see MPU6050_INTCFG_INT_OPEN_BIT +*/ +void MPU6050::setInterruptDrive(bool drive) { + I2Cdev::writeBit(devAddr, MPU6050_RA_INT_PIN_CFG, MPU6050_INTCFG_INT_OPEN_BIT, drive); +} +/** Get interrupt latch mode. + Will be set 0 for 50us-pulse, 1 for latch-until-int-cleared. + @return Current latch mode (0=50us-pulse, 1=latch-until-int-cleared) + @see MPU6050_RA_INT_PIN_CFG + @see MPU6050_INTCFG_LATCH_INT_EN_BIT +*/ +bool MPU6050::getInterruptLatch() { + I2Cdev::readBit(devAddr, MPU6050_RA_INT_PIN_CFG, MPU6050_INTCFG_LATCH_INT_EN_BIT, buffer); + return buffer[0]; +} +/** Set interrupt latch mode. + @param latch New latch mode (0=50us-pulse, 1=latch-until-int-cleared) + @see getInterruptLatch() + @see MPU6050_RA_INT_PIN_CFG + @see MPU6050_INTCFG_LATCH_INT_EN_BIT +*/ +void MPU6050::setInterruptLatch(bool latch) { + I2Cdev::writeBit(devAddr, MPU6050_RA_INT_PIN_CFG, MPU6050_INTCFG_LATCH_INT_EN_BIT, latch); +} +/** Get interrupt latch clear mode. + Will be set 0 for status-read-only, 1 for any-register-read. + @return Current latch clear mode (0=status-read-only, 1=any-register-read) + @see MPU6050_RA_INT_PIN_CFG + @see MPU6050_INTCFG_INT_RD_CLEAR_BIT +*/ +bool MPU6050::getInterruptLatchClear() { + I2Cdev::readBit(devAddr, MPU6050_RA_INT_PIN_CFG, MPU6050_INTCFG_INT_RD_CLEAR_BIT, buffer); + return buffer[0]; +} +/** Set interrupt latch clear mode. + @param clear New latch clear mode (0=status-read-only, 1=any-register-read) + @see getInterruptLatchClear() + @see MPU6050_RA_INT_PIN_CFG + @see MPU6050_INTCFG_INT_RD_CLEAR_BIT +*/ +void MPU6050::setInterruptLatchClear(bool clear) { + I2Cdev::writeBit(devAddr, MPU6050_RA_INT_PIN_CFG, MPU6050_INTCFG_INT_RD_CLEAR_BIT, clear); +} +/** Get FSYNC interrupt logic level mode. + @return Current FSYNC interrupt mode (0=active-high, 1=active-low) + @see getFSyncInterruptMode() + @see MPU6050_RA_INT_PIN_CFG + @see MPU6050_INTCFG_FSYNC_INT_LEVEL_BIT +*/ +bool MPU6050::getFSyncInterruptLevel() { + I2Cdev::readBit(devAddr, MPU6050_RA_INT_PIN_CFG, MPU6050_INTCFG_FSYNC_INT_LEVEL_BIT, buffer); + return buffer[0]; +} +/** Set FSYNC interrupt logic level mode. + @param mode New FSYNC interrupt mode (0=active-high, 1=active-low) + @see getFSyncInterruptMode() + @see MPU6050_RA_INT_PIN_CFG + @see MPU6050_INTCFG_FSYNC_INT_LEVEL_BIT +*/ +void MPU6050::setFSyncInterruptLevel(bool level) { + I2Cdev::writeBit(devAddr, MPU6050_RA_INT_PIN_CFG, MPU6050_INTCFG_FSYNC_INT_LEVEL_BIT, level); +} +/** Get FSYNC pin interrupt enabled setting. + Will be set 0 for disabled, 1 for enabled. + @return Current interrupt enabled setting + @see MPU6050_RA_INT_PIN_CFG + @see MPU6050_INTCFG_FSYNC_INT_EN_BIT +*/ +bool MPU6050::getFSyncInterruptEnabled() { + I2Cdev::readBit(devAddr, MPU6050_RA_INT_PIN_CFG, MPU6050_INTCFG_FSYNC_INT_EN_BIT, buffer); + return buffer[0]; +} +/** Set FSYNC pin interrupt enabled setting. + @param enabled New FSYNC pin interrupt enabled setting + @see getFSyncInterruptEnabled() + @see MPU6050_RA_INT_PIN_CFG + @see MPU6050_INTCFG_FSYNC_INT_EN_BIT +*/ +void MPU6050::setFSyncInterruptEnabled(bool enabled) { + I2Cdev::writeBit(devAddr, MPU6050_RA_INT_PIN_CFG, MPU6050_INTCFG_FSYNC_INT_EN_BIT, enabled); +} +/** Get I2C bypass enabled status. + When this bit is equal to 1 and I2C_MST_EN (Register 106 bit[5]) is equal to + 0, the host application processor will be able to directly access the + auxiliary I2C bus of the MPU-60X0. When this bit is equal to 0, the host + application processor will not be able to directly access the auxiliary I2C + bus of the MPU-60X0 regardless of the state of I2C_MST_EN (Register 106 + bit[5]). + @return Current I2C bypass enabled status + @see MPU6050_RA_INT_PIN_CFG + @see MPU6050_INTCFG_I2C_BYPASS_EN_BIT +*/ +bool MPU6050::getI2CBypassEnabled() { + I2Cdev::readBit(devAddr, MPU6050_RA_INT_PIN_CFG, MPU6050_INTCFG_I2C_BYPASS_EN_BIT, buffer); + return buffer[0]; +} +/** Set I2C bypass enabled status. + When this bit is equal to 1 and I2C_MST_EN (Register 106 bit[5]) is equal to + 0, the host application processor will be able to directly access the + auxiliary I2C bus of the MPU-60X0. When this bit is equal to 0, the host + application processor will not be able to directly access the auxiliary I2C + bus of the MPU-60X0 regardless of the state of I2C_MST_EN (Register 106 + bit[5]). + @param enabled New I2C bypass enabled status + @see MPU6050_RA_INT_PIN_CFG + @see MPU6050_INTCFG_I2C_BYPASS_EN_BIT +*/ +void MPU6050::setI2CBypassEnabled(bool enabled) { + I2Cdev::writeBit(devAddr, MPU6050_RA_INT_PIN_CFG, MPU6050_INTCFG_I2C_BYPASS_EN_BIT, enabled); +} +/** Get reference clock output enabled status. + When this bit is equal to 1, a reference clock output is provided at the + CLKOUT pin. When this bit is equal to 0, the clock output is disabled. For + further information regarding CLKOUT, please refer to the MPU-60X0 Product + Specification document. + @return Current reference clock output enabled status + @see MPU6050_RA_INT_PIN_CFG + @see MPU6050_INTCFG_CLKOUT_EN_BIT +*/ +bool MPU6050::getClockOutputEnabled() { + I2Cdev::readBit(devAddr, MPU6050_RA_INT_PIN_CFG, MPU6050_INTCFG_CLKOUT_EN_BIT, buffer); + return buffer[0]; +} +/** Set reference clock output enabled status. + When this bit is equal to 1, a reference clock output is provided at the + CLKOUT pin. When this bit is equal to 0, the clock output is disabled. For + further information regarding CLKOUT, please refer to the MPU-60X0 Product + Specification document. + @param enabled New reference clock output enabled status + @see MPU6050_RA_INT_PIN_CFG + @see MPU6050_INTCFG_CLKOUT_EN_BIT +*/ +void MPU6050::setClockOutputEnabled(bool enabled) { + I2Cdev::writeBit(devAddr, MPU6050_RA_INT_PIN_CFG, MPU6050_INTCFG_CLKOUT_EN_BIT, enabled); +} + +// INT_ENABLE register + +/** Get full interrupt enabled status. + Full register byte for all interrupts, for quick reading. Each bit will be + set 0 for disabled, 1 for enabled. + @return Current interrupt enabled status + @see MPU6050_RA_INT_ENABLE + @see MPU6050_INTERRUPT_FF_BIT + **/ +uint8_t MPU6050::getIntEnabled() { + I2Cdev::readByte(devAddr, MPU6050_RA_INT_ENABLE, buffer); + return buffer[0]; +} +/** Set full interrupt enabled status. + Full register byte for all interrupts, for quick reading. Each bit should be + set 0 for disabled, 1 for enabled. + @param enabled New interrupt enabled status + @see getIntFreefallEnabled() + @see MPU6050_RA_INT_ENABLE + @see MPU6050_INTERRUPT_FF_BIT + **/ +void MPU6050::setIntEnabled(uint8_t enabled) { + I2Cdev::writeByte(devAddr, MPU6050_RA_INT_ENABLE, enabled); +} +/** Get Free Fall interrupt enabled status. + Will be set 0 for disabled, 1 for enabled. + @return Current interrupt enabled status + @see MPU6050_RA_INT_ENABLE + @see MPU6050_INTERRUPT_FF_BIT + **/ +bool MPU6050::getIntFreefallEnabled() { + I2Cdev::readBit(devAddr, MPU6050_RA_INT_ENABLE, MPU6050_INTERRUPT_FF_BIT, buffer); + return buffer[0]; +} +/** Set Free Fall interrupt enabled status. + @param enabled New interrupt enabled status + @see getIntFreefallEnabled() + @see MPU6050_RA_INT_ENABLE + @see MPU6050_INTERRUPT_FF_BIT + **/ +void MPU6050::setIntFreefallEnabled(bool enabled) { + I2Cdev::writeBit(devAddr, MPU6050_RA_INT_ENABLE, MPU6050_INTERRUPT_FF_BIT, enabled); +} +/** Get Motion Detection interrupt enabled status. + Will be set 0 for disabled, 1 for enabled. + @return Current interrupt enabled status + @see MPU6050_RA_INT_ENABLE + @see MPU6050_INTERRUPT_MOT_BIT + **/ +bool MPU6050::getIntMotionEnabled() { + I2Cdev::readBit(devAddr, MPU6050_RA_INT_ENABLE, MPU6050_INTERRUPT_MOT_BIT, buffer); + return buffer[0]; +} +/** Set Motion Detection interrupt enabled status. + @param enabled New interrupt enabled status + @see getIntMotionEnabled() + @see MPU6050_RA_INT_ENABLE + @see MPU6050_INTERRUPT_MOT_BIT + **/ +void MPU6050::setIntMotionEnabled(bool enabled) { + I2Cdev::writeBit(devAddr, MPU6050_RA_INT_ENABLE, MPU6050_INTERRUPT_MOT_BIT, enabled); +} +/** Get Zero Motion Detection interrupt enabled status. + Will be set 0 for disabled, 1 for enabled. + @return Current interrupt enabled status + @see MPU6050_RA_INT_ENABLE + @see MPU6050_INTERRUPT_ZMOT_BIT + **/ +bool MPU6050::getIntZeroMotionEnabled() { + I2Cdev::readBit(devAddr, MPU6050_RA_INT_ENABLE, MPU6050_INTERRUPT_ZMOT_BIT, buffer); + return buffer[0]; +} +/** Set Zero Motion Detection interrupt enabled status. + @param enabled New interrupt enabled status + @see getIntZeroMotionEnabled() + @see MPU6050_RA_INT_ENABLE + @see MPU6050_INTERRUPT_ZMOT_BIT + **/ +void MPU6050::setIntZeroMotionEnabled(bool enabled) { + I2Cdev::writeBit(devAddr, MPU6050_RA_INT_ENABLE, MPU6050_INTERRUPT_ZMOT_BIT, enabled); +} +/** Get FIFO Buffer Overflow interrupt enabled status. + Will be set 0 for disabled, 1 for enabled. + @return Current interrupt enabled status + @see MPU6050_RA_INT_ENABLE + @see MPU6050_INTERRUPT_FIFO_OFLOW_BIT + **/ +bool MPU6050::getIntFIFOBufferOverflowEnabled() { + I2Cdev::readBit(devAddr, MPU6050_RA_INT_ENABLE, MPU6050_INTERRUPT_FIFO_OFLOW_BIT, buffer); + return buffer[0]; +} +/** Set FIFO Buffer Overflow interrupt enabled status. + @param enabled New interrupt enabled status + @see getIntFIFOBufferOverflowEnabled() + @see MPU6050_RA_INT_ENABLE + @see MPU6050_INTERRUPT_FIFO_OFLOW_BIT + **/ +void MPU6050::setIntFIFOBufferOverflowEnabled(bool enabled) { + I2Cdev::writeBit(devAddr, MPU6050_RA_INT_ENABLE, MPU6050_INTERRUPT_FIFO_OFLOW_BIT, enabled); +} +/** Get I2C Master interrupt enabled status. + This enables any of the I2C Master interrupt sources to generate an + interrupt. Will be set 0 for disabled, 1 for enabled. + @return Current interrupt enabled status + @see MPU6050_RA_INT_ENABLE + @see MPU6050_INTERRUPT_I2C_MST_INT_BIT + **/ +bool MPU6050::getIntI2CMasterEnabled() { + I2Cdev::readBit(devAddr, MPU6050_RA_INT_ENABLE, MPU6050_INTERRUPT_I2C_MST_INT_BIT, buffer); + return buffer[0]; +} +/** Set I2C Master interrupt enabled status. + @param enabled New interrupt enabled status + @see getIntI2CMasterEnabled() + @see MPU6050_RA_INT_ENABLE + @see MPU6050_INTERRUPT_I2C_MST_INT_BIT + **/ +void MPU6050::setIntI2CMasterEnabled(bool enabled) { + I2Cdev::writeBit(devAddr, MPU6050_RA_INT_ENABLE, MPU6050_INTERRUPT_I2C_MST_INT_BIT, enabled); +} +/** Get Data Ready interrupt enabled setting. + This event occurs each time a write operation to all of the sensor registers + has been completed. Will be set 0 for disabled, 1 for enabled. + @return Current interrupt enabled status + @see MPU6050_RA_INT_ENABLE + @see MPU6050_INTERRUPT_DATA_RDY_BIT +*/ +bool MPU6050::getIntDataReadyEnabled() { + I2Cdev::readBit(devAddr, MPU6050_RA_INT_ENABLE, MPU6050_INTERRUPT_DATA_RDY_BIT, buffer); + return buffer[0]; +} +/** Set Data Ready interrupt enabled status. + @param enabled New interrupt enabled status + @see getIntDataReadyEnabled() + @see MPU6050_RA_INT_CFG + @see MPU6050_INTERRUPT_DATA_RDY_BIT +*/ +void MPU6050::setIntDataReadyEnabled(bool enabled) { + I2Cdev::writeBit(devAddr, MPU6050_RA_INT_ENABLE, MPU6050_INTERRUPT_DATA_RDY_BIT, enabled); +} + +// INT_STATUS register + +/** Get full set of interrupt status bits. + These bits clear to 0 after the register has been read. Very useful + for getting multiple INT statuses, since each single bit read clears + all of them because it has to read the whole byte. + @return Current interrupt status + @see MPU6050_RA_INT_STATUS +*/ +uint8_t MPU6050::getIntStatus() { + I2Cdev::readByte(devAddr, MPU6050_RA_INT_STATUS, buffer); + return buffer[0]; +} +/** Get Free Fall interrupt status. + This bit automatically sets to 1 when a Free Fall interrupt has been + generated. The bit clears to 0 after the register has been read. + @return Current interrupt status + @see MPU6050_RA_INT_STATUS + @see MPU6050_INTERRUPT_FF_BIT +*/ +bool MPU6050::getIntFreefallStatus() { + I2Cdev::readBit(devAddr, MPU6050_RA_INT_STATUS, MPU6050_INTERRUPT_FF_BIT, buffer); + return buffer[0]; +} +/** Get Motion Detection interrupt status. + This bit automatically sets to 1 when a Motion Detection interrupt has been + generated. The bit clears to 0 after the register has been read. + @return Current interrupt status + @see MPU6050_RA_INT_STATUS + @see MPU6050_INTERRUPT_MOT_BIT +*/ +bool MPU6050::getIntMotionStatus() { + I2Cdev::readBit(devAddr, MPU6050_RA_INT_STATUS, MPU6050_INTERRUPT_MOT_BIT, buffer); + return buffer[0]; +} +/** Get Zero Motion Detection interrupt status. + This bit automatically sets to 1 when a Zero Motion Detection interrupt has + been generated. The bit clears to 0 after the register has been read. + @return Current interrupt status + @see MPU6050_RA_INT_STATUS + @see MPU6050_INTERRUPT_ZMOT_BIT +*/ +bool MPU6050::getIntZeroMotionStatus() { + I2Cdev::readBit(devAddr, MPU6050_RA_INT_STATUS, MPU6050_INTERRUPT_ZMOT_BIT, buffer); + return buffer[0]; +} +/** Get FIFO Buffer Overflow interrupt status. + This bit automatically sets to 1 when a Free Fall interrupt has been + generated. The bit clears to 0 after the register has been read. + @return Current interrupt status + @see MPU6050_RA_INT_STATUS + @see MPU6050_INTERRUPT_FIFO_OFLOW_BIT +*/ +bool MPU6050::getIntFIFOBufferOverflowStatus() { + I2Cdev::readBit(devAddr, MPU6050_RA_INT_STATUS, MPU6050_INTERRUPT_FIFO_OFLOW_BIT, buffer); + return buffer[0]; +} +/** Get I2C Master interrupt status. + This bit automatically sets to 1 when an I2C Master interrupt has been + generated. For a list of I2C Master interrupts, please refer to Register 54. + The bit clears to 0 after the register has been read. + @return Current interrupt status + @see MPU6050_RA_INT_STATUS + @see MPU6050_INTERRUPT_I2C_MST_INT_BIT +*/ +bool MPU6050::getIntI2CMasterStatus() { + I2Cdev::readBit(devAddr, MPU6050_RA_INT_STATUS, MPU6050_INTERRUPT_I2C_MST_INT_BIT, buffer); + return buffer[0]; +} +/** Get Data Ready interrupt status. + This bit automatically sets to 1 when a Data Ready interrupt has been + generated. The bit clears to 0 after the register has been read. + @return Current interrupt status + @see MPU6050_RA_INT_STATUS + @see MPU6050_INTERRUPT_DATA_RDY_BIT +*/ +bool MPU6050::getIntDataReadyStatus() { + I2Cdev::readBit(devAddr, MPU6050_RA_INT_STATUS, MPU6050_INTERRUPT_DATA_RDY_BIT, buffer); + return buffer[0]; +} + +// ACCEL_*OUT_* registers + +/** Get raw 9-axis motion sensor readings (accel/gyro/compass). + FUNCTION NOT FULLY IMPLEMENTED YET. + @param ax 16-bit signed integer container for accelerometer X-axis value + @param ay 16-bit signed integer container for accelerometer Y-axis value + @param az 16-bit signed integer container for accelerometer Z-axis value + @param gx 16-bit signed integer container for gyroscope X-axis value + @param gy 16-bit signed integer container for gyroscope Y-axis value + @param gz 16-bit signed integer container for gyroscope Z-axis value + @param mx 16-bit signed integer container for magnetometer X-axis value + @param my 16-bit signed integer container for magnetometer Y-axis value + @param mz 16-bit signed integer container for magnetometer Z-axis value + @see getMotion6() + @see getAcceleration() + @see getRotation() + @see MPU6050_RA_ACCEL_XOUT_H +*/ +void MPU6050::getMotion9(int16_t* ax, int16_t* ay, int16_t* az, int16_t* gx, int16_t* gy, int16_t* gz, int16_t* mx, + int16_t* my, int16_t* mz) { + + //get accel and gyro + getMotion6(ax, ay, az, gx, gy, gz); + + //read mag + I2Cdev::writeByte(devAddr, MPU6050_RA_INT_PIN_CFG, 0x02); //set i2c bypass enable pin to true to access magnetometer + delay(10); + I2Cdev::writeByte(MPU9150_RA_MAG_ADDRESS, 0x0A, 0x01); //enable the magnetometer + delay(10); + I2Cdev::readBytes(MPU9150_RA_MAG_ADDRESS, MPU9150_RA_MAG_XOUT_L, 6, buffer); + *mx = (((int16_t)buffer[1]) << 8) | buffer[0]; + *my = (((int16_t)buffer[3]) << 8) | buffer[2]; + *mz = (((int16_t)buffer[5]) << 8) | buffer[4]; +} +/** Get raw 6-axis motion sensor readings (accel/gyro). + Retrieves all currently available motion sensor values. + @param ax 16-bit signed integer container for accelerometer X-axis value + @param ay 16-bit signed integer container for accelerometer Y-axis value + @param az 16-bit signed integer container for accelerometer Z-axis value + @param gx 16-bit signed integer container for gyroscope X-axis value + @param gy 16-bit signed integer container for gyroscope Y-axis value + @param gz 16-bit signed integer container for gyroscope Z-axis value + @see getAcceleration() + @see getRotation() + @see MPU6050_RA_ACCEL_XOUT_H +*/ +void MPU6050::getMotion6(int16_t* ax, int16_t* ay, int16_t* az, int16_t* gx, int16_t* gy, int16_t* gz) { + I2Cdev::readBytes(devAddr, MPU6050_RA_ACCEL_XOUT_H, 14, buffer); + *ax = (((int16_t)buffer[0]) << 8) | buffer[1]; + *ay = (((int16_t)buffer[2]) << 8) | buffer[3]; + *az = (((int16_t)buffer[4]) << 8) | buffer[5]; + *gx = (((int16_t)buffer[8]) << 8) | buffer[9]; + *gy = (((int16_t)buffer[10]) << 8) | buffer[11]; + *gz = (((int16_t)buffer[12]) << 8) | buffer[13]; +} +/** Get 3-axis accelerometer readings. + These registers store the most recent accelerometer measurements. + Accelerometer measurements are written to these registers at the Sample Rate + as defined in Register 25. + + The accelerometer measurement registers, along with the temperature + measurement registers, gyroscope measurement registers, and external sensor + data registers, are composed of two sets of registers: an internal register + set and a user-facing read register set. + + The data within the accelerometer sensors' internal register set is always + updated at the Sample Rate. Meanwhile, the user-facing read register set + duplicates the internal register set's data values whenever the serial + interface is idle. This guarantees that a burst read of sensor registers will + read measurements from the same sampling instant. Note that if burst reads + are not used, the user is responsible for ensuring a set of single byte reads + correspond to a single sampling instant by checking the Data Ready interrupt. + + Each 16-bit accelerometer measurement has a full scale defined in ACCEL_FS + (Register 28). For each full scale setting, the accelerometers' sensitivity + per LSB in ACCEL_xOUT is shown in the table below: + +
+    AFS_SEL | Full Scale Range | LSB Sensitivity
+    --------+------------------+----------------
+    0       | +/- 2g           | 8192 LSB/mg
+    1       | +/- 4g           | 4096 LSB/mg
+    2       | +/- 8g           | 2048 LSB/mg
+    3       | +/- 16g          | 1024 LSB/mg
+    
+ + @param x 16-bit signed integer container for X-axis acceleration + @param y 16-bit signed integer container for Y-axis acceleration + @param z 16-bit signed integer container for Z-axis acceleration + @see MPU6050_RA_GYRO_XOUT_H +*/ +void MPU6050::getAcceleration(int16_t* x, int16_t* y, int16_t* z) { + I2Cdev::readBytes(devAddr, MPU6050_RA_ACCEL_XOUT_H, 6, buffer); + *x = (((int16_t)buffer[0]) << 8) | buffer[1]; + *y = (((int16_t)buffer[2]) << 8) | buffer[3]; + *z = (((int16_t)buffer[4]) << 8) | buffer[5]; +} +/** Get X-axis accelerometer reading. + @return X-axis acceleration measurement in 16-bit 2's complement format + @see getMotion6() + @see MPU6050_RA_ACCEL_XOUT_H +*/ +int16_t MPU6050::getAccelerationX() { + I2Cdev::readBytes(devAddr, MPU6050_RA_ACCEL_XOUT_H, 2, buffer); + return (((int16_t)buffer[0]) << 8) | buffer[1]; +} +/** Get Y-axis accelerometer reading. + @return Y-axis acceleration measurement in 16-bit 2's complement format + @see getMotion6() + @see MPU6050_RA_ACCEL_YOUT_H +*/ +int16_t MPU6050::getAccelerationY() { + I2Cdev::readBytes(devAddr, MPU6050_RA_ACCEL_YOUT_H, 2, buffer); + return (((int16_t)buffer[0]) << 8) | buffer[1]; +} +/** Get Z-axis accelerometer reading. + @return Z-axis acceleration measurement in 16-bit 2's complement format + @see getMotion6() + @see MPU6050_RA_ACCEL_ZOUT_H +*/ +int16_t MPU6050::getAccelerationZ() { + I2Cdev::readBytes(devAddr, MPU6050_RA_ACCEL_ZOUT_H, 2, buffer); + return (((int16_t)buffer[0]) << 8) | buffer[1]; +} + +// TEMP_OUT_* registers + +/** Get current internal temperature. + @return Temperature reading in 16-bit 2's complement format + @see MPU6050_RA_TEMP_OUT_H +*/ +int16_t MPU6050::getTemperature() { + I2Cdev::readBytes(devAddr, MPU6050_RA_TEMP_OUT_H, 2, buffer); + return (((int16_t)buffer[0]) << 8) | buffer[1]; +} + +// GYRO_*OUT_* registers + +/** Get 3-axis gyroscope readings. + These gyroscope measurement registers, along with the accelerometer + measurement registers, temperature measurement registers, and external sensor + data registers, are composed of two sets of registers: an internal register + set and a user-facing read register set. + The data within the gyroscope sensors' internal register set is always + updated at the Sample Rate. Meanwhile, the user-facing read register set + duplicates the internal register set's data values whenever the serial + interface is idle. This guarantees that a burst read of sensor registers will + read measurements from the same sampling instant. Note that if burst reads + are not used, the user is responsible for ensuring a set of single byte reads + correspond to a single sampling instant by checking the Data Ready interrupt. + + Each 16-bit gyroscope measurement has a full scale defined in FS_SEL + (Register 27). For each full scale setting, the gyroscopes' sensitivity per + LSB in GYRO_xOUT is shown in the table below: + +
+    FS_SEL | Full Scale Range   | LSB Sensitivity
+    -------+--------------------+----------------
+    0      | +/- 250 degrees/s  | 131 LSB/deg/s
+    1      | +/- 500 degrees/s  | 65.5 LSB/deg/s
+    2      | +/- 1000 degrees/s | 32.8 LSB/deg/s
+    3      | +/- 2000 degrees/s | 16.4 LSB/deg/s
+    
+ + @param x 16-bit signed integer container for X-axis rotation + @param y 16-bit signed integer container for Y-axis rotation + @param z 16-bit signed integer container for Z-axis rotation + @see getMotion6() + @see MPU6050_RA_GYRO_XOUT_H +*/ +void MPU6050::getRotation(int16_t* x, int16_t* y, int16_t* z) { + I2Cdev::readBytes(devAddr, MPU6050_RA_GYRO_XOUT_H, 6, buffer); + *x = (((int16_t)buffer[0]) << 8) | buffer[1]; + *y = (((int16_t)buffer[2]) << 8) | buffer[3]; + *z = (((int16_t)buffer[4]) << 8) | buffer[5]; +} +/** Get X-axis gyroscope reading. + @return X-axis rotation measurement in 16-bit 2's complement format + @see getMotion6() + @see MPU6050_RA_GYRO_XOUT_H +*/ +int16_t MPU6050::getRotationX() { + I2Cdev::readBytes(devAddr, MPU6050_RA_GYRO_XOUT_H, 2, buffer); + return (((int16_t)buffer[0]) << 8) | buffer[1]; +} +/** Get Y-axis gyroscope reading. + @return Y-axis rotation measurement in 16-bit 2's complement format + @see getMotion6() + @see MPU6050_RA_GYRO_YOUT_H +*/ +int16_t MPU6050::getRotationY() { + I2Cdev::readBytes(devAddr, MPU6050_RA_GYRO_YOUT_H, 2, buffer); + return (((int16_t)buffer[0]) << 8) | buffer[1]; +} +/** Get Z-axis gyroscope reading. + @return Z-axis rotation measurement in 16-bit 2's complement format + @see getMotion6() + @see MPU6050_RA_GYRO_ZOUT_H +*/ +int16_t MPU6050::getRotationZ() { + I2Cdev::readBytes(devAddr, MPU6050_RA_GYRO_ZOUT_H, 2, buffer); + return (((int16_t)buffer[0]) << 8) | buffer[1]; +} + +// EXT_SENS_DATA_* registers + +/** Read single byte from external sensor data register. + These registers store data read from external sensors by the Slave 0, 1, 2, + and 3 on the auxiliary I2C interface. Data read by Slave 4 is stored in + I2C_SLV4_DI (Register 53). + + External sensor data is written to these registers at the Sample Rate as + defined in Register 25. This access rate can be reduced by using the Slave + Delay Enable registers (Register 103). + + External sensor data registers, along with the gyroscope measurement + registers, accelerometer measurement registers, and temperature measurement + registers, are composed of two sets of registers: an internal register set + and a user-facing read register set. + + The data within the external sensors' internal register set is always updated + at the Sample Rate (or the reduced access rate) whenever the serial interface + is idle. This guarantees that a burst read of sensor registers will read + measurements from the same sampling instant. Note that if burst reads are not + used, the user is responsible for ensuring a set of single byte reads + correspond to a single sampling instant by checking the Data Ready interrupt. + + Data is placed in these external sensor data registers according to + I2C_SLV0_CTRL, I2C_SLV1_CTRL, I2C_SLV2_CTRL, and I2C_SLV3_CTRL (Registers 39, + 42, 45, and 48). When more than zero bytes are read (I2C_SLVx_LEN > 0) from + an enabled slave (I2C_SLVx_EN = 1), the slave is read at the Sample Rate (as + defined in Register 25) or delayed rate (if specified in Register 52 and + 103). During each Sample cycle, slave reads are performed in order of Slave + number. If all slaves are enabled with more than zero bytes to be read, the + order will be Slave 0, followed by Slave 1, Slave 2, and Slave 3. + + Each enabled slave will have EXT_SENS_DATA registers associated with it by + number of bytes read (I2C_SLVx_LEN) in order of slave number, starting from + EXT_SENS_DATA_00. Note that this means enabling or disabling a slave may + change the higher numbered slaves' associated registers. Furthermore, if + fewer total bytes are being read from the external sensors as a result of + such a change, then the data remaining in the registers which no longer have + an associated slave device (i.e. high numbered registers) will remain in + these previously allocated registers unless reset. + + If the sum of the read lengths of all SLVx transactions exceed the number of + available EXT_SENS_DATA registers, the excess bytes will be dropped. There + are 24 EXT_SENS_DATA registers and hence the total read lengths between all + the slaves cannot be greater than 24 or some bytes will be lost. + + Note: Slave 4's behavior is distinct from that of Slaves 0-3. For further + information regarding the characteristics of Slave 4, please refer to + Registers 49 to 53. + + EXAMPLE: + Suppose that Slave 0 is enabled with 4 bytes to be read (I2C_SLV0_EN = 1 and + I2C_SLV0_LEN = 4) while Slave 1 is enabled with 2 bytes to be read so that + I2C_SLV1_EN = 1 and I2C_SLV1_LEN = 2. In such a situation, EXT_SENS_DATA _00 + through _03 will be associated with Slave 0, while EXT_SENS_DATA _04 and 05 + will be associated with Slave 1. If Slave 2 is enabled as well, registers + starting from EXT_SENS_DATA_06 will be allocated to Slave 2. + + If Slave 2 is disabled while Slave 3 is enabled in this same situation, then + registers starting from EXT_SENS_DATA_06 will be allocated to Slave 3 + instead. + + REGISTER ALLOCATION FOR DYNAMIC DISABLE VS. NORMAL DISABLE: + If a slave is disabled at any time, the space initially allocated to the + slave in the EXT_SENS_DATA register, will remain associated with that slave. + This is to avoid dynamic adjustment of the register allocation. + + The allocation of the EXT_SENS_DATA registers is recomputed only when (1) all + slaves are disabled, or (2) the I2C_MST_RST bit is set (Register 106). + + This above is also true if one of the slaves gets NACKed and stops + functioning. + + @param position Starting position (0-23) + @return Byte read from register +*/ +uint8_t MPU6050::getExternalSensorByte(int position) { + I2Cdev::readByte(devAddr, MPU6050_RA_EXT_SENS_DATA_00 + position, buffer); + return buffer[0]; +} +/** Read word (2 bytes) from external sensor data registers. + @param position Starting position (0-21) + @return Word read from register + @see getExternalSensorByte() +*/ +uint16_t MPU6050::getExternalSensorWord(int position) { + I2Cdev::readBytes(devAddr, MPU6050_RA_EXT_SENS_DATA_00 + position, 2, buffer); + return (((uint16_t)buffer[0]) << 8) | buffer[1]; +} +/** Read double word (4 bytes) from external sensor data registers. + @param position Starting position (0-20) + @return Double word read from registers + @see getExternalSensorByte() +*/ +uint32_t MPU6050::getExternalSensorDWord(int position) { + I2Cdev::readBytes(devAddr, MPU6050_RA_EXT_SENS_DATA_00 + position, 4, buffer); + return (((uint32_t)buffer[0]) << 24) | (((uint32_t)buffer[1]) << 16) | (((uint16_t)buffer[2]) << 8) | buffer[3]; +} + +// MOT_DETECT_STATUS register + +/** Get X-axis negative motion detection interrupt status. + @return Motion detection status + @see MPU6050_RA_MOT_DETECT_STATUS + @see MPU6050_MOTION_MOT_XNEG_BIT +*/ +bool MPU6050::getXNegMotionDetected() { + I2Cdev::readBit(devAddr, MPU6050_RA_MOT_DETECT_STATUS, MPU6050_MOTION_MOT_XNEG_BIT, buffer); + return buffer[0]; +} +/** Get X-axis positive motion detection interrupt status. + @return Motion detection status + @see MPU6050_RA_MOT_DETECT_STATUS + @see MPU6050_MOTION_MOT_XPOS_BIT +*/ +bool MPU6050::getXPosMotionDetected() { + I2Cdev::readBit(devAddr, MPU6050_RA_MOT_DETECT_STATUS, MPU6050_MOTION_MOT_XPOS_BIT, buffer); + return buffer[0]; +} +/** Get Y-axis negative motion detection interrupt status. + @return Motion detection status + @see MPU6050_RA_MOT_DETECT_STATUS + @see MPU6050_MOTION_MOT_YNEG_BIT +*/ +bool MPU6050::getYNegMotionDetected() { + I2Cdev::readBit(devAddr, MPU6050_RA_MOT_DETECT_STATUS, MPU6050_MOTION_MOT_YNEG_BIT, buffer); + return buffer[0]; +} +/** Get Y-axis positive motion detection interrupt status. + @return Motion detection status + @see MPU6050_RA_MOT_DETECT_STATUS + @see MPU6050_MOTION_MOT_YPOS_BIT +*/ +bool MPU6050::getYPosMotionDetected() { + I2Cdev::readBit(devAddr, MPU6050_RA_MOT_DETECT_STATUS, MPU6050_MOTION_MOT_YPOS_BIT, buffer); + return buffer[0]; +} +/** Get Z-axis negative motion detection interrupt status. + @return Motion detection status + @see MPU6050_RA_MOT_DETECT_STATUS + @see MPU6050_MOTION_MOT_ZNEG_BIT +*/ +bool MPU6050::getZNegMotionDetected() { + I2Cdev::readBit(devAddr, MPU6050_RA_MOT_DETECT_STATUS, MPU6050_MOTION_MOT_ZNEG_BIT, buffer); + return buffer[0]; +} +/** Get Z-axis positive motion detection interrupt status. + @return Motion detection status + @see MPU6050_RA_MOT_DETECT_STATUS + @see MPU6050_MOTION_MOT_ZPOS_BIT +*/ +bool MPU6050::getZPosMotionDetected() { + I2Cdev::readBit(devAddr, MPU6050_RA_MOT_DETECT_STATUS, MPU6050_MOTION_MOT_ZPOS_BIT, buffer); + return buffer[0]; +} +/** Get zero motion detection interrupt status. + @return Motion detection status + @see MPU6050_RA_MOT_DETECT_STATUS + @see MPU6050_MOTION_MOT_ZRMOT_BIT +*/ +bool MPU6050::getZeroMotionDetected() { + I2Cdev::readBit(devAddr, MPU6050_RA_MOT_DETECT_STATUS, MPU6050_MOTION_MOT_ZRMOT_BIT, buffer); + return buffer[0]; +} + +// I2C_SLV*_DO register + +/** Write byte to Data Output container for specified slave. + This register holds the output data written into Slave when Slave is set to + write mode. For further information regarding Slave control, please + refer to Registers 37 to 39 and immediately following. + @param num Slave number (0-3) + @param data Byte to write + @see MPU6050_RA_I2C_SLV0_DO +*/ +void MPU6050::setSlaveOutputByte(uint8_t num, uint8_t data) { + if (num > 3) { + return; + } + I2Cdev::writeByte(devAddr, MPU6050_RA_I2C_SLV0_DO + num, data); +} + +// I2C_MST_DELAY_CTRL register + +/** Get external data shadow delay enabled status. + This register is used to specify the timing of external sensor data + shadowing. When DELAY_ES_SHADOW is set to 1, shadowing of external + sensor data is delayed until all data has been received. + @return Current external data shadow delay enabled status. + @see MPU6050_RA_I2C_MST_DELAY_CTRL + @see MPU6050_DELAYCTRL_DELAY_ES_SHADOW_BIT +*/ +bool MPU6050::getExternalShadowDelayEnabled() { + I2Cdev::readBit(devAddr, MPU6050_RA_I2C_MST_DELAY_CTRL, MPU6050_DELAYCTRL_DELAY_ES_SHADOW_BIT, buffer); + return buffer[0]; +} +/** Set external data shadow delay enabled status. + @param enabled New external data shadow delay enabled status. + @see getExternalShadowDelayEnabled() + @see MPU6050_RA_I2C_MST_DELAY_CTRL + @see MPU6050_DELAYCTRL_DELAY_ES_SHADOW_BIT +*/ +void MPU6050::setExternalShadowDelayEnabled(bool enabled) { + I2Cdev::writeBit(devAddr, MPU6050_RA_I2C_MST_DELAY_CTRL, MPU6050_DELAYCTRL_DELAY_ES_SHADOW_BIT, enabled); +} +/** Get slave delay enabled status. + When a particular slave delay is enabled, the rate of access for the that + slave device is reduced. When a slave's access rate is decreased relative to + the Sample Rate, the slave is accessed every: + + 1 / (1 + I2C_MST_DLY) Samples + + This base Sample Rate in turn is determined by SMPLRT_DIV (register * 25) + and DLPF_CFG (register 26). + + For further information regarding I2C_MST_DLY, please refer to register 52. + For further information regarding the Sample Rate, please refer to register 25. + + @param num Slave number (0-4) + @return Current slave delay enabled status. + @see MPU6050_RA_I2C_MST_DELAY_CTRL + @see MPU6050_DELAYCTRL_I2C_SLV0_DLY_EN_BIT +*/ +bool MPU6050::getSlaveDelayEnabled(uint8_t num) { + // MPU6050_DELAYCTRL_I2C_SLV4_DLY_EN_BIT is 4, SLV3 is 3, etc. + if (num > 4) { + return 0; + } + I2Cdev::readBit(devAddr, MPU6050_RA_I2C_MST_DELAY_CTRL, num, buffer); + return buffer[0]; +} +/** Set slave delay enabled status. + @param num Slave number (0-4) + @param enabled New slave delay enabled status. + @see MPU6050_RA_I2C_MST_DELAY_CTRL + @see MPU6050_DELAYCTRL_I2C_SLV0_DLY_EN_BIT +*/ +void MPU6050::setSlaveDelayEnabled(uint8_t num, bool enabled) { + I2Cdev::writeBit(devAddr, MPU6050_RA_I2C_MST_DELAY_CTRL, num, enabled); +} + +// SIGNAL_PATH_RESET register + +/** Reset gyroscope signal path. + The reset will revert the signal path analog to digital converters and + filters to their power up configurations. + @see MPU6050_RA_SIGNAL_PATH_RESET + @see MPU6050_PATHRESET_GYRO_RESET_BIT +*/ +void MPU6050::resetGyroscopePath() { + I2Cdev::writeBit(devAddr, MPU6050_RA_SIGNAL_PATH_RESET, MPU6050_PATHRESET_GYRO_RESET_BIT, true); +} +/** Reset accelerometer signal path. + The reset will revert the signal path analog to digital converters and + filters to their power up configurations. + @see MPU6050_RA_SIGNAL_PATH_RESET + @see MPU6050_PATHRESET_ACCEL_RESET_BIT +*/ +void MPU6050::resetAccelerometerPath() { + I2Cdev::writeBit(devAddr, MPU6050_RA_SIGNAL_PATH_RESET, MPU6050_PATHRESET_ACCEL_RESET_BIT, true); +} +/** Reset temperature sensor signal path. + The reset will revert the signal path analog to digital converters and + filters to their power up configurations. + @see MPU6050_RA_SIGNAL_PATH_RESET + @see MPU6050_PATHRESET_TEMP_RESET_BIT +*/ +void MPU6050::resetTemperaturePath() { + I2Cdev::writeBit(devAddr, MPU6050_RA_SIGNAL_PATH_RESET, MPU6050_PATHRESET_TEMP_RESET_BIT, true); +} + +// MOT_DETECT_CTRL register + +/** Get accelerometer power-on delay. + The accelerometer data path provides samples to the sensor registers, Motion + detection, Zero Motion detection, and Free Fall detection modules. The + signal path contains filters which must be flushed on wake-up with new + samples before the detection modules begin operations. The default wake-up + delay, of 4ms can be lengthened by up to 3ms. This additional delay is + specified in ACCEL_ON_DELAY in units of 1 LSB = 1 ms. The user may select + any value above zero unless instructed otherwise by InvenSense. Please refer + to Section 8 of the MPU-6000/MPU-6050 Product Specification document for + further information regarding the detection modules. + @return Current accelerometer power-on delay + @see MPU6050_RA_MOT_DETECT_CTRL + @see MPU6050_DETECT_ACCEL_ON_DELAY_BIT +*/ +uint8_t MPU6050::getAccelerometerPowerOnDelay() { + I2Cdev::readBits(devAddr, MPU6050_RA_MOT_DETECT_CTRL, MPU6050_DETECT_ACCEL_ON_DELAY_BIT, + MPU6050_DETECT_ACCEL_ON_DELAY_LENGTH, buffer); + return buffer[0]; +} +/** Set accelerometer power-on delay. + @param delay New accelerometer power-on delay (0-3) + @see getAccelerometerPowerOnDelay() + @see MPU6050_RA_MOT_DETECT_CTRL + @see MPU6050_DETECT_ACCEL_ON_DELAY_BIT +*/ +void MPU6050::setAccelerometerPowerOnDelay(uint8_t delay) { + I2Cdev::writeBits(devAddr, MPU6050_RA_MOT_DETECT_CTRL, MPU6050_DETECT_ACCEL_ON_DELAY_BIT, + MPU6050_DETECT_ACCEL_ON_DELAY_LENGTH, delay); +} +/** Get Free Fall detection counter decrement configuration. + Detection is registered by the Free Fall detection module after accelerometer + measurements meet their respective threshold conditions over a specified + number of samples. When the threshold conditions are met, the corresponding + detection counter increments by 1. The user may control the rate at which the + detection counter decrements when the threshold condition is not met by + configuring FF_COUNT. The decrement rate can be set according to the + following table: + +
+    FF_COUNT | Counter Decrement
+    ---------+------------------
+    0        | Reset
+    1        | 1
+    2        | 2
+    3        | 4
+    
+ + When FF_COUNT is configured to 0 (reset), any non-qualifying sample will + reset the counter to 0. For further information on Free Fall detection, + please refer to Registers 29 to 32. + + @return Current decrement configuration + @see MPU6050_RA_MOT_DETECT_CTRL + @see MPU6050_DETECT_FF_COUNT_BIT +*/ +uint8_t MPU6050::getFreefallDetectionCounterDecrement() { + I2Cdev::readBits(devAddr, MPU6050_RA_MOT_DETECT_CTRL, MPU6050_DETECT_FF_COUNT_BIT, MPU6050_DETECT_FF_COUNT_LENGTH, + buffer); + return buffer[0]; +} +/** Set Free Fall detection counter decrement configuration. + @param decrement New decrement configuration value + @see getFreefallDetectionCounterDecrement() + @see MPU6050_RA_MOT_DETECT_CTRL + @see MPU6050_DETECT_FF_COUNT_BIT +*/ +void MPU6050::setFreefallDetectionCounterDecrement(uint8_t decrement) { + I2Cdev::writeBits(devAddr, MPU6050_RA_MOT_DETECT_CTRL, MPU6050_DETECT_FF_COUNT_BIT, MPU6050_DETECT_FF_COUNT_LENGTH, + decrement); +} +/** Get Motion detection counter decrement configuration. + Detection is registered by the Motion detection module after accelerometer + measurements meet their respective threshold conditions over a specified + number of samples. When the threshold conditions are met, the corresponding + detection counter increments by 1. The user may control the rate at which the + detection counter decrements when the threshold condition is not met by + configuring MOT_COUNT. The decrement rate can be set according to the + following table: + +
+    MOT_COUNT | Counter Decrement
+    ----------+------------------
+    0         | Reset
+    1         | 1
+    2         | 2
+    3         | 4
+    
+ + When MOT_COUNT is configured to 0 (reset), any non-qualifying sample will + reset the counter to 0. For further information on Motion detection, + please refer to Registers 29 to 32. + +*/ +uint8_t MPU6050::getMotionDetectionCounterDecrement() { + I2Cdev::readBits(devAddr, MPU6050_RA_MOT_DETECT_CTRL, MPU6050_DETECT_MOT_COUNT_BIT, MPU6050_DETECT_MOT_COUNT_LENGTH, + buffer); + return buffer[0]; +} +/** Set Motion detection counter decrement configuration. + @param decrement New decrement configuration value + @see getMotionDetectionCounterDecrement() + @see MPU6050_RA_MOT_DETECT_CTRL + @see MPU6050_DETECT_MOT_COUNT_BIT +*/ +void MPU6050::setMotionDetectionCounterDecrement(uint8_t decrement) { + I2Cdev::writeBits(devAddr, MPU6050_RA_MOT_DETECT_CTRL, MPU6050_DETECT_MOT_COUNT_BIT, MPU6050_DETECT_MOT_COUNT_LENGTH, + decrement); +} + +// USER_CTRL register + +/** Get FIFO enabled status. + When this bit is set to 0, the FIFO buffer is disabled. The FIFO buffer + cannot be written to or read from while disabled. The FIFO buffer's state + does not change unless the MPU-60X0 is power cycled. + @return Current FIFO enabled status + @see MPU6050_RA_USER_CTRL + @see MPU6050_USERCTRL_FIFO_EN_BIT +*/ +bool MPU6050::getFIFOEnabled() { + I2Cdev::readBit(devAddr, MPU6050_RA_USER_CTRL, MPU6050_USERCTRL_FIFO_EN_BIT, buffer); + return buffer[0]; +} +/** Set FIFO enabled status. + @param enabled New FIFO enabled status + @see getFIFOEnabled() + @see MPU6050_RA_USER_CTRL + @see MPU6050_USERCTRL_FIFO_EN_BIT +*/ +void MPU6050::setFIFOEnabled(bool enabled) { + I2Cdev::writeBit(devAddr, MPU6050_RA_USER_CTRL, MPU6050_USERCTRL_FIFO_EN_BIT, enabled); +} +/** Get I2C Master Mode enabled status. + When this mode is enabled, the MPU-60X0 acts as the I2C Master to the + external sensor slave devices on the auxiliary I2C bus. When this bit is + cleared to 0, the auxiliary I2C bus lines (AUX_DA and AUX_CL) are logically + driven by the primary I2C bus (SDA and SCL). This is a precondition to + enabling Bypass Mode. For further information regarding Bypass Mode, please + refer to Register 55. + @return Current I2C Master Mode enabled status + @see MPU6050_RA_USER_CTRL + @see MPU6050_USERCTRL_I2C_MST_EN_BIT +*/ +bool MPU6050::getI2CMasterModeEnabled() { + I2Cdev::readBit(devAddr, MPU6050_RA_USER_CTRL, MPU6050_USERCTRL_I2C_MST_EN_BIT, buffer); + return buffer[0]; +} +/** Set I2C Master Mode enabled status. + @param enabled New I2C Master Mode enabled status + @see getI2CMasterModeEnabled() + @see MPU6050_RA_USER_CTRL + @see MPU6050_USERCTRL_I2C_MST_EN_BIT +*/ +void MPU6050::setI2CMasterModeEnabled(bool enabled) { + I2Cdev::writeBit(devAddr, MPU6050_RA_USER_CTRL, MPU6050_USERCTRL_I2C_MST_EN_BIT, enabled); +} +/** Switch from I2C to SPI mode (MPU-6000 only) + If this is set, the primary SPI interface will be enabled in place of the + disabled primary I2C interface. +*/ +void MPU6050::switchSPIEnabled(bool enabled) { + I2Cdev::writeBit(devAddr, MPU6050_RA_USER_CTRL, MPU6050_USERCTRL_I2C_IF_DIS_BIT, enabled); +} +/** Reset the FIFO. + This bit resets the FIFO buffer when set to 1 while FIFO_EN equals 0. This + bit automatically clears to 0 after the reset has been triggered. + @see MPU6050_RA_USER_CTRL + @see MPU6050_USERCTRL_FIFO_RESET_BIT +*/ +void MPU6050::resetFIFO() { + I2Cdev::writeBit(devAddr, MPU6050_RA_USER_CTRL, MPU6050_USERCTRL_FIFO_RESET_BIT, true); +} +/** Reset the I2C Master. + This bit resets the I2C Master when set to 1 while I2C_MST_EN equals 0. + This bit automatically clears to 0 after the reset has been triggered. + @see MPU6050_RA_USER_CTRL + @see MPU6050_USERCTRL_I2C_MST_RESET_BIT +*/ +void MPU6050::resetI2CMaster() { + I2Cdev::writeBit(devAddr, MPU6050_RA_USER_CTRL, MPU6050_USERCTRL_I2C_MST_RESET_BIT, true); +} +/** Reset all sensor registers and signal paths. + When set to 1, this bit resets the signal paths for all sensors (gyroscopes, + accelerometers, and temperature sensor). This operation will also clear the + sensor registers. This bit automatically clears to 0 after the reset has been + triggered. + + When resetting only the signal path (and not the sensor registers), please + use Register 104, SIGNAL_PATH_RESET. + + @see MPU6050_RA_USER_CTRL + @see MPU6050_USERCTRL_SIG_COND_RESET_BIT +*/ +void MPU6050::resetSensors() { + I2Cdev::writeBit(devAddr, MPU6050_RA_USER_CTRL, MPU6050_USERCTRL_SIG_COND_RESET_BIT, true); +} + +// PWR_MGMT_1 register + +/** Trigger a full device reset. + A small delay of ~50ms may be desirable after triggering a reset. + @see MPU6050_RA_PWR_MGMT_1 + @see MPU6050_PWR1_DEVICE_RESET_BIT +*/ +void MPU6050::reset() { + I2Cdev::writeBit(devAddr, MPU6050_RA_PWR_MGMT_1, MPU6050_PWR1_DEVICE_RESET_BIT, true); +} +/** Get sleep mode status. + Setting the SLEEP bit in the register puts the device into very low power + sleep mode. In this mode, only the serial interface and internal registers + remain active, allowing for a very low standby current. Clearing this bit + puts the device back into normal mode. To save power, the individual standby + selections for each of the gyros should be used if any gyro axis is not used + by the application. + @return Current sleep mode enabled status + @see MPU6050_RA_PWR_MGMT_1 + @see MPU6050_PWR1_SLEEP_BIT +*/ +bool MPU6050::getSleepEnabled() { + I2Cdev::readBit(devAddr, MPU6050_RA_PWR_MGMT_1, MPU6050_PWR1_SLEEP_BIT, buffer); + return buffer[0]; +} +/** Set sleep mode status. + @param enabled New sleep mode enabled status + @see getSleepEnabled() + @see MPU6050_RA_PWR_MGMT_1 + @see MPU6050_PWR1_SLEEP_BIT +*/ +void MPU6050::setSleepEnabled(bool enabled) { + I2Cdev::writeBit(devAddr, MPU6050_RA_PWR_MGMT_1, MPU6050_PWR1_SLEEP_BIT, enabled); +} +/** Get wake cycle enabled status. + When this bit is set to 1 and SLEEP is disabled, the MPU-60X0 will cycle + between sleep mode and waking up to take a single sample of data from active + sensors at a rate determined by LP_WAKE_CTRL (register 108). + @return Current sleep mode enabled status + @see MPU6050_RA_PWR_MGMT_1 + @see MPU6050_PWR1_CYCLE_BIT +*/ +bool MPU6050::getWakeCycleEnabled() { + I2Cdev::readBit(devAddr, MPU6050_RA_PWR_MGMT_1, MPU6050_PWR1_CYCLE_BIT, buffer); + return buffer[0]; +} +/** Set wake cycle enabled status. + @param enabled New sleep mode enabled status + @see getWakeCycleEnabled() + @see MPU6050_RA_PWR_MGMT_1 + @see MPU6050_PWR1_CYCLE_BIT +*/ +void MPU6050::setWakeCycleEnabled(bool enabled) { + I2Cdev::writeBit(devAddr, MPU6050_RA_PWR_MGMT_1, MPU6050_PWR1_CYCLE_BIT, enabled); +} +/** Get temperature sensor enabled status. + Control the usage of the internal temperature sensor. + + Note: this register stores the *disabled* value, but for consistency with the + rest of the code, the function is named and used with standard true/false + values to indicate whether the sensor is enabled or disabled, respectively. + + @return Current temperature sensor enabled status + @see MPU6050_RA_PWR_MGMT_1 + @see MPU6050_PWR1_TEMP_DIS_BIT +*/ +bool MPU6050::getTempSensorEnabled() { + I2Cdev::readBit(devAddr, MPU6050_RA_PWR_MGMT_1, MPU6050_PWR1_TEMP_DIS_BIT, buffer); + return buffer[0] == 0; // 1 is actually disabled here +} +/** Set temperature sensor enabled status. + Note: this register stores the *disabled* value, but for consistency with the + rest of the code, the function is named and used with standard true/false + values to indicate whether the sensor is enabled or disabled, respectively. + + @param enabled New temperature sensor enabled status + @see getTempSensorEnabled() + @see MPU6050_RA_PWR_MGMT_1 + @see MPU6050_PWR1_TEMP_DIS_BIT +*/ +void MPU6050::setTempSensorEnabled(bool enabled) { + // 1 is actually disabled here + I2Cdev::writeBit(devAddr, MPU6050_RA_PWR_MGMT_1, MPU6050_PWR1_TEMP_DIS_BIT, !enabled); +} +/** Get clock source setting. + @return Current clock source setting + @see MPU6050_RA_PWR_MGMT_1 + @see MPU6050_PWR1_CLKSEL_BIT + @see MPU6050_PWR1_CLKSEL_LENGTH +*/ +uint8_t MPU6050::getClockSource() { + I2Cdev::readBits(devAddr, MPU6050_RA_PWR_MGMT_1, MPU6050_PWR1_CLKSEL_BIT, MPU6050_PWR1_CLKSEL_LENGTH, buffer); + return buffer[0]; +} +/** Set clock source setting. + An internal 8MHz oscillator, gyroscope based clock, or external sources can + be selected as the MPU-60X0 clock source. When the internal 8 MHz oscillator + or an external source is chosen as the clock source, the MPU-60X0 can operate + in low power modes with the gyroscopes disabled. + + Upon power up, the MPU-60X0 clock source defaults to the internal oscillator. + However, it is highly recommended that the device be configured to use one of + the gyroscopes (or an external clock source) as the clock reference for + improved stability. The clock source can be selected according to the following table: + +
+    CLK_SEL | Clock Source
+    --------+--------------------------------------
+    0       | Internal oscillator
+    1       | PLL with X Gyro reference
+    2       | PLL with Y Gyro reference
+    3       | PLL with Z Gyro reference
+    4       | PLL with external 32.768kHz reference
+    5       | PLL with external 19.2MHz reference
+    6       | Reserved
+    7       | Stops the clock and keeps the timing generator in reset
+    
+ + @param source New clock source setting + @see getClockSource() + @see MPU6050_RA_PWR_MGMT_1 + @see MPU6050_PWR1_CLKSEL_BIT + @see MPU6050_PWR1_CLKSEL_LENGTH +*/ +void MPU6050::setClockSource(uint8_t source) { + I2Cdev::writeBits(devAddr, MPU6050_RA_PWR_MGMT_1, MPU6050_PWR1_CLKSEL_BIT, MPU6050_PWR1_CLKSEL_LENGTH, source); +} + +// PWR_MGMT_2 register + +/** Get wake frequency in Accel-Only Low Power Mode. + The MPU-60X0 can be put into Accerlerometer Only Low Power Mode by setting + PWRSEL to 1 in the Power Management 1 register (Register 107). In this mode, + the device will power off all devices except for the primary I2C interface, + waking only the accelerometer at fixed intervals to take a single + measurement. The frequency of wake-ups can be configured with LP_WAKE_CTRL + as shown below: + +
+    LP_WAKE_CTRL | Wake-up Frequency
+    -------------+------------------
+    0            | 1.25 Hz
+    1            | 2.5 Hz
+    2            | 5 Hz
+    3            | 10 Hz
+    
+
+    For further information regarding the MPU-60X0's power modes, please refer to
+    Register 107.
+
+    @return Current wake frequency
+    @see MPU6050_RA_PWR_MGMT_2
+*/
+uint8_t MPU6050::getWakeFrequency() {
+    I2Cdev::readBits(devAddr, MPU6050_RA_PWR_MGMT_2, MPU6050_PWR2_LP_WAKE_CTRL_BIT, MPU6050_PWR2_LP_WAKE_CTRL_LENGTH,
+                     buffer);
+    return buffer[0];
+}
+/** Set wake frequency in Accel-Only Low Power Mode.
+    @param frequency New wake frequency
+    @see MPU6050_RA_PWR_MGMT_2
+*/
+void MPU6050::setWakeFrequency(uint8_t frequency) {
+    I2Cdev::writeBits(devAddr, MPU6050_RA_PWR_MGMT_2, MPU6050_PWR2_LP_WAKE_CTRL_BIT, MPU6050_PWR2_LP_WAKE_CTRL_LENGTH,
+                      frequency);
+}
+
+/** Get X-axis accelerometer standby enabled status.
+    If enabled, the X-axis will not gather or report data (or use power).
+    @return Current X-axis standby enabled status
+    @see MPU6050_RA_PWR_MGMT_2
+    @see MPU6050_PWR2_STBY_XA_BIT
+*/
+bool MPU6050::getStandbyXAccelEnabled() {
+    I2Cdev::readBit(devAddr, MPU6050_RA_PWR_MGMT_2, MPU6050_PWR2_STBY_XA_BIT, buffer);
+    return buffer[0];
+}
+/** Set X-axis accelerometer standby enabled status.
+    @param New X-axis standby enabled status
+    @see getStandbyXAccelEnabled()
+    @see MPU6050_RA_PWR_MGMT_2
+    @see MPU6050_PWR2_STBY_XA_BIT
+*/
+void MPU6050::setStandbyXAccelEnabled(bool enabled) {
+    I2Cdev::writeBit(devAddr, MPU6050_RA_PWR_MGMT_2, MPU6050_PWR2_STBY_XA_BIT, enabled);
+}
+/** Get Y-axis accelerometer standby enabled status.
+    If enabled, the Y-axis will not gather or report data (or use power).
+    @return Current Y-axis standby enabled status
+    @see MPU6050_RA_PWR_MGMT_2
+    @see MPU6050_PWR2_STBY_YA_BIT
+*/
+bool MPU6050::getStandbyYAccelEnabled() {
+    I2Cdev::readBit(devAddr, MPU6050_RA_PWR_MGMT_2, MPU6050_PWR2_STBY_YA_BIT, buffer);
+    return buffer[0];
+}
+/** Set Y-axis accelerometer standby enabled status.
+    @param New Y-axis standby enabled status
+    @see getStandbyYAccelEnabled()
+    @see MPU6050_RA_PWR_MGMT_2
+    @see MPU6050_PWR2_STBY_YA_BIT
+*/
+void MPU6050::setStandbyYAccelEnabled(bool enabled) {
+    I2Cdev::writeBit(devAddr, MPU6050_RA_PWR_MGMT_2, MPU6050_PWR2_STBY_YA_BIT, enabled);
+}
+/** Get Z-axis accelerometer standby enabled status.
+    If enabled, the Z-axis will not gather or report data (or use power).
+    @return Current Z-axis standby enabled status
+    @see MPU6050_RA_PWR_MGMT_2
+    @see MPU6050_PWR2_STBY_ZA_BIT
+*/
+bool MPU6050::getStandbyZAccelEnabled() {
+    I2Cdev::readBit(devAddr, MPU6050_RA_PWR_MGMT_2, MPU6050_PWR2_STBY_ZA_BIT, buffer);
+    return buffer[0];
+}
+/** Set Z-axis accelerometer standby enabled status.
+    @param New Z-axis standby enabled status
+    @see getStandbyZAccelEnabled()
+    @see MPU6050_RA_PWR_MGMT_2
+    @see MPU6050_PWR2_STBY_ZA_BIT
+*/
+void MPU6050::setStandbyZAccelEnabled(bool enabled) {
+    I2Cdev::writeBit(devAddr, MPU6050_RA_PWR_MGMT_2, MPU6050_PWR2_STBY_ZA_BIT, enabled);
+}
+/** Get X-axis gyroscope standby enabled status.
+    If enabled, the X-axis will not gather or report data (or use power).
+    @return Current X-axis standby enabled status
+    @see MPU6050_RA_PWR_MGMT_2
+    @see MPU6050_PWR2_STBY_XG_BIT
+*/
+bool MPU6050::getStandbyXGyroEnabled() {
+    I2Cdev::readBit(devAddr, MPU6050_RA_PWR_MGMT_2, MPU6050_PWR2_STBY_XG_BIT, buffer);
+    return buffer[0];
+}
+/** Set X-axis gyroscope standby enabled status.
+    @param New X-axis standby enabled status
+    @see getStandbyXGyroEnabled()
+    @see MPU6050_RA_PWR_MGMT_2
+    @see MPU6050_PWR2_STBY_XG_BIT
+*/
+void MPU6050::setStandbyXGyroEnabled(bool enabled) {
+    I2Cdev::writeBit(devAddr, MPU6050_RA_PWR_MGMT_2, MPU6050_PWR2_STBY_XG_BIT, enabled);
+}
+/** Get Y-axis gyroscope standby enabled status.
+    If enabled, the Y-axis will not gather or report data (or use power).
+    @return Current Y-axis standby enabled status
+    @see MPU6050_RA_PWR_MGMT_2
+    @see MPU6050_PWR2_STBY_YG_BIT
+*/
+bool MPU6050::getStandbyYGyroEnabled() {
+    I2Cdev::readBit(devAddr, MPU6050_RA_PWR_MGMT_2, MPU6050_PWR2_STBY_YG_BIT, buffer);
+    return buffer[0];
+}
+/** Set Y-axis gyroscope standby enabled status.
+    @param New Y-axis standby enabled status
+    @see getStandbyYGyroEnabled()
+    @see MPU6050_RA_PWR_MGMT_2
+    @see MPU6050_PWR2_STBY_YG_BIT
+*/
+void MPU6050::setStandbyYGyroEnabled(bool enabled) {
+    I2Cdev::writeBit(devAddr, MPU6050_RA_PWR_MGMT_2, MPU6050_PWR2_STBY_YG_BIT, enabled);
+}
+/** Get Z-axis gyroscope standby enabled status.
+    If enabled, the Z-axis will not gather or report data (or use power).
+    @return Current Z-axis standby enabled status
+    @see MPU6050_RA_PWR_MGMT_2
+    @see MPU6050_PWR2_STBY_ZG_BIT
+*/
+bool MPU6050::getStandbyZGyroEnabled() {
+    I2Cdev::readBit(devAddr, MPU6050_RA_PWR_MGMT_2, MPU6050_PWR2_STBY_ZG_BIT, buffer);
+    return buffer[0];
+}
+/** Set Z-axis gyroscope standby enabled status.
+    @param New Z-axis standby enabled status
+    @see getStandbyZGyroEnabled()
+    @see MPU6050_RA_PWR_MGMT_2
+    @see MPU6050_PWR2_STBY_ZG_BIT
+*/
+void MPU6050::setStandbyZGyroEnabled(bool enabled) {
+    I2Cdev::writeBit(devAddr, MPU6050_RA_PWR_MGMT_2, MPU6050_PWR2_STBY_ZG_BIT, enabled);
+}
+
+// FIFO_COUNT* registers
+
+/** Get current FIFO buffer size.
+    This value indicates the number of bytes stored in the FIFO buffer. This
+    number is in turn the number of bytes that can be read from the FIFO buffer
+    and it is directly proportional to the number of samples available given the
+    set of sensor data bound to be stored in the FIFO (register 35 and 36).
+    @return Current FIFO buffer size
+*/
+uint16_t MPU6050::getFIFOCount() {
+    I2Cdev::readBytes(devAddr, MPU6050_RA_FIFO_COUNTH, 2, buffer);
+    return (((uint16_t)buffer[0]) << 8) | buffer[1];
+}
+
+// FIFO_R_W register
+
+/** Get byte from FIFO buffer.
+    This register is used to read and write data from the FIFO buffer. Data is
+    written to the FIFO in order of register number (from lowest to highest). If
+    all the FIFO enable flags (see below) are enabled and all External Sensor
+    Data registers (Registers 73 to 96) are associated with a Slave device, the
+    contents of registers 59 through 96 will be written in order at the Sample
+    Rate.
+
+    The contents of the sensor data registers (Registers 59 to 96) are written
+    into the FIFO buffer when their corresponding FIFO enable flags are set to 1
+    in FIFO_EN (Register 35). An additional flag for the sensor data registers
+    associated with I2C Slave 3 can be found in I2C_MST_CTRL (Register 36).
+
+    If the FIFO buffer has overflowed, the status bit FIFO_OFLOW_INT is
+    automatically set to 1. This bit is located in INT_STATUS (Register 58).
+    When the FIFO buffer has overflowed, the oldest data will be lost and new
+    data will be written to the FIFO.
+
+    If the FIFO buffer is empty, reading this register will return the last byte
+    that was previously read from the FIFO until new data is available. The user
+    should check FIFO_COUNT to ensure that the FIFO buffer is not read when
+    empty.
+
+    @return Byte from FIFO buffer
+*/
+uint8_t MPU6050::getFIFOByte() {
+    I2Cdev::readByte(devAddr, MPU6050_RA_FIFO_R_W, buffer);
+    return buffer[0];
+}
+void MPU6050::getFIFOBytes(uint8_t* data, uint8_t length) {
+    I2Cdev::readBytes(devAddr, MPU6050_RA_FIFO_R_W, length, data);
+}
+/** Write byte to FIFO buffer.
+    @see getFIFOByte()
+    @see MPU6050_RA_FIFO_R_W
+*/
+void MPU6050::setFIFOByte(uint8_t data) {
+    I2Cdev::writeByte(devAddr, MPU6050_RA_FIFO_R_W, data);
+}
+
+// WHO_AM_I register
+
+/** Get Device ID.
+    This register is used to verify the identity of the device (0b110100, 0x34).
+    @return Device ID (6 bits only! should be 0x34)
+    @see MPU6050_RA_WHO_AM_I
+    @see MPU6050_WHO_AM_I_BIT
+    @see MPU6050_WHO_AM_I_LENGTH
+*/
+uint8_t MPU6050::getDeviceID() {
+    I2Cdev::readBits(devAddr, MPU6050_RA_WHO_AM_I, MPU6050_WHO_AM_I_BIT, MPU6050_WHO_AM_I_LENGTH, buffer);
+    return buffer[0];
+}
+/** Set Device ID.
+    Write a new ID into the WHO_AM_I register (no idea why this should ever be
+    necessary though).
+    @param id New device ID to set.
+    @see getDeviceID()
+    @see MPU6050_RA_WHO_AM_I
+    @see MPU6050_WHO_AM_I_BIT
+    @see MPU6050_WHO_AM_I_LENGTH
+*/
+void MPU6050::setDeviceID(uint8_t id) {
+    I2Cdev::writeBits(devAddr, MPU6050_RA_WHO_AM_I, MPU6050_WHO_AM_I_BIT, MPU6050_WHO_AM_I_LENGTH, id);
+}
+
+// ======== UNDOCUMENTED/DMP REGISTERS/METHODS ========
+
+// XG_OFFS_TC register
+
+uint8_t MPU6050::getOTPBankValid() {
+    I2Cdev::readBit(devAddr, MPU6050_RA_XG_OFFS_TC, MPU6050_TC_OTP_BNK_VLD_BIT, buffer);
+    return buffer[0];
+}
+void MPU6050::setOTPBankValid(bool enabled) {
+    I2Cdev::writeBit(devAddr, MPU6050_RA_XG_OFFS_TC, MPU6050_TC_OTP_BNK_VLD_BIT, enabled);
+}
+int8_t MPU6050::getXGyroOffset() {
+    I2Cdev::readBits(devAddr, MPU6050_RA_XG_OFFS_TC, MPU6050_TC_OFFSET_BIT, MPU6050_TC_OFFSET_LENGTH, buffer);
+    return buffer[0];
+}
+void MPU6050::setXGyroOffset(int8_t offset) {
+    I2Cdev::writeBits(devAddr, MPU6050_RA_XG_OFFS_TC, MPU6050_TC_OFFSET_BIT, MPU6050_TC_OFFSET_LENGTH, offset);
+}
+
+// YG_OFFS_TC register
+
+int8_t MPU6050::getYGyroOffset() {
+    I2Cdev::readBits(devAddr, MPU6050_RA_YG_OFFS_TC, MPU6050_TC_OFFSET_BIT, MPU6050_TC_OFFSET_LENGTH, buffer);
+    return buffer[0];
+}
+void MPU6050::setYGyroOffset(int8_t offset) {
+    I2Cdev::writeBits(devAddr, MPU6050_RA_YG_OFFS_TC, MPU6050_TC_OFFSET_BIT, MPU6050_TC_OFFSET_LENGTH, offset);
+}
+
+// ZG_OFFS_TC register
+
+int8_t MPU6050::getZGyroOffset() {
+    I2Cdev::readBits(devAddr, MPU6050_RA_ZG_OFFS_TC, MPU6050_TC_OFFSET_BIT, MPU6050_TC_OFFSET_LENGTH, buffer);
+    return buffer[0];
+}
+void MPU6050::setZGyroOffset(int8_t offset) {
+    I2Cdev::writeBits(devAddr, MPU6050_RA_ZG_OFFS_TC, MPU6050_TC_OFFSET_BIT, MPU6050_TC_OFFSET_LENGTH, offset);
+}
+
+// X_FINE_GAIN register
+
+int8_t MPU6050::getXFineGain() {
+    I2Cdev::readByte(devAddr, MPU6050_RA_X_FINE_GAIN, buffer);
+    return buffer[0];
+}
+void MPU6050::setXFineGain(int8_t gain) {
+    I2Cdev::writeByte(devAddr, MPU6050_RA_X_FINE_GAIN, gain);
+}
+
+// Y_FINE_GAIN register
+
+int8_t MPU6050::getYFineGain() {
+    I2Cdev::readByte(devAddr, MPU6050_RA_Y_FINE_GAIN, buffer);
+    return buffer[0];
+}
+void MPU6050::setYFineGain(int8_t gain) {
+    I2Cdev::writeByte(devAddr, MPU6050_RA_Y_FINE_GAIN, gain);
+}
+
+// Z_FINE_GAIN register
+
+int8_t MPU6050::getZFineGain() {
+    I2Cdev::readByte(devAddr, MPU6050_RA_Z_FINE_GAIN, buffer);
+    return buffer[0];
+}
+void MPU6050::setZFineGain(int8_t gain) {
+    I2Cdev::writeByte(devAddr, MPU6050_RA_Z_FINE_GAIN, gain);
+}
+
+// XA_OFFS_* registers
+
+int16_t MPU6050::getXAccelOffset() {
+    I2Cdev::readBytes(devAddr, MPU6050_RA_XA_OFFS_H, 2, buffer);
+    return (((int16_t)buffer[0]) << 8) | buffer[1];
+}
+void MPU6050::setXAccelOffset(int16_t offset) {
+    I2Cdev::writeWord(devAddr, MPU6050_RA_XA_OFFS_H, offset);
+}
+
+// YA_OFFS_* register
+
+int16_t MPU6050::getYAccelOffset() {
+    I2Cdev::readBytes(devAddr, MPU6050_RA_YA_OFFS_H, 2, buffer);
+    return (((int16_t)buffer[0]) << 8) | buffer[1];
+}
+void MPU6050::setYAccelOffset(int16_t offset) {
+    I2Cdev::writeWord(devAddr, MPU6050_RA_YA_OFFS_H, offset);
+}
+
+// ZA_OFFS_* register
+
+int16_t MPU6050::getZAccelOffset() {
+    I2Cdev::readBytes(devAddr, MPU6050_RA_ZA_OFFS_H, 2, buffer);
+    return (((int16_t)buffer[0]) << 8) | buffer[1];
+}
+void MPU6050::setZAccelOffset(int16_t offset) {
+    I2Cdev::writeWord(devAddr, MPU6050_RA_ZA_OFFS_H, offset);
+}
+
+// XG_OFFS_USR* registers
+
+int16_t MPU6050::getXGyroOffsetUser() {
+    I2Cdev::readBytes(devAddr, MPU6050_RA_XG_OFFS_USRH, 2, buffer);
+    return (((int16_t)buffer[0]) << 8) | buffer[1];
+}
+void MPU6050::setXGyroOffsetUser(int16_t offset) {
+    I2Cdev::writeWord(devAddr, MPU6050_RA_XG_OFFS_USRH, offset);
+}
+
+// YG_OFFS_USR* register
+
+int16_t MPU6050::getYGyroOffsetUser() {
+    I2Cdev::readBytes(devAddr, MPU6050_RA_YG_OFFS_USRH, 2, buffer);
+    return (((int16_t)buffer[0]) << 8) | buffer[1];
+}
+void MPU6050::setYGyroOffsetUser(int16_t offset) {
+    I2Cdev::writeWord(devAddr, MPU6050_RA_YG_OFFS_USRH, offset);
+}
+
+// ZG_OFFS_USR* register
+
+int16_t MPU6050::getZGyroOffsetUser() {
+    I2Cdev::readBytes(devAddr, MPU6050_RA_ZG_OFFS_USRH, 2, buffer);
+    return (((int16_t)buffer[0]) << 8) | buffer[1];
+}
+void MPU6050::setZGyroOffsetUser(int16_t offset) {
+    I2Cdev::writeWord(devAddr, MPU6050_RA_ZG_OFFS_USRH, offset);
+}
+
+// INT_ENABLE register (DMP functions)
+
+bool MPU6050::getIntPLLReadyEnabled() {
+    I2Cdev::readBit(devAddr, MPU6050_RA_INT_ENABLE, MPU6050_INTERRUPT_PLL_RDY_INT_BIT, buffer);
+    return buffer[0];
+}
+void MPU6050::setIntPLLReadyEnabled(bool enabled) {
+    I2Cdev::writeBit(devAddr, MPU6050_RA_INT_ENABLE, MPU6050_INTERRUPT_PLL_RDY_INT_BIT, enabled);
+}
+bool MPU6050::getIntDMPEnabled() {
+    I2Cdev::readBit(devAddr, MPU6050_RA_INT_ENABLE, MPU6050_INTERRUPT_DMP_INT_BIT, buffer);
+    return buffer[0];
+}
+void MPU6050::setIntDMPEnabled(bool enabled) {
+    I2Cdev::writeBit(devAddr, MPU6050_RA_INT_ENABLE, MPU6050_INTERRUPT_DMP_INT_BIT, enabled);
+}
+
+// DMP_INT_STATUS
+
+bool MPU6050::getDMPInt5Status() {
+    I2Cdev::readBit(devAddr, MPU6050_RA_DMP_INT_STATUS, MPU6050_DMPINT_5_BIT, buffer);
+    return buffer[0];
+}
+bool MPU6050::getDMPInt4Status() {
+    I2Cdev::readBit(devAddr, MPU6050_RA_DMP_INT_STATUS, MPU6050_DMPINT_4_BIT, buffer);
+    return buffer[0];
+}
+bool MPU6050::getDMPInt3Status() {
+    I2Cdev::readBit(devAddr, MPU6050_RA_DMP_INT_STATUS, MPU6050_DMPINT_3_BIT, buffer);
+    return buffer[0];
+}
+bool MPU6050::getDMPInt2Status() {
+    I2Cdev::readBit(devAddr, MPU6050_RA_DMP_INT_STATUS, MPU6050_DMPINT_2_BIT, buffer);
+    return buffer[0];
+}
+bool MPU6050::getDMPInt1Status() {
+    I2Cdev::readBit(devAddr, MPU6050_RA_DMP_INT_STATUS, MPU6050_DMPINT_1_BIT, buffer);
+    return buffer[0];
+}
+bool MPU6050::getDMPInt0Status() {
+    I2Cdev::readBit(devAddr, MPU6050_RA_DMP_INT_STATUS, MPU6050_DMPINT_0_BIT, buffer);
+    return buffer[0];
+}
+
+// INT_STATUS register (DMP functions)
+
+bool MPU6050::getIntPLLReadyStatus() {
+    I2Cdev::readBit(devAddr, MPU6050_RA_INT_STATUS, MPU6050_INTERRUPT_PLL_RDY_INT_BIT, buffer);
+    return buffer[0];
+}
+bool MPU6050::getIntDMPStatus() {
+    I2Cdev::readBit(devAddr, MPU6050_RA_INT_STATUS, MPU6050_INTERRUPT_DMP_INT_BIT, buffer);
+    return buffer[0];
+}
+
+// USER_CTRL register (DMP functions)
+
+bool MPU6050::getDMPEnabled() {
+    I2Cdev::readBit(devAddr, MPU6050_RA_USER_CTRL, MPU6050_USERCTRL_DMP_EN_BIT, buffer);
+    return buffer[0];
+}
+void MPU6050::setDMPEnabled(bool enabled) {
+    I2Cdev::writeBit(devAddr, MPU6050_RA_USER_CTRL, MPU6050_USERCTRL_DMP_EN_BIT, enabled);
+}
+void MPU6050::resetDMP() {
+    I2Cdev::writeBit(devAddr, MPU6050_RA_USER_CTRL, MPU6050_USERCTRL_DMP_RESET_BIT, true);
+}
+
+// BANK_SEL register
+
+void MPU6050::setMemoryBank(uint8_t bank, bool prefetchEnabled, bool userBank) {
+    bank &= 0x1F;
+    if (userBank) {
+        bank |= 0x20;
+    }
+    if (prefetchEnabled) {
+        bank |= 0x40;
+    }
+    I2Cdev::writeByte(devAddr, MPU6050_RA_BANK_SEL, bank);
+}
+
+// MEM_START_ADDR register
+
+void MPU6050::setMemoryStartAddress(uint8_t address) {
+    I2Cdev::writeByte(devAddr, MPU6050_RA_MEM_START_ADDR, address);
+}
+
+// MEM_R_W register
+
+uint8_t MPU6050::readMemoryByte() {
+    I2Cdev::readByte(devAddr, MPU6050_RA_MEM_R_W, buffer);
+    return buffer[0];
+}
+void MPU6050::writeMemoryByte(uint8_t data) {
+    I2Cdev::writeByte(devAddr, MPU6050_RA_MEM_R_W, data);
+}
+void MPU6050::readMemoryBlock(uint8_t* data, uint16_t dataSize, uint8_t bank, uint8_t address) {
+    setMemoryBank(bank);
+    setMemoryStartAddress(address);
+    uint8_t chunkSize;
+    for (uint16_t i = 0; i < dataSize;) {
+        // determine correct chunk size according to bank position and data size
+        chunkSize = MPU6050_DMP_MEMORY_CHUNK_SIZE;
+
+        // make sure we don't go past the data size
+        if (i + chunkSize > dataSize) {
+            chunkSize = dataSize - i;
+        }
+
+        // make sure this chunk doesn't go past the bank boundary (256 bytes)
+        if (chunkSize > 256 - address) {
+            chunkSize = 256 - address;
+        }
+
+        // read the chunk of data as specified
+        I2Cdev::readBytes(devAddr, MPU6050_RA_MEM_R_W, chunkSize, data + i);
+
+        // increase byte index by [chunkSize]
+        i += chunkSize;
+
+        // uint8_t automatically wraps to 0 at 256
+        address += chunkSize;
+
+        // if we aren't done, update bank (if necessary) and address
+        if (i < dataSize) {
+            if (address == 0) {
+                bank++;
+            }
+            setMemoryBank(bank);
+            setMemoryStartAddress(address);
+        }
+    }
+}
+bool MPU6050::writeMemoryBlock(const uint8_t* data, uint16_t dataSize, uint8_t bank, uint8_t address, bool verify,
+                               bool useProgMem) {
+    setMemoryBank(bank);
+    setMemoryStartAddress(address);
+    uint8_t chunkSize;
+    uint8_t* verifyBuffer;
+    uint8_t* progBuffer;
+    uint16_t i;
+    uint8_t j;
+    if (verify) {
+        verifyBuffer = (uint8_t*)malloc(MPU6050_DMP_MEMORY_CHUNK_SIZE);
+    }
+    if (useProgMem) {
+        progBuffer = (uint8_t*)malloc(MPU6050_DMP_MEMORY_CHUNK_SIZE);
+    }
+    for (i = 0; i < dataSize;) {
+        // determine correct chunk size according to bank position and data size
+        chunkSize = MPU6050_DMP_MEMORY_CHUNK_SIZE;
+
+        // make sure we don't go past the data size
+        if (i + chunkSize > dataSize) {
+            chunkSize = dataSize - i;
+        }
+
+        // make sure this chunk doesn't go past the bank boundary (256 bytes)
+        if (chunkSize > 256 - address) {
+            chunkSize = 256 - address;
+        }
+
+        if (useProgMem) {
+            // write the chunk of data as specified
+            for (j = 0; j < chunkSize; j++) {
+                progBuffer[j] = pgm_read_byte(data + i + j);
+            }
+        } else {
+            // write the chunk of data as specified
+            progBuffer = (uint8_t*)data + i;
+        }
+
+        I2Cdev::writeBytes(devAddr, MPU6050_RA_MEM_R_W, chunkSize, progBuffer);
+
+        // verify data if needed
+        if (verify && verifyBuffer) {
+            setMemoryBank(bank);
+            setMemoryStartAddress(address);
+            I2Cdev::readBytes(devAddr, MPU6050_RA_MEM_R_W, chunkSize, verifyBuffer);
+            if (memcmp(progBuffer, verifyBuffer, chunkSize) != 0) {
+                /*  Serial.print("Block write verification error, bank ");
+                    Serial.print(bank, DEC);
+                    Serial.print(", address ");
+                    Serial.print(address, DEC);
+                    Serial.print("!\nExpected:");
+                    for (j = 0; j < chunkSize; j++) {
+                    Serial.print(" 0x");
+                    if (progBuffer[j] < 16) Serial.print("0");
+                    Serial.print(progBuffer[j], HEX);
+                    }
+                    Serial.print("\nReceived:");
+                    for (uint8_t j = 0; j < chunkSize; j++) {
+                    Serial.print(" 0x");
+                    if (verifyBuffer[i + j] < 16) Serial.print("0");
+                    Serial.print(verifyBuffer[i + j], HEX);
+                    }
+                    Serial.print("\n");*/
+                free(verifyBuffer);
+                if (useProgMem) {
+                    free(progBuffer);
+                }
+                return false; // uh oh.
+            }
+        }
+
+        // increase byte index by [chunkSize]
+        i += chunkSize;
+
+        // uint8_t automatically wraps to 0 at 256
+        address += chunkSize;
+
+        // if we aren't done, update bank (if necessary) and address
+        if (i < dataSize) {
+            if (address == 0) {
+                bank++;
+            }
+            setMemoryBank(bank);
+            setMemoryStartAddress(address);
+        }
+    }
+    if (verify) {
+        free(verifyBuffer);
+    }
+    if (useProgMem) {
+        free(progBuffer);
+    }
+    return true;
+}
+bool MPU6050::writeProgMemoryBlock(const uint8_t* data, uint16_t dataSize, uint8_t bank, uint8_t address, bool verify) {
+    return writeMemoryBlock(data, dataSize, bank, address, verify, true);
+}
+bool MPU6050::writeDMPConfigurationSet(const uint8_t* data, uint16_t dataSize, bool useProgMem) {
+    uint8_t* progBuffer, success, special;
+    uint16_t i, j;
+    if (useProgMem) {
+        progBuffer = (uint8_t*)malloc(8);  // assume 8-byte blocks, realloc later if necessary
+    }
+
+    // config set data is a long string of blocks with the following structure:
+    // [bank] [offset] [length] [byte[0], byte[1], ..., byte[length]]
+    uint8_t bank, offset, length;
+    for (i = 0; i < dataSize;) {
+        if (useProgMem) {
+            bank = pgm_read_byte(data + i++);
+            offset = pgm_read_byte(data + i++);
+            length = pgm_read_byte(data + i++);
+        } else {
+            bank = data[i++];
+            offset = data[i++];
+            length = data[i++];
+        }
+
+        // write data or perform special action
+        if (length > 0) {
+            // regular block of data to write
+            /*  Serial.print("Writing config block to bank ");
+                Serial.print(bank);
+                Serial.print(", offset ");
+                Serial.print(offset);
+                Serial.print(", length=");
+                Serial.println(length);*/
+            if (useProgMem) {
+                if (sizeof(progBuffer) < length) {
+                    progBuffer = (uint8_t*)realloc(progBuffer, length);
+                }
+                for (j = 0; j < length; j++) {
+                    progBuffer[j] = pgm_read_byte(data + i + j);
+                }
+            } else {
+                progBuffer = (uint8_t*)data + i;
+            }
+            success = writeMemoryBlock(progBuffer, length, bank, offset, true);
+            i += length;
+        } else {
+            // special instruction
+            // NOTE: this kind of behavior (what and when to do certain things)
+            // is totally undocumented. This code is in here based on observed
+            // behavior only, and exactly why (or even whether) it has to be here
+            // is anybody's guess for now.
+            if (useProgMem) {
+                special = pgm_read_byte(data + i++);
+            } else {
+                special = data[i++];
+            }
+            /*  Serial.print("Special command code ");
+                Serial.print(special, HEX);
+                Serial.println(" found...");*/
+            if (special == 0x01) {
+                // enable DMP-related interrupts
+
+                //setIntZeroMotionEnabled(true);
+                //setIntFIFOBufferOverflowEnabled(true);
+                //setIntDMPEnabled(true);
+                I2Cdev::writeByte(devAddr, MPU6050_RA_INT_ENABLE, 0x32);  // single operation
+
+                success = true;
+            } else {
+                // unknown special command
+                success = false;
+            }
+        }
+
+        if (!success) {
+            if (useProgMem) {
+                free(progBuffer);
+            }
+            return false; // uh oh
+        }
+    }
+    if (useProgMem) {
+        free(progBuffer);
+    }
+    return true;
+}
+bool MPU6050::writeProgDMPConfigurationSet(const uint8_t* data, uint16_t dataSize) {
+    return writeDMPConfigurationSet(data, dataSize, true);
+}
+
+// DMP_CFG_1 register
+
+uint8_t MPU6050::getDMPConfig1() {
+    I2Cdev::readByte(devAddr, MPU6050_RA_DMP_CFG_1, buffer);
+    return buffer[0];
+}
+void MPU6050::setDMPConfig1(uint8_t config) {
+    I2Cdev::writeByte(devAddr, MPU6050_RA_DMP_CFG_1, config);
+}
+
+// DMP_CFG_2 register
+
+uint8_t MPU6050::getDMPConfig2() {
+    I2Cdev::readByte(devAddr, MPU6050_RA_DMP_CFG_2, buffer);
+    return buffer[0];
+}
+void MPU6050::setDMPConfig2(uint8_t config) {
+    I2Cdev::writeByte(devAddr, MPU6050_RA_DMP_CFG_2, config);
+}
\ No newline at end of file
diff --git a/labyrinthe/3-arduino/3-labyrinthe-imu/MPU6050.h b/labyrinthe/3-arduino/3-labyrinthe-imu/MPU6050.h
new file mode 100644
index 0000000..d6f7848
--- /dev/null
+++ b/labyrinthe/3-arduino/3-labyrinthe-imu/MPU6050.h
@@ -0,0 +1,997 @@
+// I2Cdev library collection - MPU6050 I2C device class
+// Based on InvenSense MPU-6050 register map document rev. 2.0, 5/19/2011 (RM-MPU-6000A-00)
+// 10/3/2011 by Jeff Rowberg 
+// Updates should (hopefully) always be available at https://github.com/jrowberg/i2cdevlib
+//
+// Changelog:
+//     ... - ongoing debug release
+
+// NOTE: THIS IS ONLY A PARIAL RELEASE. THIS DEVICE CLASS IS CURRENTLY UNDERGOING ACTIVE
+// DEVELOPMENT AND IS STILL MISSING SOME IMPORTANT FEATURES. PLEASE KEEP THIS IN MIND IF
+// YOU DECIDE TO USE THIS PARTICULAR CODE FOR ANYTHING.
+
+/*  ============================================
+    I2Cdev device library code is placed under the MIT license
+    Copyright (c) 2012 Jeff Rowberg
+
+    Permission is hereby granted, free of charge, to any person obtaining a copy
+    of this software and associated documentation files (the "Software"), to deal
+    in the Software without restriction, including without limitation the rights
+    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+    copies of the Software, and to permit persons to whom the Software is
+    furnished to do so, subject to the following conditions:
+
+    The above copyright notice and this permission notice shall be included in
+    all copies or substantial portions of the Software.
+
+    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+    THE SOFTWARE.
+    ===============================================
+*/
+
+#ifndef _MPU6050_H_
+#define _MPU6050_H_
+
+#include "I2Cdev.h"
+#include 
+
+//Magnetometer Registers
+#define MPU9150_RA_MAG_ADDRESS		0x0C
+#define MPU9150_RA_MAG_XOUT_L		0x03
+#define MPU9150_RA_MAG_XOUT_H		0x04
+#define MPU9150_RA_MAG_YOUT_L		0x05
+#define MPU9150_RA_MAG_YOUT_H		0x06
+#define MPU9150_RA_MAG_ZOUT_L		0x07
+#define MPU9150_RA_MAG_ZOUT_H		0x08
+
+#define MPU6050_ADDRESS_AD0_LOW     0x68 // address pin low (GND), default for InvenSense evaluation board
+#define MPU6050_ADDRESS_AD0_HIGH    0x69 // address pin high (VCC)
+#define MPU6050_DEFAULT_ADDRESS     MPU6050_ADDRESS_AD0_LOW
+
+#define MPU6050_RA_XG_OFFS_TC       0x00 //[7] PWR_MODE, [6:1] XG_OFFS_TC, [0] OTP_BNK_VLD
+#define MPU6050_RA_YG_OFFS_TC       0x01 //[7] PWR_MODE, [6:1] YG_OFFS_TC, [0] OTP_BNK_VLD
+#define MPU6050_RA_ZG_OFFS_TC       0x02 //[7] PWR_MODE, [6:1] ZG_OFFS_TC, [0] OTP_BNK_VLD
+#define MPU6050_RA_X_FINE_GAIN      0x03 //[7:0] X_FINE_GAIN
+#define MPU6050_RA_Y_FINE_GAIN      0x04 //[7:0] Y_FINE_GAIN
+#define MPU6050_RA_Z_FINE_GAIN      0x05 //[7:0] Z_FINE_GAIN
+#define MPU6050_RA_XA_OFFS_H        0x06 //[15:0] XA_OFFS
+#define MPU6050_RA_XA_OFFS_L_TC     0x07
+#define MPU6050_RA_YA_OFFS_H        0x08 //[15:0] YA_OFFS
+#define MPU6050_RA_YA_OFFS_L_TC     0x09
+#define MPU6050_RA_ZA_OFFS_H        0x0A //[15:0] ZA_OFFS
+#define MPU6050_RA_ZA_OFFS_L_TC     0x0B
+#define MPU6050_RA_XG_OFFS_USRH     0x13 //[15:0] XG_OFFS_USR
+#define MPU6050_RA_XG_OFFS_USRL     0x14
+#define MPU6050_RA_YG_OFFS_USRH     0x15 //[15:0] YG_OFFS_USR
+#define MPU6050_RA_YG_OFFS_USRL     0x16
+#define MPU6050_RA_ZG_OFFS_USRH     0x17 //[15:0] ZG_OFFS_USR
+#define MPU6050_RA_ZG_OFFS_USRL     0x18
+#define MPU6050_RA_SMPLRT_DIV       0x19
+#define MPU6050_RA_CONFIG           0x1A
+#define MPU6050_RA_GYRO_CONFIG      0x1B
+#define MPU6050_RA_ACCEL_CONFIG     0x1C
+#define MPU6050_RA_FF_THR           0x1D
+#define MPU6050_RA_FF_DUR           0x1E
+#define MPU6050_RA_MOT_THR          0x1F
+#define MPU6050_RA_MOT_DUR          0x20
+#define MPU6050_RA_ZRMOT_THR        0x21
+#define MPU6050_RA_ZRMOT_DUR        0x22
+#define MPU6050_RA_FIFO_EN          0x23
+#define MPU6050_RA_I2C_MST_CTRL     0x24
+#define MPU6050_RA_I2C_SLV0_ADDR    0x25
+#define MPU6050_RA_I2C_SLV0_REG     0x26
+#define MPU6050_RA_I2C_SLV0_CTRL    0x27
+#define MPU6050_RA_I2C_SLV1_ADDR    0x28
+#define MPU6050_RA_I2C_SLV1_REG     0x29
+#define MPU6050_RA_I2C_SLV1_CTRL    0x2A
+#define MPU6050_RA_I2C_SLV2_ADDR    0x2B
+#define MPU6050_RA_I2C_SLV2_REG     0x2C
+#define MPU6050_RA_I2C_SLV2_CTRL    0x2D
+#define MPU6050_RA_I2C_SLV3_ADDR    0x2E
+#define MPU6050_RA_I2C_SLV3_REG     0x2F
+#define MPU6050_RA_I2C_SLV3_CTRL    0x30
+#define MPU6050_RA_I2C_SLV4_ADDR    0x31
+#define MPU6050_RA_I2C_SLV4_REG     0x32
+#define MPU6050_RA_I2C_SLV4_DO      0x33
+#define MPU6050_RA_I2C_SLV4_CTRL    0x34
+#define MPU6050_RA_I2C_SLV4_DI      0x35
+#define MPU6050_RA_I2C_MST_STATUS   0x36
+#define MPU6050_RA_INT_PIN_CFG      0x37
+#define MPU6050_RA_INT_ENABLE       0x38
+#define MPU6050_RA_DMP_INT_STATUS   0x39
+#define MPU6050_RA_INT_STATUS       0x3A
+#define MPU6050_RA_ACCEL_XOUT_H     0x3B
+#define MPU6050_RA_ACCEL_XOUT_L     0x3C
+#define MPU6050_RA_ACCEL_YOUT_H     0x3D
+#define MPU6050_RA_ACCEL_YOUT_L     0x3E
+#define MPU6050_RA_ACCEL_ZOUT_H     0x3F
+#define MPU6050_RA_ACCEL_ZOUT_L     0x40
+#define MPU6050_RA_TEMP_OUT_H       0x41
+#define MPU6050_RA_TEMP_OUT_L       0x42
+#define MPU6050_RA_GYRO_XOUT_H      0x43
+#define MPU6050_RA_GYRO_XOUT_L      0x44
+#define MPU6050_RA_GYRO_YOUT_H      0x45
+#define MPU6050_RA_GYRO_YOUT_L      0x46
+#define MPU6050_RA_GYRO_ZOUT_H      0x47
+#define MPU6050_RA_GYRO_ZOUT_L      0x48
+#define MPU6050_RA_EXT_SENS_DATA_00 0x49
+#define MPU6050_RA_EXT_SENS_DATA_01 0x4A
+#define MPU6050_RA_EXT_SENS_DATA_02 0x4B
+#define MPU6050_RA_EXT_SENS_DATA_03 0x4C
+#define MPU6050_RA_EXT_SENS_DATA_04 0x4D
+#define MPU6050_RA_EXT_SENS_DATA_05 0x4E
+#define MPU6050_RA_EXT_SENS_DATA_06 0x4F
+#define MPU6050_RA_EXT_SENS_DATA_07 0x50
+#define MPU6050_RA_EXT_SENS_DATA_08 0x51
+#define MPU6050_RA_EXT_SENS_DATA_09 0x52
+#define MPU6050_RA_EXT_SENS_DATA_10 0x53
+#define MPU6050_RA_EXT_SENS_DATA_11 0x54
+#define MPU6050_RA_EXT_SENS_DATA_12 0x55
+#define MPU6050_RA_EXT_SENS_DATA_13 0x56
+#define MPU6050_RA_EXT_SENS_DATA_14 0x57
+#define MPU6050_RA_EXT_SENS_DATA_15 0x58
+#define MPU6050_RA_EXT_SENS_DATA_16 0x59
+#define MPU6050_RA_EXT_SENS_DATA_17 0x5A
+#define MPU6050_RA_EXT_SENS_DATA_18 0x5B
+#define MPU6050_RA_EXT_SENS_DATA_19 0x5C
+#define MPU6050_RA_EXT_SENS_DATA_20 0x5D
+#define MPU6050_RA_EXT_SENS_DATA_21 0x5E
+#define MPU6050_RA_EXT_SENS_DATA_22 0x5F
+#define MPU6050_RA_EXT_SENS_DATA_23 0x60
+#define MPU6050_RA_MOT_DETECT_STATUS    0x61
+#define MPU6050_RA_I2C_SLV0_DO      0x63
+#define MPU6050_RA_I2C_SLV1_DO      0x64
+#define MPU6050_RA_I2C_SLV2_DO      0x65
+#define MPU6050_RA_I2C_SLV3_DO      0x66
+#define MPU6050_RA_I2C_MST_DELAY_CTRL   0x67
+#define MPU6050_RA_SIGNAL_PATH_RESET    0x68
+#define MPU6050_RA_MOT_DETECT_CTRL      0x69
+#define MPU6050_RA_USER_CTRL        0x6A
+#define MPU6050_RA_PWR_MGMT_1       0x6B
+#define MPU6050_RA_PWR_MGMT_2       0x6C
+#define MPU6050_RA_BANK_SEL         0x6D
+#define MPU6050_RA_MEM_START_ADDR   0x6E
+#define MPU6050_RA_MEM_R_W          0x6F
+#define MPU6050_RA_DMP_CFG_1        0x70
+#define MPU6050_RA_DMP_CFG_2        0x71
+#define MPU6050_RA_FIFO_COUNTH      0x72
+#define MPU6050_RA_FIFO_COUNTL      0x73
+#define MPU6050_RA_FIFO_R_W         0x74
+#define MPU6050_RA_WHO_AM_I         0x75
+
+#define MPU6050_TC_PWR_MODE_BIT     7
+#define MPU6050_TC_OFFSET_BIT       6
+#define MPU6050_TC_OFFSET_LENGTH    6
+#define MPU6050_TC_OTP_BNK_VLD_BIT  0
+
+#define MPU6050_VDDIO_LEVEL_VLOGIC  0
+#define MPU6050_VDDIO_LEVEL_VDD     1
+
+#define MPU6050_CFG_EXT_SYNC_SET_BIT    5
+#define MPU6050_CFG_EXT_SYNC_SET_LENGTH 3
+#define MPU6050_CFG_DLPF_CFG_BIT    2
+#define MPU6050_CFG_DLPF_CFG_LENGTH 3
+
+#define MPU6050_EXT_SYNC_DISABLED       0x0
+#define MPU6050_EXT_SYNC_TEMP_OUT_L     0x1
+#define MPU6050_EXT_SYNC_GYRO_XOUT_L    0x2
+#define MPU6050_EXT_SYNC_GYRO_YOUT_L    0x3
+#define MPU6050_EXT_SYNC_GYRO_ZOUT_L    0x4
+#define MPU6050_EXT_SYNC_ACCEL_XOUT_L   0x5
+#define MPU6050_EXT_SYNC_ACCEL_YOUT_L   0x6
+#define MPU6050_EXT_SYNC_ACCEL_ZOUT_L   0x7
+
+#define MPU6050_DLPF_BW_256         0x00
+#define MPU6050_DLPF_BW_188         0x01
+#define MPU6050_DLPF_BW_98          0x02
+#define MPU6050_DLPF_BW_42          0x03
+#define MPU6050_DLPF_BW_20          0x04
+#define MPU6050_DLPF_BW_10          0x05
+#define MPU6050_DLPF_BW_5           0x06
+
+#define MPU6050_GCONFIG_FS_SEL_BIT      4
+#define MPU6050_GCONFIG_FS_SEL_LENGTH   2
+
+#define MPU6050_GYRO_FS_250         0x00
+#define MPU6050_GYRO_FS_500         0x01
+#define MPU6050_GYRO_FS_1000        0x02
+#define MPU6050_GYRO_FS_2000        0x03
+
+#define MPU6050_ACONFIG_XA_ST_BIT           7
+#define MPU6050_ACONFIG_YA_ST_BIT           6
+#define MPU6050_ACONFIG_ZA_ST_BIT           5
+#define MPU6050_ACONFIG_AFS_SEL_BIT         4
+#define MPU6050_ACONFIG_AFS_SEL_LENGTH      2
+#define MPU6050_ACONFIG_ACCEL_HPF_BIT       2
+#define MPU6050_ACONFIG_ACCEL_HPF_LENGTH    3
+
+#define MPU6050_ACCEL_FS_2          0x00
+#define MPU6050_ACCEL_FS_4          0x01
+#define MPU6050_ACCEL_FS_8          0x02
+#define MPU6050_ACCEL_FS_16         0x03
+
+#define MPU6050_DHPF_RESET          0x00
+#define MPU6050_DHPF_5              0x01
+#define MPU6050_DHPF_2P5            0x02
+#define MPU6050_DHPF_1P25           0x03
+#define MPU6050_DHPF_0P63           0x04
+#define MPU6050_DHPF_HOLD           0x07
+
+#define MPU6050_TEMP_FIFO_EN_BIT    7
+#define MPU6050_XG_FIFO_EN_BIT      6
+#define MPU6050_YG_FIFO_EN_BIT      5
+#define MPU6050_ZG_FIFO_EN_BIT      4
+#define MPU6050_ACCEL_FIFO_EN_BIT   3
+#define MPU6050_SLV2_FIFO_EN_BIT    2
+#define MPU6050_SLV1_FIFO_EN_BIT    1
+#define MPU6050_SLV0_FIFO_EN_BIT    0
+
+#define MPU6050_MULT_MST_EN_BIT     7
+#define MPU6050_WAIT_FOR_ES_BIT     6
+#define MPU6050_SLV_3_FIFO_EN_BIT   5
+#define MPU6050_I2C_MST_P_NSR_BIT   4
+#define MPU6050_I2C_MST_CLK_BIT     3
+#define MPU6050_I2C_MST_CLK_LENGTH  4
+
+#define MPU6050_CLOCK_DIV_348       0x0
+#define MPU6050_CLOCK_DIV_333       0x1
+#define MPU6050_CLOCK_DIV_320       0x2
+#define MPU6050_CLOCK_DIV_308       0x3
+#define MPU6050_CLOCK_DIV_296       0x4
+#define MPU6050_CLOCK_DIV_286       0x5
+#define MPU6050_CLOCK_DIV_276       0x6
+#define MPU6050_CLOCK_DIV_267       0x7
+#define MPU6050_CLOCK_DIV_258       0x8
+#define MPU6050_CLOCK_DIV_500       0x9
+#define MPU6050_CLOCK_DIV_471       0xA
+#define MPU6050_CLOCK_DIV_444       0xB
+#define MPU6050_CLOCK_DIV_421       0xC
+#define MPU6050_CLOCK_DIV_400       0xD
+#define MPU6050_CLOCK_DIV_381       0xE
+#define MPU6050_CLOCK_DIV_364       0xF
+
+#define MPU6050_I2C_SLV_RW_BIT      7
+#define MPU6050_I2C_SLV_ADDR_BIT    6
+#define MPU6050_I2C_SLV_ADDR_LENGTH 7
+#define MPU6050_I2C_SLV_EN_BIT      7
+#define MPU6050_I2C_SLV_BYTE_SW_BIT 6
+#define MPU6050_I2C_SLV_REG_DIS_BIT 5
+#define MPU6050_I2C_SLV_GRP_BIT     4
+#define MPU6050_I2C_SLV_LEN_BIT     3
+#define MPU6050_I2C_SLV_LEN_LENGTH  4
+
+#define MPU6050_I2C_SLV4_RW_BIT         7
+#define MPU6050_I2C_SLV4_ADDR_BIT       6
+#define MPU6050_I2C_SLV4_ADDR_LENGTH    7
+#define MPU6050_I2C_SLV4_EN_BIT         7
+#define MPU6050_I2C_SLV4_INT_EN_BIT     6
+#define MPU6050_I2C_SLV4_REG_DIS_BIT    5
+#define MPU6050_I2C_SLV4_MST_DLY_BIT    4
+#define MPU6050_I2C_SLV4_MST_DLY_LENGTH 5
+
+#define MPU6050_MST_PASS_THROUGH_BIT    7
+#define MPU6050_MST_I2C_SLV4_DONE_BIT   6
+#define MPU6050_MST_I2C_LOST_ARB_BIT    5
+#define MPU6050_MST_I2C_SLV4_NACK_BIT   4
+#define MPU6050_MST_I2C_SLV3_NACK_BIT   3
+#define MPU6050_MST_I2C_SLV2_NACK_BIT   2
+#define MPU6050_MST_I2C_SLV1_NACK_BIT   1
+#define MPU6050_MST_I2C_SLV0_NACK_BIT   0
+
+#define MPU6050_INTCFG_INT_LEVEL_BIT        7
+#define MPU6050_INTCFG_INT_OPEN_BIT         6
+#define MPU6050_INTCFG_LATCH_INT_EN_BIT     5
+#define MPU6050_INTCFG_INT_RD_CLEAR_BIT     4
+#define MPU6050_INTCFG_FSYNC_INT_LEVEL_BIT  3
+#define MPU6050_INTCFG_FSYNC_INT_EN_BIT     2
+#define MPU6050_INTCFG_I2C_BYPASS_EN_BIT    1
+#define MPU6050_INTCFG_CLKOUT_EN_BIT        0
+
+#define MPU6050_INTMODE_ACTIVEHIGH  0x00
+#define MPU6050_INTMODE_ACTIVELOW   0x01
+
+#define MPU6050_INTDRV_PUSHPULL     0x00
+#define MPU6050_INTDRV_OPENDRAIN    0x01
+
+#define MPU6050_INTLATCH_50USPULSE  0x00
+#define MPU6050_INTLATCH_WAITCLEAR  0x01
+
+#define MPU6050_INTCLEAR_STATUSREAD 0x00
+#define MPU6050_INTCLEAR_ANYREAD    0x01
+
+#define MPU6050_INTERRUPT_FF_BIT            7
+#define MPU6050_INTERRUPT_MOT_BIT           6
+#define MPU6050_INTERRUPT_ZMOT_BIT          5
+#define MPU6050_INTERRUPT_FIFO_OFLOW_BIT    4
+#define MPU6050_INTERRUPT_I2C_MST_INT_BIT   3
+#define MPU6050_INTERRUPT_PLL_RDY_INT_BIT   2
+#define MPU6050_INTERRUPT_DMP_INT_BIT       1
+#define MPU6050_INTERRUPT_DATA_RDY_BIT      0
+
+// TODO: figure out what these actually do
+// UMPL source code is not very obivous
+#define MPU6050_DMPINT_5_BIT            5
+#define MPU6050_DMPINT_4_BIT            4
+#define MPU6050_DMPINT_3_BIT            3
+#define MPU6050_DMPINT_2_BIT            2
+#define MPU6050_DMPINT_1_BIT            1
+#define MPU6050_DMPINT_0_BIT            0
+
+#define MPU6050_MOTION_MOT_XNEG_BIT     7
+#define MPU6050_MOTION_MOT_XPOS_BIT     6
+#define MPU6050_MOTION_MOT_YNEG_BIT     5
+#define MPU6050_MOTION_MOT_YPOS_BIT     4
+#define MPU6050_MOTION_MOT_ZNEG_BIT     3
+#define MPU6050_MOTION_MOT_ZPOS_BIT     2
+#define MPU6050_MOTION_MOT_ZRMOT_BIT    0
+
+#define MPU6050_DELAYCTRL_DELAY_ES_SHADOW_BIT   7
+#define MPU6050_DELAYCTRL_I2C_SLV4_DLY_EN_BIT   4
+#define MPU6050_DELAYCTRL_I2C_SLV3_DLY_EN_BIT   3
+#define MPU6050_DELAYCTRL_I2C_SLV2_DLY_EN_BIT   2
+#define MPU6050_DELAYCTRL_I2C_SLV1_DLY_EN_BIT   1
+#define MPU6050_DELAYCTRL_I2C_SLV0_DLY_EN_BIT   0
+
+#define MPU6050_PATHRESET_GYRO_RESET_BIT    2
+#define MPU6050_PATHRESET_ACCEL_RESET_BIT   1
+#define MPU6050_PATHRESET_TEMP_RESET_BIT    0
+
+#define MPU6050_DETECT_ACCEL_ON_DELAY_BIT       5
+#define MPU6050_DETECT_ACCEL_ON_DELAY_LENGTH    2
+#define MPU6050_DETECT_FF_COUNT_BIT             3
+#define MPU6050_DETECT_FF_COUNT_LENGTH          2
+#define MPU6050_DETECT_MOT_COUNT_BIT            1
+#define MPU6050_DETECT_MOT_COUNT_LENGTH         2
+
+#define MPU6050_DETECT_DECREMENT_RESET  0x0
+#define MPU6050_DETECT_DECREMENT_1      0x1
+#define MPU6050_DETECT_DECREMENT_2      0x2
+#define MPU6050_DETECT_DECREMENT_4      0x3
+
+#define MPU6050_USERCTRL_DMP_EN_BIT             7
+#define MPU6050_USERCTRL_FIFO_EN_BIT            6
+#define MPU6050_USERCTRL_I2C_MST_EN_BIT         5
+#define MPU6050_USERCTRL_I2C_IF_DIS_BIT         4
+#define MPU6050_USERCTRL_DMP_RESET_BIT          3
+#define MPU6050_USERCTRL_FIFO_RESET_BIT         2
+#define MPU6050_USERCTRL_I2C_MST_RESET_BIT      1
+#define MPU6050_USERCTRL_SIG_COND_RESET_BIT     0
+
+#define MPU6050_PWR1_DEVICE_RESET_BIT   7
+#define MPU6050_PWR1_SLEEP_BIT          6
+#define MPU6050_PWR1_CYCLE_BIT          5
+#define MPU6050_PWR1_TEMP_DIS_BIT       3
+#define MPU6050_PWR1_CLKSEL_BIT         2
+#define MPU6050_PWR1_CLKSEL_LENGTH      3
+
+#define MPU6050_CLOCK_INTERNAL          0x00
+#define MPU6050_CLOCK_PLL_XGYRO         0x01
+#define MPU6050_CLOCK_PLL_YGYRO         0x02
+#define MPU6050_CLOCK_PLL_ZGYRO         0x03
+#define MPU6050_CLOCK_PLL_EXT32K        0x04
+#define MPU6050_CLOCK_PLL_EXT19M        0x05
+#define MPU6050_CLOCK_KEEP_RESET        0x07
+
+#define MPU6050_PWR2_LP_WAKE_CTRL_BIT       7
+#define MPU6050_PWR2_LP_WAKE_CTRL_LENGTH    2
+#define MPU6050_PWR2_STBY_XA_BIT            5
+#define MPU6050_PWR2_STBY_YA_BIT            4
+#define MPU6050_PWR2_STBY_ZA_BIT            3
+#define MPU6050_PWR2_STBY_XG_BIT            2
+#define MPU6050_PWR2_STBY_YG_BIT            1
+#define MPU6050_PWR2_STBY_ZG_BIT            0
+
+#define MPU6050_WAKE_FREQ_1P25      0x0
+#define MPU6050_WAKE_FREQ_2P5       0x1
+#define MPU6050_WAKE_FREQ_5         0x2
+#define MPU6050_WAKE_FREQ_10        0x3
+
+#define MPU6050_BANKSEL_PRFTCH_EN_BIT       6
+#define MPU6050_BANKSEL_CFG_USER_BANK_BIT   5
+#define MPU6050_BANKSEL_MEM_SEL_BIT         4
+#define MPU6050_BANKSEL_MEM_SEL_LENGTH      5
+
+#define MPU6050_WHO_AM_I_BIT        6
+#define MPU6050_WHO_AM_I_LENGTH     6
+
+#define MPU6050_DMP_MEMORY_BANKS        8
+#define MPU6050_DMP_MEMORY_BANK_SIZE    256
+#define MPU6050_DMP_MEMORY_CHUNK_SIZE   16
+
+// note: DMP code memory blocks defined at end of header file
+
+class MPU6050 {
+  public:
+    MPU6050();
+    MPU6050(uint8_t address);
+
+    void initialize();
+    bool testConnection();
+
+    // AUX_VDDIO register
+    uint8_t getAuxVDDIOLevel();
+    void setAuxVDDIOLevel(uint8_t level);
+
+    // SMPLRT_DIV register
+    uint8_t getRate();
+    void setRate(uint8_t rate);
+
+    // CONFIG register
+    uint8_t getExternalFrameSync();
+    void setExternalFrameSync(uint8_t sync);
+    uint8_t getDLPFMode();
+    void setDLPFMode(uint8_t bandwidth);
+
+    // GYRO_CONFIG register
+    uint8_t getFullScaleGyroRange();
+    void setFullScaleGyroRange(uint8_t range);
+
+    // ACCEL_CONFIG register
+    bool getAccelXSelfTest();
+    void setAccelXSelfTest(bool enabled);
+    bool getAccelYSelfTest();
+    void setAccelYSelfTest(bool enabled);
+    bool getAccelZSelfTest();
+    void setAccelZSelfTest(bool enabled);
+    uint8_t getFullScaleAccelRange();
+    void setFullScaleAccelRange(uint8_t range);
+    uint8_t getDHPFMode();
+    void setDHPFMode(uint8_t mode);
+
+    // FF_THR register
+    uint8_t getFreefallDetectionThreshold();
+    void setFreefallDetectionThreshold(uint8_t threshold);
+
+    // FF_DUR register
+    uint8_t getFreefallDetectionDuration();
+    void setFreefallDetectionDuration(uint8_t duration);
+
+    // MOT_THR register
+    uint8_t getMotionDetectionThreshold();
+    void setMotionDetectionThreshold(uint8_t threshold);
+
+    // MOT_DUR register
+    uint8_t getMotionDetectionDuration();
+    void setMotionDetectionDuration(uint8_t duration);
+
+    // ZRMOT_THR register
+    uint8_t getZeroMotionDetectionThreshold();
+    void setZeroMotionDetectionThreshold(uint8_t threshold);
+
+    // ZRMOT_DUR register
+    uint8_t getZeroMotionDetectionDuration();
+    void setZeroMotionDetectionDuration(uint8_t duration);
+
+    // FIFO_EN register
+    bool getTempFIFOEnabled();
+    void setTempFIFOEnabled(bool enabled);
+    bool getXGyroFIFOEnabled();
+    void setXGyroFIFOEnabled(bool enabled);
+    bool getYGyroFIFOEnabled();
+    void setYGyroFIFOEnabled(bool enabled);
+    bool getZGyroFIFOEnabled();
+    void setZGyroFIFOEnabled(bool enabled);
+    bool getAccelFIFOEnabled();
+    void setAccelFIFOEnabled(bool enabled);
+    bool getSlave2FIFOEnabled();
+    void setSlave2FIFOEnabled(bool enabled);
+    bool getSlave1FIFOEnabled();
+    void setSlave1FIFOEnabled(bool enabled);
+    bool getSlave0FIFOEnabled();
+    void setSlave0FIFOEnabled(bool enabled);
+
+    // I2C_MST_CTRL register
+    bool getMultiMasterEnabled();
+    void setMultiMasterEnabled(bool enabled);
+    bool getWaitForExternalSensorEnabled();
+    void setWaitForExternalSensorEnabled(bool enabled);
+    bool getSlave3FIFOEnabled();
+    void setSlave3FIFOEnabled(bool enabled);
+    bool getSlaveReadWriteTransitionEnabled();
+    void setSlaveReadWriteTransitionEnabled(bool enabled);
+    uint8_t getMasterClockSpeed();
+    void setMasterClockSpeed(uint8_t speed);
+
+    // I2C_SLV* registers (Slave 0-3)
+    uint8_t getSlaveAddress(uint8_t num);
+    void setSlaveAddress(uint8_t num, uint8_t address);
+    uint8_t getSlaveRegister(uint8_t num);
+    void setSlaveRegister(uint8_t num, uint8_t reg);
+    bool getSlaveEnabled(uint8_t num);
+    void setSlaveEnabled(uint8_t num, bool enabled);
+    bool getSlaveWordByteSwap(uint8_t num);
+    void setSlaveWordByteSwap(uint8_t num, bool enabled);
+    bool getSlaveWriteMode(uint8_t num);
+    void setSlaveWriteMode(uint8_t num, bool mode);
+    bool getSlaveWordGroupOffset(uint8_t num);
+    void setSlaveWordGroupOffset(uint8_t num, bool enabled);
+    uint8_t getSlaveDataLength(uint8_t num);
+    void setSlaveDataLength(uint8_t num, uint8_t length);
+
+    // I2C_SLV* registers (Slave 4)
+    uint8_t getSlave4Address();
+    void setSlave4Address(uint8_t address);
+    uint8_t getSlave4Register();
+    void setSlave4Register(uint8_t reg);
+    void setSlave4OutputByte(uint8_t data);
+    bool getSlave4Enabled();
+    void setSlave4Enabled(bool enabled);
+    bool getSlave4InterruptEnabled();
+    void setSlave4InterruptEnabled(bool enabled);
+    bool getSlave4WriteMode();
+    void setSlave4WriteMode(bool mode);
+    uint8_t getSlave4MasterDelay();
+    void setSlave4MasterDelay(uint8_t delay);
+    uint8_t getSlate4InputByte();
+
+    // I2C_MST_STATUS register
+    bool getPassthroughStatus();
+    bool getSlave4IsDone();
+    bool getLostArbitration();
+    bool getSlave4Nack();
+    bool getSlave3Nack();
+    bool getSlave2Nack();
+    bool getSlave1Nack();
+    bool getSlave0Nack();
+
+    // INT_PIN_CFG register
+    bool getInterruptMode();
+    void setInterruptMode(bool mode);
+    bool getInterruptDrive();
+    void setInterruptDrive(bool drive);
+    bool getInterruptLatch();
+    void setInterruptLatch(bool latch);
+    bool getInterruptLatchClear();
+    void setInterruptLatchClear(bool clear);
+    bool getFSyncInterruptLevel();
+    void setFSyncInterruptLevel(bool level);
+    bool getFSyncInterruptEnabled();
+    void setFSyncInterruptEnabled(bool enabled);
+    bool getI2CBypassEnabled();
+    void setI2CBypassEnabled(bool enabled);
+    bool getClockOutputEnabled();
+    void setClockOutputEnabled(bool enabled);
+
+    // INT_ENABLE register
+    uint8_t getIntEnabled();
+    void setIntEnabled(uint8_t enabled);
+    bool getIntFreefallEnabled();
+    void setIntFreefallEnabled(bool enabled);
+    bool getIntMotionEnabled();
+    void setIntMotionEnabled(bool enabled);
+    bool getIntZeroMotionEnabled();
+    void setIntZeroMotionEnabled(bool enabled);
+    bool getIntFIFOBufferOverflowEnabled();
+    void setIntFIFOBufferOverflowEnabled(bool enabled);
+    bool getIntI2CMasterEnabled();
+    void setIntI2CMasterEnabled(bool enabled);
+    bool getIntDataReadyEnabled();
+    void setIntDataReadyEnabled(bool enabled);
+
+    // INT_STATUS register
+    uint8_t getIntStatus();
+    bool getIntFreefallStatus();
+    bool getIntMotionStatus();
+    bool getIntZeroMotionStatus();
+    bool getIntFIFOBufferOverflowStatus();
+    bool getIntI2CMasterStatus();
+    bool getIntDataReadyStatus();
+
+    // ACCEL_*OUT_* registers
+    void getMotion9(int16_t* ax, int16_t* ay, int16_t* az, int16_t* gx, int16_t* gy, int16_t* gz, int16_t* mx, int16_t* my,
+                    int16_t* mz);
+    void getMotion6(int16_t* ax, int16_t* ay, int16_t* az, int16_t* gx, int16_t* gy, int16_t* gz);
+    void getAcceleration(int16_t* x, int16_t* y, int16_t* z);
+    int16_t getAccelerationX();
+    int16_t getAccelerationY();
+    int16_t getAccelerationZ();
+
+    // TEMP_OUT_* registers
+    int16_t getTemperature();
+
+    // GYRO_*OUT_* registers
+    void getRotation(int16_t* x, int16_t* y, int16_t* z);
+    int16_t getRotationX();
+    int16_t getRotationY();
+    int16_t getRotationZ();
+
+    // EXT_SENS_DATA_* registers
+    uint8_t getExternalSensorByte(int position);
+    uint16_t getExternalSensorWord(int position);
+    uint32_t getExternalSensorDWord(int position);
+
+    // MOT_DETECT_STATUS register
+    bool getXNegMotionDetected();
+    bool getXPosMotionDetected();
+    bool getYNegMotionDetected();
+    bool getYPosMotionDetected();
+    bool getZNegMotionDetected();
+    bool getZPosMotionDetected();
+    bool getZeroMotionDetected();
+
+    // I2C_SLV*_DO register
+    void setSlaveOutputByte(uint8_t num, uint8_t data);
+
+    // I2C_MST_DELAY_CTRL register
+    bool getExternalShadowDelayEnabled();
+    void setExternalShadowDelayEnabled(bool enabled);
+    bool getSlaveDelayEnabled(uint8_t num);
+    void setSlaveDelayEnabled(uint8_t num, bool enabled);
+
+    // SIGNAL_PATH_RESET register
+    void resetGyroscopePath();
+    void resetAccelerometerPath();
+    void resetTemperaturePath();
+
+    // MOT_DETECT_CTRL register
+    uint8_t getAccelerometerPowerOnDelay();
+    void setAccelerometerPowerOnDelay(uint8_t delay);
+    uint8_t getFreefallDetectionCounterDecrement();
+    void setFreefallDetectionCounterDecrement(uint8_t decrement);
+    uint8_t getMotionDetectionCounterDecrement();
+    void setMotionDetectionCounterDecrement(uint8_t decrement);
+
+    // USER_CTRL register
+    bool getFIFOEnabled();
+    void setFIFOEnabled(bool enabled);
+    bool getI2CMasterModeEnabled();
+    void setI2CMasterModeEnabled(bool enabled);
+    void switchSPIEnabled(bool enabled);
+    void resetFIFO();
+    void resetI2CMaster();
+    void resetSensors();
+
+    // PWR_MGMT_1 register
+    void reset();
+    bool getSleepEnabled();
+    void setSleepEnabled(bool enabled);
+    bool getWakeCycleEnabled();
+    void setWakeCycleEnabled(bool enabled);
+    bool getTempSensorEnabled();
+    void setTempSensorEnabled(bool enabled);
+    uint8_t getClockSource();
+    void setClockSource(uint8_t source);
+
+    // PWR_MGMT_2 register
+    uint8_t getWakeFrequency();
+    void setWakeFrequency(uint8_t frequency);
+    bool getStandbyXAccelEnabled();
+    void setStandbyXAccelEnabled(bool enabled);
+    bool getStandbyYAccelEnabled();
+    void setStandbyYAccelEnabled(bool enabled);
+    bool getStandbyZAccelEnabled();
+    void setStandbyZAccelEnabled(bool enabled);
+    bool getStandbyXGyroEnabled();
+    void setStandbyXGyroEnabled(bool enabled);
+    bool getStandbyYGyroEnabled();
+    void setStandbyYGyroEnabled(bool enabled);
+    bool getStandbyZGyroEnabled();
+    void setStandbyZGyroEnabled(bool enabled);
+
+    // FIFO_COUNT_* registers
+    uint16_t getFIFOCount();
+
+    // FIFO_R_W register
+    uint8_t getFIFOByte();
+    void setFIFOByte(uint8_t data);
+    void getFIFOBytes(uint8_t* data, uint8_t length);
+
+    // WHO_AM_I register
+    uint8_t getDeviceID();
+    void setDeviceID(uint8_t id);
+
+    // ======== UNDOCUMENTED/DMP REGISTERS/METHODS ========
+
+    // XG_OFFS_TC register
+    uint8_t getOTPBankValid();
+    void setOTPBankValid(bool enabled);
+    int8_t getXGyroOffset();
+    void setXGyroOffset(int8_t offset);
+
+    // YG_OFFS_TC register
+    int8_t getYGyroOffset();
+    void setYGyroOffset(int8_t offset);
+
+    // ZG_OFFS_TC register
+    int8_t getZGyroOffset();
+    void setZGyroOffset(int8_t offset);
+
+    // X_FINE_GAIN register
+    int8_t getXFineGain();
+    void setXFineGain(int8_t gain);
+
+    // Y_FINE_GAIN register
+    int8_t getYFineGain();
+    void setYFineGain(int8_t gain);
+
+    // Z_FINE_GAIN register
+    int8_t getZFineGain();
+    void setZFineGain(int8_t gain);
+
+    // XA_OFFS_* registers
+    int16_t getXAccelOffset();
+    void setXAccelOffset(int16_t offset);
+
+    // YA_OFFS_* register
+    int16_t getYAccelOffset();
+    void setYAccelOffset(int16_t offset);
+
+    // ZA_OFFS_* register
+    int16_t getZAccelOffset();
+    void setZAccelOffset(int16_t offset);
+
+    // XG_OFFS_USR* registers
+    int16_t getXGyroOffsetUser();
+    void setXGyroOffsetUser(int16_t offset);
+
+    // YG_OFFS_USR* register
+    int16_t getYGyroOffsetUser();
+    void setYGyroOffsetUser(int16_t offset);
+
+    // ZG_OFFS_USR* register
+    int16_t getZGyroOffsetUser();
+    void setZGyroOffsetUser(int16_t offset);
+
+    // INT_ENABLE register (DMP functions)
+    bool getIntPLLReadyEnabled();
+    void setIntPLLReadyEnabled(bool enabled);
+    bool getIntDMPEnabled();
+    void setIntDMPEnabled(bool enabled);
+
+    // DMP_INT_STATUS
+    bool getDMPInt5Status();
+    bool getDMPInt4Status();
+    bool getDMPInt3Status();
+    bool getDMPInt2Status();
+    bool getDMPInt1Status();
+    bool getDMPInt0Status();
+
+    // INT_STATUS register (DMP functions)
+    bool getIntPLLReadyStatus();
+    bool getIntDMPStatus();
+
+    // USER_CTRL register (DMP functions)
+    bool getDMPEnabled();
+    void setDMPEnabled(bool enabled);
+    void resetDMP();
+
+    // BANK_SEL register
+    void setMemoryBank(uint8_t bank, bool prefetchEnabled = false, bool userBank = false);
+
+    // MEM_START_ADDR register
+    void setMemoryStartAddress(uint8_t address);
+
+    // MEM_R_W register
+    uint8_t readMemoryByte();
+    void writeMemoryByte(uint8_t data);
+    void readMemoryBlock(uint8_t* data, uint16_t dataSize, uint8_t bank = 0, uint8_t address = 0);
+    bool writeMemoryBlock(const uint8_t* data, uint16_t dataSize, uint8_t bank = 0, uint8_t address = 0, bool verify = true,
+                          bool useProgMem = false);
+    bool writeProgMemoryBlock(const uint8_t* data, uint16_t dataSize, uint8_t bank = 0, uint8_t address = 0,
+                              bool verify = true);
+
+    bool writeDMPConfigurationSet(const uint8_t* data, uint16_t dataSize, bool useProgMem = false);
+    bool writeProgDMPConfigurationSet(const uint8_t* data, uint16_t dataSize);
+
+    // DMP_CFG_1 register
+    uint8_t getDMPConfig1();
+    void setDMPConfig1(uint8_t config);
+
+    // DMP_CFG_2 register
+    uint8_t getDMPConfig2();
+    void setDMPConfig2(uint8_t config);
+
+    // special methods for MotionApps 2.0 implementation
+    #ifdef MPU6050_INCLUDE_DMP_MOTIONAPPS20
+    uint8_t* dmpPacketBuffer;
+    uint16_t dmpPacketSize;
+
+    uint8_t dmpInitialize();
+    bool dmpPacketAvailable();
+
+    uint8_t dmpSetFIFORate(uint8_t fifoRate);
+    uint8_t dmpGetFIFORate();
+    uint8_t dmpGetSampleStepSizeMS();
+    uint8_t dmpGetSampleFrequency();
+    int32_t dmpDecodeTemperature(int8_t tempReg);
+
+    // Register callbacks after a packet of FIFO data is processed
+    //uint8_t dmpRegisterFIFORateProcess(inv_obj_func func, int16_t priority);
+    //uint8_t dmpUnregisterFIFORateProcess(inv_obj_func func);
+    uint8_t dmpRunFIFORateProcesses();
+
+    // Setup FIFO for various output
+    uint8_t dmpSendQuaternion(uint_fast16_t accuracy);
+    uint8_t dmpSendGyro(uint_fast16_t elements, uint_fast16_t accuracy);
+    uint8_t dmpSendAccel(uint_fast16_t elements, uint_fast16_t accuracy);
+    uint8_t dmpSendLinearAccel(uint_fast16_t elements, uint_fast16_t accuracy);
+    uint8_t dmpSendLinearAccelInWorld(uint_fast16_t elements, uint_fast16_t accuracy);
+    uint8_t dmpSendControlData(uint_fast16_t elements, uint_fast16_t accuracy);
+    uint8_t dmpSendSensorData(uint_fast16_t elements, uint_fast16_t accuracy);
+    uint8_t dmpSendExternalSensorData(uint_fast16_t elements, uint_fast16_t accuracy);
+    uint8_t dmpSendGravity(uint_fast16_t elements, uint_fast16_t accuracy);
+    uint8_t dmpSendPacketNumber(uint_fast16_t accuracy);
+    uint8_t dmpSendQuantizedAccel(uint_fast16_t elements, uint_fast16_t accuracy);
+    uint8_t dmpSendEIS(uint_fast16_t elements, uint_fast16_t accuracy);
+
+    // Get Fixed Point data from FIFO
+    uint8_t dmpGetAccel(int32_t* data, const uint8_t* packet = 0);
+    uint8_t dmpGetAccel(int16_t* data, const uint8_t* packet = 0);
+    uint8_t dmpGetAccel(VectorInt16* v, const uint8_t* packet = 0);
+    uint8_t dmpGetQuaternion(int32_t* data, const uint8_t* packet = 0);
+    uint8_t dmpGetQuaternion(int16_t* data, const uint8_t* packet = 0);
+    uint8_t dmpGetQuaternion(Quaternion* q, const uint8_t* packet = 0);
+    uint8_t dmpGet6AxisQuaternion(int32_t* data, const uint8_t* packet = 0);
+    uint8_t dmpGet6AxisQuaternion(int16_t* data, const uint8_t* packet = 0);
+    uint8_t dmpGet6AxisQuaternion(Quaternion* q, const uint8_t* packet = 0);
+    uint8_t dmpGetRelativeQuaternion(int32_t* data, const uint8_t* packet = 0);
+    uint8_t dmpGetRelativeQuaternion(int16_t* data, const uint8_t* packet = 0);
+    uint8_t dmpGetRelativeQuaternion(Quaternion* data, const uint8_t* packet = 0);
+    uint8_t dmpGetGyro(int32_t* data, const uint8_t* packet = 0);
+    uint8_t dmpGetGyro(int16_t* data, const uint8_t* packet = 0);
+    uint8_t dmpGetGyro(VectorInt16* v, const uint8_t* packet = 0);
+    uint8_t dmpSetLinearAccelFilterCoefficient(float coef);
+    uint8_t dmpGetLinearAccel(int32_t* data, const uint8_t* packet = 0);
+    uint8_t dmpGetLinearAccel(int16_t* data, const uint8_t* packet = 0);
+    uint8_t dmpGetLinearAccel(VectorInt16* v, const uint8_t* packet = 0);
+    uint8_t dmpGetLinearAccel(VectorInt16* v, VectorInt16* vRaw, VectorFloat* gravity);
+    uint8_t dmpGetLinearAccelInWorld(int32_t* data, const uint8_t* packet = 0);
+    uint8_t dmpGetLinearAccelInWorld(int16_t* data, const uint8_t* packet = 0);
+    uint8_t dmpGetLinearAccelInWorld(VectorInt16* v, const uint8_t* packet = 0);
+    uint8_t dmpGetLinearAccelInWorld(VectorInt16* v, VectorInt16* vReal, Quaternion* q);
+    uint8_t dmpGetGyroAndAccelSensor(int32_t* data, const uint8_t* packet = 0);
+    uint8_t dmpGetGyroAndAccelSensor(int16_t* data, const uint8_t* packet = 0);
+    uint8_t dmpGetGyroAndAccelSensor(VectorInt16* g, VectorInt16* a, const uint8_t* packet = 0);
+    uint8_t dmpGetGyroSensor(int32_t* data, const uint8_t* packet = 0);
+    uint8_t dmpGetGyroSensor(int16_t* data, const uint8_t* packet = 0);
+    uint8_t dmpGetGyroSensor(VectorInt16* v, const uint8_t* packet = 0);
+    uint8_t dmpGetControlData(int32_t* data, const uint8_t* packet = 0);
+    uint8_t dmpGetTemperature(int32_t* data, const uint8_t* packet = 0);
+    uint8_t dmpGetGravity(int32_t* data, const uint8_t* packet = 0);
+    uint8_t dmpGetGravity(int16_t* data, const uint8_t* packet = 0);
+    uint8_t dmpGetGravity(VectorInt16* v, const uint8_t* packet = 0);
+    uint8_t dmpGetGravity(VectorFloat* v, Quaternion* q);
+    uint8_t dmpGetUnquantizedAccel(int32_t* data, const uint8_t* packet = 0);
+    uint8_t dmpGetUnquantizedAccel(int16_t* data, const uint8_t* packet = 0);
+    uint8_t dmpGetUnquantizedAccel(VectorInt16* v, const uint8_t* packet = 0);
+    uint8_t dmpGetQuantizedAccel(int32_t* data, const uint8_t* packet = 0);
+    uint8_t dmpGetQuantizedAccel(int16_t* data, const uint8_t* packet = 0);
+    uint8_t dmpGetQuantizedAccel(VectorInt16* v, const uint8_t* packet = 0);
+    uint8_t dmpGetExternalSensorData(int32_t* data, uint16_t size, const uint8_t* packet = 0);
+    uint8_t dmpGetEIS(int32_t* data, const uint8_t* packet = 0);
+
+    uint8_t dmpGetEuler(float* data, Quaternion* q);
+    uint8_t dmpGetYawPitchRoll(float* data, Quaternion* q, VectorFloat* gravity);
+
+    // Get Floating Point data from FIFO
+    uint8_t dmpGetAccelFloat(float* data, const uint8_t* packet = 0);
+    uint8_t dmpGetQuaternionFloat(float* data, const uint8_t* packet = 0);
+
+    uint8_t dmpProcessFIFOPacket(const unsigned char* dmpData);
+    uint8_t dmpReadAndProcessFIFOPacket(uint8_t numPackets, uint8_t* processed = NULL);
+
+    uint8_t dmpSetFIFOProcessedCallback(void (*func)(void));
+
+    uint8_t dmpInitFIFOParam();
+    uint8_t dmpCloseFIFO();
+    uint8_t dmpSetGyroDataSource(uint8_t source);
+    uint8_t dmpDecodeQuantizedAccel();
+    uint32_t dmpGetGyroSumOfSquare();
+    uint32_t dmpGetAccelSumOfSquare();
+    void dmpOverrideQuaternion(long* q);
+    uint16_t dmpGetFIFOPacketSize();
+    #endif
+
+    // special methods for MotionApps 4.1 implementation
+    #ifdef MPU6050_INCLUDE_DMP_MOTIONAPPS41
+    uint8_t* dmpPacketBuffer;
+    uint16_t dmpPacketSize;
+
+    uint8_t dmpInitialize();
+    bool dmpPacketAvailable();
+
+    uint8_t dmpSetFIFORate(uint8_t fifoRate);
+    uint8_t dmpGetFIFORate();
+    uint8_t dmpGetSampleStepSizeMS();
+    uint8_t dmpGetSampleFrequency();
+    int32_t dmpDecodeTemperature(int8_t tempReg);
+
+    // Register callbacks after a packet of FIFO data is processed
+    //uint8_t dmpRegisterFIFORateProcess(inv_obj_func func, int16_t priority);
+    //uint8_t dmpUnregisterFIFORateProcess(inv_obj_func func);
+    uint8_t dmpRunFIFORateProcesses();
+
+    // Setup FIFO for various output
+    uint8_t dmpSendQuaternion(uint_fast16_t accuracy);
+    uint8_t dmpSendGyro(uint_fast16_t elements, uint_fast16_t accuracy);
+    uint8_t dmpSendAccel(uint_fast16_t elements, uint_fast16_t accuracy);
+    uint8_t dmpSendLinearAccel(uint_fast16_t elements, uint_fast16_t accuracy);
+    uint8_t dmpSendLinearAccelInWorld(uint_fast16_t elements, uint_fast16_t accuracy);
+    uint8_t dmpSendControlData(uint_fast16_t elements, uint_fast16_t accuracy);
+    uint8_t dmpSendSensorData(uint_fast16_t elements, uint_fast16_t accuracy);
+    uint8_t dmpSendExternalSensorData(uint_fast16_t elements, uint_fast16_t accuracy);
+    uint8_t dmpSendGravity(uint_fast16_t elements, uint_fast16_t accuracy);
+    uint8_t dmpSendPacketNumber(uint_fast16_t accuracy);
+    uint8_t dmpSendQuantizedAccel(uint_fast16_t elements, uint_fast16_t accuracy);
+    uint8_t dmpSendEIS(uint_fast16_t elements, uint_fast16_t accuracy);
+
+    // Get Fixed Point data from FIFO
+    uint8_t dmpGetAccel(int32_t* data, const uint8_t* packet = 0);
+    uint8_t dmpGetAccel(int16_t* data, const uint8_t* packet = 0);
+    uint8_t dmpGetAccel(VectorInt16* v, const uint8_t* packet = 0);
+    uint8_t dmpGetQuaternion(int32_t* data, const uint8_t* packet = 0);
+    uint8_t dmpGetQuaternion(int16_t* data, const uint8_t* packet = 0);
+    uint8_t dmpGetQuaternion(Quaternion* q, const uint8_t* packet = 0);
+    uint8_t dmpGet6AxisQuaternion(int32_t* data, const uint8_t* packet = 0);
+    uint8_t dmpGet6AxisQuaternion(int16_t* data, const uint8_t* packet = 0);
+    uint8_t dmpGet6AxisQuaternion(Quaternion* q, const uint8_t* packet = 0);
+    uint8_t dmpGetRelativeQuaternion(int32_t* data, const uint8_t* packet = 0);
+    uint8_t dmpGetRelativeQuaternion(int16_t* data, const uint8_t* packet = 0);
+    uint8_t dmpGetRelativeQuaternion(Quaternion* data, const uint8_t* packet = 0);
+    uint8_t dmpGetGyro(int32_t* data, const uint8_t* packet = 0);
+    uint8_t dmpGetGyro(int16_t* data, const uint8_t* packet = 0);
+    uint8_t dmpGetGyro(VectorInt16* v, const uint8_t* packet = 0);
+    uint8_t dmpGetMag(int16_t* data, const uint8_t* packet = 0);
+    uint8_t dmpSetLinearAccelFilterCoefficient(float coef);
+    uint8_t dmpGetLinearAccel(int32_t* data, const uint8_t* packet = 0);
+    uint8_t dmpGetLinearAccel(int16_t* data, const uint8_t* packet = 0);
+    uint8_t dmpGetLinearAccel(VectorInt16* v, const uint8_t* packet = 0);
+    uint8_t dmpGetLinearAccel(VectorInt16* v, VectorInt16* vRaw, VectorFloat* gravity);
+    uint8_t dmpGetLinearAccelInWorld(int32_t* data, const uint8_t* packet = 0);
+    uint8_t dmpGetLinearAccelInWorld(int16_t* data, const uint8_t* packet = 0);
+    uint8_t dmpGetLinearAccelInWorld(VectorInt16* v, const uint8_t* packet = 0);
+    uint8_t dmpGetLinearAccelInWorld(VectorInt16* v, VectorInt16* vReal, Quaternion* q);
+    uint8_t dmpGetGyroAndAccelSensor(int32_t* data, const uint8_t* packet = 0);
+    uint8_t dmpGetGyroAndAccelSensor(int16_t* data, const uint8_t* packet = 0);
+    uint8_t dmpGetGyroAndAccelSensor(VectorInt16* g, VectorInt16* a, const uint8_t* packet = 0);
+    uint8_t dmpGetGyroSensor(int32_t* data, const uint8_t* packet = 0);
+    uint8_t dmpGetGyroSensor(int16_t* data, const uint8_t* packet = 0);
+    uint8_t dmpGetGyroSensor(VectorInt16* v, const uint8_t* packet = 0);
+    uint8_t dmpGetControlData(int32_t* data, const uint8_t* packet = 0);
+    uint8_t dmpGetTemperature(int32_t* data, const uint8_t* packet = 0);
+    uint8_t dmpGetGravity(int32_t* data, const uint8_t* packet = 0);
+    uint8_t dmpGetGravity(int16_t* data, const uint8_t* packet = 0);
+    uint8_t dmpGetGravity(VectorInt16* v, const uint8_t* packet = 0);
+    uint8_t dmpGetGravity(VectorFloat* v, Quaternion* q);
+    uint8_t dmpGetUnquantizedAccel(int32_t* data, const uint8_t* packet = 0);
+    uint8_t dmpGetUnquantizedAccel(int16_t* data, const uint8_t* packet = 0);
+    uint8_t dmpGetUnquantizedAccel(VectorInt16* v, const uint8_t* packet = 0);
+    uint8_t dmpGetQuantizedAccel(int32_t* data, const uint8_t* packet = 0);
+    uint8_t dmpGetQuantizedAccel(int16_t* data, const uint8_t* packet = 0);
+    uint8_t dmpGetQuantizedAccel(VectorInt16* v, const uint8_t* packet = 0);
+    uint8_t dmpGetExternalSensorData(int32_t* data, uint16_t size, const uint8_t* packet = 0);
+    uint8_t dmpGetEIS(int32_t* data, const uint8_t* packet = 0);
+
+    uint8_t dmpGetEuler(float* data, Quaternion* q);
+    uint8_t dmpGetYawPitchRoll(float* data, Quaternion* q, VectorFloat* gravity);
+
+    // Get Floating Point data from FIFO
+    uint8_t dmpGetAccelFloat(float* data, const uint8_t* packet = 0);
+    uint8_t dmpGetQuaternionFloat(float* data, const uint8_t* packet = 0);
+
+    uint8_t dmpProcessFIFOPacket(const unsigned char* dmpData);
+    uint8_t dmpReadAndProcessFIFOPacket(uint8_t numPackets, uint8_t* processed = NULL);
+
+    uint8_t dmpSetFIFOProcessedCallback(void (*func)(void));
+
+    uint8_t dmpInitFIFOParam();
+    uint8_t dmpCloseFIFO();
+    uint8_t dmpSetGyroDataSource(uint8_t source);
+    uint8_t dmpDecodeQuantizedAccel();
+    uint32_t dmpGetGyroSumOfSquare();
+    uint32_t dmpGetAccelSumOfSquare();
+    void dmpOverrideQuaternion(long* q);
+    uint16_t dmpGetFIFOPacketSize();
+    #endif
+
+  private:
+    uint8_t devAddr;
+    uint8_t buffer[14];
+};
+
+#endif /* _MPU6050_H_ */
diff --git a/labyrinthe/3-arduino/test/imu-test/imu-test.ino b/labyrinthe/3-arduino/test/imu-test/imu-test.ino
index db1dbf0..0c45741 100644
--- a/labyrinthe/3-arduino/test/imu-test/imu-test.ino
+++ b/labyrinthe/3-arduino/test/imu-test/imu-test.ino
@@ -15,26 +15,24 @@
  * I2C
  ******************************************************************************/
 
-// I2Cdev and MPU6050 must be installed as libraries, or else the .cpp/.h files
+// fr : I2Cdev et MPU6050 doivent être installée comme bibilothèque ou sinon les fichiers .cpp et .h
+// des deux classes doivent être inclus dans le chemin du projet
+// en : I2Cdev and MPU6050 must be installed as libraries, or else the .cpp/.h files
 // for both classes must be in the include path of your project
 #include "I2Cdev.h"
 #include "MPU6050.h"
 
-// class default I2C address is 0x68
+// fr : L'adresse par défault de la classe I2C est 0x68
+// en : Class default I2C address is 0x68
 // specific I2C addresses may be passed as a parameter here
 // AD0 low = 0x68 (default for InvenSense evaluation board)
 // AD0 high = 0x69
 MPU6050 accelgyro;
 I2Cdev   I2C_M;
 
-uint8_t buffer_m[6];
 int16_t ax, ay, az;
 int16_t gx, gy, gz;
 int16_t mx, my, mz;
-
-float heading;
-float tiltheading;
-
 float Axyz[3];
 float roll;
 float pitch;
@@ -47,63 +45,16 @@ String pitch_txt;
  * Pupitre
  ******************************************************************************/
 
-// Adressage Led Arduino
+// Adressage de la led Arduino
 const int led =  13; // Led de mouvement (onboard)
 const int led_com =  10; // Led de communication modele 3d-> arduino
 
-// Adressage Entrees Arduino
-// const int bt_a_m =  A1; // Bouton A+ (verin droit)
-// const int bt_a_d =  A0; // Bouton A- (verin droit)
-// const int bt_b_m =  A3; // Bouton B+ (verin gauche arrière)
-// const int bt_b_d =  A2; // Bouton B- (verin gauche arrière)
-// const int bt_c_m =  3; // Bouton C+ (verin gauche avant)
-// const int bt_c_d =  2; // Bouton C- (verin gauche avant)
-
-// Entrees numeriques (modele 3D) 
-// bool bt_a_m_num=false ; // Bouton A+ (verin droit)
-// bool bt_a_d_num=false; // Bouton A- (verin droit)
-// bool bt_b_m_num=false; // Bouton B+ (verin gauche arrière)
-// bool bt_b_d_num=false; // Bouton B- (verin gauche arrière)
-// bool bt_c_m_num=false; // Bouton C+ (verin gauche avant)
-// bool bt_c_d_num=false; // Bouton C- (verin gauche avant) 
- 
-// // Adressage Sorties Arduino
-// const int v_a_v = 5; // Mouvement A (verin droit) : Vitesse (grove fil blanc)
-// const int v_a_s = 4; // Mouvement A (verin droit) : Sens (grove  fil jaune)
-// const int v_b_v = 7; // Mouvement B (verin gauche arriere) : Vitesse (grove fil blanc)
-// const int v_b_s = 6; // Mouvement B (verin gauche arriere) : Sens (grove fil jaune)
-// const int v_c_v = 9; // Mouvement C (verin gauche avant) : Vitesse (grove fil blanc)
-// const int v_c_s = 8; // Mouvement C (verin gauche avant) : Sens (grove fil jaune)
-
-/******************************************************************************
- * Communication serie
- ******************************************************************************/
-
-String serial_msg = ""; // Message 
-bool serial_msg_complet = false;  // Flag de message complet
-
 /******************************************************************************
  * Initialisation
  ******************************************************************************/
    
 void setup() {
 
-  // Configure les broches des entrees
-  // pinMode(bt_a_m, INPUT);
-  // pinMode(bt_a_d, INPUT);
-  // pinMode(bt_b_m, INPUT);
-  // pinMode(bt_b_d, INPUT);
-  // pinMode(bt_c_m, INPUT);
-  // pinMode(bt_c_d, INPUT);
-  
-  // // Configure les broches des sorties 
-  // pinMode(v_a_v, OUTPUT);
-  // pinMode(v_a_s, OUTPUT);
-  // pinMode(v_b_v, OUTPUT);
-  // pinMode(v_b_s, OUTPUT);
-  // pinMode(v_c_v, OUTPUT);
-  // pinMode(v_c_s, OUTPUT);
-
   pinMode(led, OUTPUT); // Led de mouvement
   pinMode(led_com, OUTPUT); // Led de communication modele 3d-> arduino
   digitalWrite(led, LOW);
@@ -111,12 +62,12 @@ void setup() {
 
   // Moniteur serie
   Serial.begin(115200); // 7 fps
-  /* Serial.begin(38400); */ // 6 fps
+    /* Serial.begin(38400); */ // 6 fps
   /* Serial.begin(9600); */ // trop lent 2fps
 
   // I2C
   Wire.begin();
-  Serial.println("Initializing I2C devices...");
+  Serial.println("Initialisation des composants I2C.");
   accelgyro.initialize();
  }
 
@@ -126,147 +77,10 @@ void setup() {
 
 void loop() {
 
-  //   /*****
-  //    * Communication : modele 3d -> arduino
-  //    *****/
-
-  //   if (serial_msg_complet) {
-	// if (serial_msg =="Bp Am R\n") bt_a_m_num=false;
-	// if (serial_msg =="Bp Am\n") bt_a_m_num=true;
-	// if (serial_msg =="Bp Ad R\n") bt_a_d_num=false;
-	// if (serial_msg =="Bp Ad\n") bt_a_d_num=true;
-	// if (serial_msg =="Bp Bm R\n") bt_b_m_num=false;
-	// if (serial_msg =="Bp Bm\n") bt_b_m_num=true;
-	// if (serial_msg =="Bp Bd R\n") bt_b_d_num=false;
-	// if (serial_msg =="Bp Bd\n") bt_b_d_num=true;
-	// if (serial_msg =="Bp Cm R\n") bt_c_m_num=false;
-	// if (serial_msg =="Bp Cm\n") bt_c_m_num=true;
-	// if (serial_msg =="Bp Cd R\n") bt_c_d_num=false;
-	// if (serial_msg =="Bp Cd\n") bt_c_d_num=true;
-
-	// /* Serial.println("Echo : "+serial_msg); */
-  //   	serial_msg = "";
-  //   	serial_msg_complet = false;
-  //   }
-     
-  //   /*****
-  //    * Verin A (verin droit)
-  //    *****/
-
-  //    // Bouton physique : LOW = actif et HIGH = pas actif
-  //   // Bouton numérique (modele 3d) : true = actif et false = pas actif
-
-  //   // A+ (sortie de tige)
-  //   if ((digitalRead(bt_a_m) == LOW || bt_a_m_num) && digitalRead(bt_a_d) == HIGH && !bt_a_d_num) {
-	// /* Serial.println("A+");  */
-	// digitalWrite(v_a_v, HIGH); // Mouvement A : Vitesse (fil blanc)
-	// digitalWrite(v_a_s, LOW); // Mouvement A : Sens trigo (fil jaune)
-	// digitalWrite(led, HIGH);
-  //   }
-
-  //   // A- (rentrée de tige)
-  //   if ((digitalRead(bt_a_d) == LOW || bt_a_d_num) && digitalRead(bt_a_m) == HIGH && !bt_a_m_num) {
-	// /* Serial.println("A-"); */
-	// digitalWrite(v_a_v, HIGH); // Mouvement A : Vitesse (fil blanc)
-	// digitalWrite(v_a_s, HIGH); // Mouvement A : Sens horaire (fil jaune)
-	// digitalWrite(led, HIGH);
-  //   }
-
-  //   // Stop A
-  //   if (digitalRead(bt_a_m) == LOW && (digitalRead(bt_a_d) == LOW || bt_a_d_num)){ // Ordres contradictoires
-	// /* Serial.println("Stop A"); */
-	// digitalWrite(v_a_v, LOW); // Mouvement A : Vitesse nulle (fil blanc)
-	// digitalWrite(led, LOW);
-  //   }
-  //   if (digitalRead(bt_a_d) == LOW && (digitalRead(bt_a_m) == LOW || bt_a_m_num)){ // Ordres contradictoires
-	// /* Serial.println("Stop A"); */
-	// digitalWrite(v_a_v, LOW); // Mouvement A : Vitesse nulle (fil blanc)
-	// digitalWrite(led, LOW);
-  //   }
-  //   if (digitalRead(bt_a_m) == HIGH && digitalRead(bt_a_d) == HIGH && !bt_a_m_num && !bt_a_d_num){ // Aucun ordre
-	// /* Serial.println("Stop A"); */
-	// digitalWrite(v_a_v, LOW); // Mouvement A : Vitesse nulle (fil blanc)
-	// digitalWrite(led, LOW);
-  //   }
-
-  //    /*****
-  //    * Verin B (verin gauche arriere)
-  //    *****/
-
-  //   // B+ (sortie de tige)
-  //   if ((digitalRead(bt_b_m) == LOW || bt_b_m_num) && digitalRead(bt_b_d) == HIGH && !bt_b_d_num) {
-	// /* Serial.println("B+");  */
-	// digitalWrite(v_b_v, HIGH); // Mouvement B : Vitesse (fil blanc)
-	// digitalWrite(v_b_s, LOW); // Mouvement B : Sens trigo (fil jaune)
-	// digitalWrite(led, HIGH);
-  //   }
-
-  //   // B- (rentrée de tige)
-  //   if ((digitalRead(bt_b_d) == LOW || bt_b_d_num) && digitalRead(bt_b_m) == HIGH && !bt_b_m_num) {
-	// /* Serial.println("B-"); */
-	// digitalWrite(v_b_v, HIGH); // Mouvement B : Vitesse (fil blanc)
-	// digitalWrite(v_b_s, HIGH); // Mouvement B : Sens horaire (fil jaune)
-	// digitalWrite(led, HIGH);
-  //   }
-
-  //   // Stop B
-  //   if (digitalRead(bt_b_m) == LOW && (digitalRead(bt_b_d) == LOW || bt_b_d_num)){ // Ordres contradictoires
-	// /* Serial.println("Stop B"); */
-	// digitalWrite(v_b_v, LOW); // Mouvement B : Vitesse nulle (fil blanc)
-	// digitalWrite(led, LOW);
-  //   }
-  //   if (digitalRead(bt_b_d) == LOW && (digitalRead(bt_b_m) == LOW || bt_b_m_num)){ // Ordres contradictoires
-	// /* Serial.println("Stop B"); */
-	// digitalWrite(v_b_v, LOW); // Mouvement B : Vitesse nulle (fil blanc)
-	// digitalWrite(led, LOW);
-  //   }
-  //   if (digitalRead(bt_b_m) == HIGH && digitalRead(bt_b_d) == HIGH && !bt_b_m_num && !bt_b_d_num){ // Aucun ordre
-	// /* Serial.println("Stop B"); */
-	// digitalWrite(v_b_v, LOW); // Mouvement B : Vitesse nulle (fil blanc)
-	// digitalWrite(led, LOW);
-  //   }
-
-  //   /*****
-  //    * Verin C (verin gauche avant)
-  //    *****/
-
-  //   // C+ (sortie de tige)
-  //   if ((digitalRead(bt_c_m) == LOW || bt_c_m_num) && digitalRead(bt_c_d) == HIGH && !bt_c_d_num) {
-	// /* Serial.println("C+");  */
-	// digitalWrite(v_c_v, HIGH); // Mouvement C : Vitesse (fil blanc)
-	// digitalWrite(v_c_s, LOW); // Mouvement C : Sens trigo (fil jaune)
-	// digitalWrite(led, HIGH);
-  //   }
-
-  //   // C- (rentrée de tige)
-  //   if ((digitalRead(bt_c_d) == LOW || bt_c_d_num) && digitalRead(bt_c_m) == HIGH && !bt_c_m_num) {
-	// /* Serial.println("C-"); */
-	// digitalWrite(v_c_v, HIGH); // Mouvement C : Vitesse (fil blanc)
-	// digitalWrite(v_c_s, HIGH); // Mouvement C : Sens horaire (fil jaune)
-	// digitalWrite(led, HIGH);
-  //   }
-
-  //   // Stop C
-  //   if (digitalRead(bt_c_m) == LOW && (digitalRead(bt_c_d) == LOW || bt_c_d_num)){ // Ordres contradictoires
-	// /* Serial.println("Stop C"); */
-	// digitalWrite(v_c_v, LOW); // Mouvement C : Vitesse nulle (fil blanc)
-	// digitalWrite(led, LOW);
-  //   }
-  //   if (digitalRead(bt_c_d) == LOW && (digitalRead(bt_c_m) == LOW || bt_c_m_num)){ // Ordres contradictoires
-	// /* Serial.println("Stop C"); */
-	// digitalWrite(v_c_v, LOW); // Mouvement C : Vitesse nulle (fil blanc)
-	// digitalWrite(led, LOW);
-  //   }
-  //   if (digitalRead(bt_c_m) == HIGH && digitalRead(bt_c_d) == HIGH && !bt_c_m_num && !bt_c_d_num){ // Aucun ordre
-	// /* Serial.println("Stop C"); */
-	// digitalWrite(v_c_v, LOW); // Mouvement C : Vitesse nulle (fil blanc)
-	// digitalWrite(led, LOW);
-  //   }
-
     /*****
      * Lecture des accelerations
      *****/
-
+    
     accelgyro.getMotion9(&ax, &ay, &az, &gx, &gy, &gz, &mx, &my, &mz);
     Axyz[0] = (double) ax / 16384;
     Axyz[1] = (double) ay / 16384;
@@ -280,34 +94,14 @@ void loop() {
     pitch_txt = String(pitch_deg);
     
     /*****
-     * Communication : arduino -> modele 3d
+     * Communication : Arduino -> modèle 3d
      *****/
 
-    /* Serial.println("Roll (Rx): "+String(roll*57.3) + " Pitch (Ry): " + String(pitch*57.3) + */
-    /* 		   " bt_a_m: " + String(digitalRead(bt_a_m)) + " bt_a_d: " + String(digitalRead(bt_a_d)) + */
-    /* 		   " bt_b_m: " + String(digitalRead(bt_b_m)) + " bt_b_d: " + String(digitalRead(bt_b_d)) + */
-    /* 		   " bt_c_m: " + String(digitalRead(bt_c_m)) + " bt_c_d: " + String(digitalRead(bt_c_d))); */
-
-    // Serial.println("Roll (Rx): "+ roll_txt + " Pitch (Ry): " + pitch_txt +
-    // 		   " bt_a_m: " + digitalRead(bt_a_m) + " bt_a_d: " + digitalRead(bt_a_d) +
-    // 		   " bt_b_m: " + digitalRead(bt_b_m) + " bt_b_d: " + digitalRead(bt_b_d) +
-    // 		   " bt_c_m: " + digitalRead(bt_c_m) + " bt_c_d: " + digitalRead(bt_c_d));
-
-    Serial.println("Roll (Rx): "+ roll_txt + " Pitch (Ry): " + pitch_txt);
+    // Serial.println("Roll (Rx): "+ roll_txt + " Pitch (Ry): " + pitch_txt);
+    Serial.print(roll_txt);
+    Serial.print(",");
+    Serial.print(pitch_txt);
+    Serial.println();
 
     /* delay(300); */
 }
-
-/******************************************************************************
- * Evenements provoques par la communication serie
- ******************************************************************************/
-
-// void serialEvent() {
-//   while (Serial.available()) {
-//     char inChar = (char)Serial.read();
-//     serial_msg += inChar;
-//     if (inChar == '\n') {
-// 	serial_msg_complet = true;
-//     }
-//   }
-// }