From 4087922c672b067951cc1d583eaa36279b793acd Mon Sep 17 00:00:00 2001 From: Carmine De Rosa Date: Sat, 28 Sep 2019 10:36:14 +0200 Subject: [PATCH] fix dynamic percentage add arduino pwm --- .gitignore | 2 ++ arduino/arduino.ino | 62 +++++++++++++++++++++++----------------- ephimera/data/shot.gif | Bin 45449 -> 0 bytes ephimera/ephimera.pde | 5 +--- ephimera/percentage.pde | 36 +++++++++++------------ ephimera/serial.pde | 9 +++++- 6 files changed, 64 insertions(+), 50 deletions(-) delete mode 100644 ephimera/data/shot.gif diff --git a/.gitignore b/.gitignore index 85f269a..1ed9360 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,5 @@ application.linux64 application.windows32 application.windows64 application.macosx + +ephimera/data/ diff --git a/arduino/arduino.ino b/arduino/arduino.ino index 889e843..7d4c5e0 100644 --- a/arduino/arduino.ino +++ b/arduino/arduino.ino @@ -1,4 +1,3 @@ - #include #include @@ -7,45 +6,54 @@ Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver(); #define SERVOMIN 150 // this is the 'minimum' pulse length count (out of 4096) #define SERVOMAX 600 // this is the 'maximum' pulse length count (out of 4096) -String inputString = ""; // a String to hold incoming data -boolean stringComplete = false; // whether the string is complete + +int atomPins[] = {2,3,4,5,6,7,8,9}; +int currentValue = 0; +int values[] = {0,0,0,0,0,0,0,0,0}; +int cycle = 0; void setup() { Serial.begin(9600); + for(int i=0; i<8; i++) { + pinMode(atomPins[i], OUTPUT); + } + pwm.begin(); pwm.setPWMFreq(60); // Analog servos run at ~60 Hz updates delay(10); } + +void loop() { + if(Serial.available()){ + int incomingValue = Serial.read(); + + values[currentValue] = incomingValue; -void loop() { - // print the string when a newline arrives: - if (stringComplete) { - Serial.println(inputString); - // clear the string: - inputString = ""; - stringComplete = false; - } -} - -void serialEvent() { - while (Serial.available()) { - // get the new byte: - char inChar = (char)Serial.read(); - // add it to the inputString: - inputString += inChar; - // if the incoming character is a newline, set a flag so the main loop can - // do something about it: - if (inChar == '\n') { - stringComplete = true; + currentValue++; + if(currentValue > 8){ + currentValue = 0; } + cycle = 0; } -} - -void svuota(){ -} + while(cycle != 8) { + for(int i=0; i<8; i++) { + if(values[i]>0) { + values[i]--; + digitalWrite(atomPins[i], HIGH); + pwm.setPWM(i, 0, 400); + if(values[i]==0) { + digitalWrite(atomPins[i], LOW); + pwm.setPWM(i, 0, 100); + cycle++; + } + } + } + delay(100); + } +} diff --git a/ephimera/data/shot.gif b/ephimera/data/shot.gif deleted file mode 100644 index db27fadcb0ae77548f96e1b7b9eae7bad29c3ffe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 45449 zcmV*%KsdigNk%w1VSobQ0rvm^0ssR80SX5Q0|*5J2?Yxa3j_=b3^5eyU&6&4d47Z?>2932}L6&n*89U2@C3p5f6DHahR6c;ZV6(k%PBOe+m z9UU|sASE9sG$IrYBo`Ye93>+hGcq42Bp@9sAsaO%9V8VJBq=*7Br_^1GAk=PFETtgCMGp1GBrFeI58$XGc7wfE<80lEG$4XD^4;r zMm0Q1IW<5%KS(w-Qa?UnJwQJ_Kt?}SRYolzPBRxvF&$4k9Z)k8QZ*f0I~YSJDnKkE zLN7E$G$BGUDMmXgOEM!vGBiaxG(bB$NH;M}Iyg`@BUCseP&q46H9Al`Ib1n0T0J>I zIZ#eRK43>HU`sAaN>ounOH))#Q(Q|?QDIh7dt^sNWI|SAO;U1HS9DukZ(U|~Uu<|= zXKiL!ZgFmEaCLlUWOjUc05< z{{a8X0E2{sgoTTPih_lSi;0Gdij0Gcii?Vfl#P*!j+K>>jf|0ulaY;>nT?i{m4uR# zim9M%EQUY%E!&h$V;N9Zm-RkS%+2i5h=i%(^>Fn|8?D6UF_44)g^Z54o`uz9%`up|% z{{8|00|Ed8EC2ui0DuDE0Y?b`0Q(6XNU)&5ItUXgT)41|!-o(fMl?dPqQ#3BC2G`| zrlZG?AVKaKNwTC#lLk|&T*}nXvu95&K!XY$I+Tjhqezn` zb;7i%)2B}fNS#WxYE=VRvufSCwSd>JV8ez*K(?&evu7EoUCXv@TMBUF%AGqGh26V& z^XA3Dx3Ay7f1?Nvj&)2Vs%9gFPc5SG*aa-NJo2zf%VuJ@qOPsjdG~{dnC=CWb60vQK#Wx*LA3vARvY)NNYrtXyS<|q8P-A zEVk&Pi#Nn5b@mtFGy)t8vEv8tbXR)hXPbxZ;}XfOz!k>#x8DD=Z$#6l-j;pd_p8vdl6Y$+OT# zE3LGQRBP?E*kb$1w%m5>t+&2}EAF`Dk~`12=%%Z#x|g==E>8NyEAPDY(%b31OuD1* zzWnyvFQ@=Zxy8T)7i_S>VEeQ|I=W=H?m9td$1ZQ$_p)vKzHS2?_wEGK?YqK=+pYKT7WZvD$ABj< za^r#!^{rKmf|1kXb@Bjb*D~13ENWcOX@O21m$vzgyzy>XLKc4Eg)oev3}whW-lgD%ILx6Ab*Mb$Y2b%I z45ASKg=jsViQtGxOrjE%D1#-ntj(1F;9#itbKK8MKfCS_Q2RXXKnF@tg0|zJ2u-L$6-thVI`p9sg{UOs)`W^$^r9HWXc9Kc(T;l5qcI4n zNJmOilAf|;(VLkjR|>=jxb&qkjcH6_K+~Gq^rknJsZMpuf}Z;Hr$7a2NryUA3>fvO zNKL9zjXKMw#xj>sh3YS-I@MxY)vC+PYF4AkRjyw1t6%M=Sj9TdvX&K|fMlmy)r!`( zy3?L;g)2YjI@f>xv!Hmz>q7Us*NFPnuM>q^Mh83Cj~dpnL`|$nPfD_sPK>22-Kk_> ziqpzgcCwQVs%AB-Sj8^&v!8XUXroG6TT=D3yu7Mvg{jrnBD1TobtYJ6OU<$W+E$xp z%`G_HI>EL2Hl4f;E(POC+q*c9U9n!5%#(kJ*;*)+S$Z1 zc4Ur~7-Uz9S;<=VyfrQFPB+V5pLUn1pp7q5B|+c%+V{TnJ%N7r%isR?SCjyDqAUhX z-~t=iz_m!Qf)~u-20Qq{3r2;6CrsfASC|eAcc>Mr5b=mtD&zz>z@(T{eqq$Lew+u8WimkzR~ zbL?a0ZhF&44t1!TOlnd;Ik!`sm^#(mca3jd;H@c=cLNei(Xv2#RVw;Pr1rhzH(dZ%>yux zxy)xi^YLm@LK332b0Wa=p8NdgK<9a~hkop38!y^OM|!xgn(d}H{o7E7`qHg>?y6V4 z-B`!^ytlsfe0$yN5&x^f`%Un&mwoJ_X1Lnb{_ux~-LDsqd)zfncPfDV?spe?%1C}* zledNCfCs$G^G5T+7vAQX#Ce2t-khL2-tk0_ywUrX^vXMX>cw=r=B*v|&T|{{#I(BT z$({AmtDEbnhxgZ4Z|}E96z!olyX*rF`y;RY_6cvh!(9(ix%-~tb=NrFhu?9%qm1vC z^*dVv&-|1RK4XTDe#{X+M8z+M@p^f@_I-|q?tB0H;O~C_4#rRZ@|)lMhfe>5J@0wY z50m|!SHJq}NdNwo_Wt;X>NEDw|Ni^m|J4wH0yuyKNPyUIfC!j?3aEhM(0~s3fDj0Q z<1m2~Sb-L3f#8sV8n}TR$br1~P~Q-OA~=F1NP^99f+(1RDyV|nwOvf`f-o3^GB|@Y zSc5UxUhO4oB;^1+*n>X!gFo1O&9`SnxL>|@ge|}-N+>4AcQVT77U36#-*ph*oS@Cg4$(+f;fnRh=c5dt_Y;P;c#HnSM!L8@XV{DU zM-9LjjKVmK#8`~RD2%6OR;;&-%;JHg zj^P+y5z~l)$7^X;iH}Hx*q0a9ryLd#kMcN=^hl5BSW4~K9GMtxpV*K67>inUiUKK+ zsi=9cc#sDPkXc2Gw1|ri8HT&Ki@xZK$5@dTS&_+DR?WDP%{Yx7>5k&TXZd&+??@N*c#}8(>5^A8lXkXXUb%W78J5r(lD0IGC3%)dfRbwY zjVk#tEXi^@X+Xn65<% zj`^678JUr3dZzc3a@1&;`C(*POUBTdp81)e37S@UhS5-(rg@sEiJDqDjB41L0yqt@ z8Jn^>o3nWgwt1VlnVY$(47}N!zWJNKxgi^30>oLI#(A8_2|mi{JyqD8$2Xh54O>d6-K7$(ZC>o{1@$=!u?`S$dWkN12(KoB0c&IiK@6 znr4`q_=%sZDU7b^nzZ?!|EZe-Dxknwpam+N8iJe(s-Vl+pa9^U&Iz3%C7u06oxWzB zj)$GuX))WWa@~1elMtdJI-(>RqUM>H;)#%q8C$W%n7HtwFdCyWDx>YGKd6OTc$A|9 zM4vqBnaJ>?KpLb%Dx~&Vq!X#5NSdT~lzOSRo>@nCH4vpzI;B)fr44YUSem6;s-+9i zrC$1_U<#&}$N;p$6%cTyXqu*Ks-_gmU+Se(N7$AtaD;}4gC%;WBYL7unW71~m@Eog zE;^%vI-@n3KR0?>N_s~<+M`4N+Nh0cq>yTci8`rB%A~00q*w=~Rl2EFx}~1#sbLzb zp*p5zx)p1Bs;Anf`}L+W6{l@Ur*+C+csi?kI+T3+iYxl3TotH;+N-!wsQ7cJR7I%- zw5UAlsK^SWk-Dt>N370TK$gmNnA&cd%Bj{`1D~3$SSqUA>ZPPws#$@m;)k6P7x}rO}qpP*s*0renuz>)LXsQd%f3t zt=hZ2n>vX~D4{X`U<2YizT{iJNKm+Q#zU$tlPT?{JOe3qrv-`xH}9BETajWz`u*E4eXi6o52~Jyxh9H z-P63m0lm;Gy^n*vCTzmoo5I}dy{rPh=KI1gjK1$X!!sQ%MR_( zx%?`-OaQ$crNeyD7oE%+t)e)T4S-sUw+|?BD)nF~wvO?Bo&DOSU+i(5Wb-mlW zz1P0&+kqY2!F|}oP27pC*c!mtDB#%70@;&0+0Z@Hmp$FotqGl7O`C17*G)~I9opXi zy$YiZz@|OkQH|OQtlC)3+86BFu-(P79V@h5(YHO{X`S0{&D;1b*T22rcrD!i?bpQ} z;DmkLimlwDV>LTmui0I&(H-5J@Zb<0;Sw(4o>1Wye&HC7;S0XuoW0#1K25C<;vzoc zBu?Vwec~vd;wtXXv5VdTjmqGf6=WUJu0qx-9Rg2~<2t_MJkH}|JT&JDQ#bwwL|)`Z ze&k0k2TH!=Oy1;84!2OgvU4!yR9@v)ZslT-&^_U9?&cXD=W(v)blwRc{^2E_=XtK;eBS4L&f>7^;s6cfF>U}ePUC9-V&f{^ zTG_~)veQpkm{a5P{ zrT*%r{^qg{;dDOhvo7bjZs8w}&(QSUzW(c=?dQTi)qwuG1bytH{OCbr)@1#~VL{d( z5be@F?bJ@~32^P$p6%MM?Q}ZaAYztsd|QFWI&(>$Se{aGvY9zU#d1Ou%08 zz&`949}C6qy2y^~$__Nl4%W^N7SLYpCSUE_p7JT*?cYxBE>G^}4iW7CKJzm#?>2Aq z_@47Q|L;7{^9VoiIc@Mluj&b3^fT@7Zr<=nAK?%m@g6?$6mRiTAKDo|>>Hm89e?Z} z|1%-q#UuX}C4cf_{{bpr_Snwym-zB(AMP>#5H$bx>3;Ka|L!_p_x0ZMc+c<59SNDx z_kREPfDiaUkJCnP^g}=N&Mmo1FX4l)35y@$bUq4_Klzkj`ISHQn7`CjFYMv{zh*tA zW4iSqaN|%=`lf&SsE_)HzWO^`=mwwzupj%fKl`))p*Lj{*O2?Vzx%w;`(g0=z#sg= zFZ@GL{KkL$$e;YhzxRRP{LSC^gdIS_w7 z!kJU&&Yd=W`WzKh=uo0We;%E=O6gLjO`EEM8dd7lsWz-$#hNv12(Dede*G#z>{zm8 z%T7R>R_)rgAl$x%8#k_2x^xfR#hX{J-YR|l{sjy;%V5HV4IAE@I57vtjU7LJY)$fH z%9Sgt!JJw1=FR6ke+C^oG%V7kO`k?h`lLdLty{02_))h1Mc5Q)%PyHacWs3*egF22 z6e&;Q#DyO%nmqaOpH7`Sry4zaUFuiCUcYWuyLPtSyUPU+zIt`Vi+ZUZbe`@~xc`tM=K!*N9=r-91?8rcnbYn0i1PuZ%LJ2Wp&Zpuo%&9_~ zl;cn+4QqNX#HFMoF{<&X!!E_HwqtQD?_NwRJQ?3Qu`c(@OD{*i*yE9~8x@N$$j0a+ za9mGql=j5tT7oZMOw$+U~f$G~94IC70Y$&pkI) zb=8Hn-F6AoHQrqRptoLo@4dHIeZR!F-+u1^IADPX9(dnDV=& zrMTiwHo-V!jW^yH+wd9yIb@MX9@$!xPexhL3|3~jWtUy9k**qMrnzRDZB997of(K( zt8jh>I%uJXCc5aLzd<@_rI%is6{nwuI%=u^orYIltF81m>v|2=S8J^a1{-Xydqwy^ zhtED6;*=!*&|+ZpIP zca{&oN^sw4zP)hXty;Wz#xT?`_239qkHea2OoUT zJ?Eo*^Up^g{q6Aueay-gT>oA-Pk;UO(n~j!+aD7Pp70C)2VejNC_rv$z<>utU;-03 zKn5}}1`mW_1SKdz6;#lI7sMb2fA_opCv?z*9|R!?hi3yFm9Q__vtIR3xIz{}FMjq4 zUkqb7zRso3hBkcR*4p=__rWiRf0&=z>gT%qkuHDR+TULKr?&<+5r73$U=$VTL?=$r zidM{E7PGiP--XbNUL2tbOV~r%w9t$wykQ#6M?*HY(T#8P+!>>%Mm5UNj^5MN5C5R6 zTgl2yeaun`1UX1T7P64G3qT?jxkyGf(vgo`BmpEjNlI3-l2XLv0a36?PIl6ho-{!y zML9}Rl5zy6L}e;fsY*k(vX!NTB`mo(OIp^_cVzsC9Cax@I;IhhzXWD53AW2Y^zw#x zykj1J$VWg@>5t8vk}IV-NJK*a(wf(Vq$Rbf%}i$Uli&PiEX66xRhF}y)12lw$7xG; zwv&sv^awGDX-pdm)1LQi<2>n!K4jWanK@)8G^6xPfkFwL(yS&n6{^r}HguBR#3VQ+ z%1L#K)0`JYQb1_)UNkbDqeQF*S+?Xk!S^KQH}Z* zq_QZlcL8i-6${j>Hny?K5w5LUF zYEx?j*0$EQuYIj*Wh>h>)Yi7Q#Vu~S_yI=nD*LD;DaDW9o-~mr`qBuZsf)%{r1xLZb4~B4rBRmBPSJ=WA#xR8~ zv0)B(*ux+0Flj|R;@Ot?w6H}nicM_d+_t#Iyyb0lWjtdV*Vx84#xaeryW<^q*T+5{ zZ;*qWULq5Dz1ocbZ<3RIUnVoTzfXShe+fKg0vlMO48}5+CA{S=XV}YL4n&y6oMYb- z!OUkybDGl}1U9$X&2N754dgs$I@h_*MZj~O^}Odjueiiy26UhWJ!nD)mmh~lbfOil zXnQo;(T|2Sq`5F@N>|#_mKJiRHNENY+D^%zcJGlbdDsK^b&&%=b*fdp>Q#dp)J=vp zeHAckTG!gvwifj^3$bfn_uAKmh_0H2Eo?X!yV!O{HnRD=>}C6TwuOdvw52_5<1X6T z){brCmb6b)S_r`a=31Q=5 z_xsGo26&tQlRfY`Guz;KcD8J(y>Ny%oXppTIHI*ZaYuLC;*<_|#xp%`cf+^dl0eQAoRWEfdCX-#bDGaQ88^py&XWNOp7-46KmU0_qr?cJ7v1Pb zKYFv2ekWfv-RVzQ;An*0nBUeRSRHUk5wbDNb>Bl-=xSM?2ate(^1| z-R*COJKV=Gce>Zz?sj)<-l@v14)opce+N9^TQGRS7vAuOe?j6Ezj($oUU$0FyWV*) zdCFJb@|JIW<}*K7xj4e}p9g*DMgMu7m;UBJM?LC=4ke_wzV%CAdemhv`>WT!_FKn& z?voq;cHZ-T>=RFW@Pog0i^tvg#=m>=lOOrK^F8p-5B%Y!FMZ8dU-6I69rGP~dG2%H z`qt-sToN&U@|VB-(m;PU)W3fAx4-?ShriB&F@O5k-~RRwM*j7`fBy5o7yk#q02Dw0 z9EJikzym};1T2OHWWWY=KnK*l2yCu>puh^Wzze*z`%^>z zHSE7OY{LPBLpV&pIh?}>v_m_Tz&uPY4CF&T^uRy-LlP83K~%v)EJPSYL`1Z~MO;K4 zbVNt|!5=KbNt{G3JVGUmA|}*4Dda>>#KKSfL@itkOPoG0Y@jkkMN~w;Rb<6hTt)YT zMOZ{bG+e`4q(3*rMg5DzT?9Zn^hE=_!(e1UJtW5B>ceBKKtNQ+4IIQ~3_(ML#uH4$ zX>378w8j~H#B9vLNc2HU^hO~hMd`yt1=7UK>%?<>LQqu4DilSv2*<-SMFvX6c@#ro zu*ZAE$9%NMU*N}n^v8evM_v%ffh5R+EXY(q$b?kLg?<1j?WkN}+6rqBP2*L`tM2hoxl7rgTcD$OSYs-x@3X7#LK+YOT7e3u*87B z1kAt`%)$IieKbsb1jxipOoL=h#$?FHd`yXyOv$8361m8W?8wZ_%#q|w&U{G^T*=T3 z&CeuFWvt25Jk6a{P1Wp4XdKGde9fekP1$_P+N{l}G`_3UP2KFu-t5i)zWhqDEIhKj zDzikOx z^F+_|OwU?i&-QfB_k_>*lu!3Wh5EG5`@~QDWQP6Z&;ImJ|I~#570>}CPy+Ra14YmT zRZsQhCk>J))g3DJ)GGzm@1#^Lgm;D4c$HUqh0JsbgiY96VAzIr*oS@CWsunaiKWMT6Ic-Po1g*Uf?2wcXprUEFQeR+ZcT-u+j)eN5l=-Q8u?U;IVIMBe08 zUVeOr=5^lZga||$#fI$F-tFaH?iGjc1>f)$U-2D>@-^S{MPKvgV{-~lFJ0FKTB#>;DsAO~RJ26o^F zeqhj*V5JS!Pz6_TB{j`my#ATp4vyX21z`{--Z2&4-UVKUEMd7FVKFscUtHc7hT&g` z-Wi_Z>$PDU?%o{E;qm2R9!}pM{^9o(Vj+&-r<~v9$=@VSV*cgd0(Rmjc47oZU!+A-yt?+_AO$kJYvUD;zqV#Cf;8tmgGrh0x3RVDt@3V z*5n4xVhP^jEA8SY{bDfgAGI}QIzZ)AR^?S*<;isAhisn6dD~ge*HWA3 zBLL@c7UyvuXEHG7b4KTMPG{n@s!j%7OPv5PPP|XHQq|=o)Wup0(C2;T=YH;Ic(!Lx zGG(=8<$^9~UUubJh8$X^WnFe?heqiC$@Jx24CadV#bK_+V!mT%=ID;*XlUllY8L5{ z?uKnPX_M||e*9)~W@&O(=a+tIcCIRS{#Z3;LqJHS5zU7E^>ZgY4sE$Zdpz5l&>Z`tLz18Z5o#;56)mcsHUoeKTChM{`YqQp9 z8jgmwX6v?gYq$33X5QmHo`$-%>$}Elygr7#=Ig%pYrj^8z!vPmCTzmyvcrBbj)En{ zGGjBwRo)XEVxMt@6xz^*n_HEz(>);OV!X|FwMr_1Z>{4Rv#tz}fj%@Ip zY)rN6*2U~?(QKyWY|j1c?GEjwHtp{QZ(dIA@viFC*6P+Cz}HUG*q-h79_!kUUfh;% zw$|-s=ItB)?fkZD;pT6?F7E#p?BhP{H>^9m- zu<#4V@C>)`@P6vimZ}&!q8K?0Yw{aVX z?;OA57w7RFZ@|6<@`*KXy>(WPq8-{(+4p#GMxR zEBy3x@AOhvcXdDYW@+_ze|K1Comr>%fUR}@xb^=-_Fb3lVE1=_M|NX3c4SxfMrQU` zmG*>Bcxt!y#KQLfY-hJ^@Ai88b^dzop^JD_=p#|q0hC7AFz!V zca6vR9$61F0r{z?dUapDNH7yu(E6?C`mXQ#lxKO=FjZ5{g|avMvqyWhzj-&0d9$`? z16=zyPy4x_`#iUM8gKiuCV{=@`@Z*kzgP6YS8~Nlxh5mBTd`zx@DKkVApi0=|MNfp?o)rt>w)%n|M!P~_`ghxRCB6GebvYR z)5v|-Cx-s_|NjRFVgd&e+-2|}!h{KNF>L7YA;gFhCsKT9<|4+78Z|EH=+kOD@M zENRkYfRrj%vSdl%CCr#IW!9)^^CnK5U3T*9>C-2ephAZdCA#J)(xgh2x@qe4DO9M4 zrc$kH)vArGTDNlLI^!$YuwuoAC~NjCTC`o)vdt>uE!?(}p( zz=8+=6DG{#Fyh3D758ZD_%US2q9#+WY}vA^%$hfI=KSh2=+L4?!zyk1H0sou?f`}LG zzv|t4+weBVk|&?`{CV-}=dzER_x=07^5qwwpc6181K6A#=&~*@v$L?+$_l?PkZwJ$=a%{ zG9xX!{4&ffb22l{HQQ`6yE%(FF3(VI@-xsu3oW!KMH_uI(n#yPG}G<6`*gakNIf;x zRadPq)>&)4b=C}e{hGfH3Tgn^Wt)BW*$*cyqKImj`s0sJ$UQgRb=M67-g)c2_udcq z{Wsu&2M)K7Zy0_!;)y3N2jh)9{`ljRNIp5`l~+Co=9z20`Q~DH{yFHOhi(PwrJH^_ z>ZHfK`pY-F?t0Vf_T2N(wb!0B?zqRk`_fSR?xoei2hTO}#T&op*I$Qi+t_G3kG9*S zvK?adoDzp8Vt|&mhWClCqSg^a3hVsmfKd5|v8-d{PjFc*I#A@s+j| z7Zh#h#9ZD^in*iW6|cy}VG?r{UVI=J7bM0Ak+Fnkd=4A|;KpfAGn#h1<~8}KO>GLY zo83etIKk=2agLLc<}{}!)0s|CvXh;reCIn`DNlKJtDc#-CqDD3PkqKROSk+dlxQhX zB7&=+O5)|v`iUik3eAb5cql|8Dp83Rv!Yo%rUUP#Q9C^|C*k}kNJC1xOHu9Sl=^ViDWZ#V&TJj&*EOBOBSLQkJq-z3gSN z%B`((7N2LW(pUc(R)LPSplSWtXEkx!O{}%8t{nwjV{1&g7LTqPwd+mvs@sq9m2ZA6 zOJIYWQo<6KC5C-oVv|c##xhr@k9{ssB`aN{R<^oK#VmHGT3RM`wzJ#))@W(@-6n;1 zmVh`fdef_3^^Vs`p|zzibLYhP;_kJtrEk(=8%!$(sVlz?fdm39-~khuz}`IYAA7sE z{&M924t_9%BOKu>P`JVtzVL;!py3U3xWgTmFo;3_%z+V;xWpzlu{Bbx;uW))#cFsl zjAJZg8K0xZHoh^AahxCowf7R;X*j9>-pjmugIF`6HY;We+>!)|tSn$vvZInTMpcDD13^PJ}# z^O?^(K9FXQbmSrix?6)jv=JAf=tVQS(Tzs5A($-bA_MfwmcBHmi$=vyaJti;{`9Av z_+K#}c(;WlbKd@|>fe&uoBxditYa}4|>*@Z3=q@OKlNF&Yk6YBNZnYpyJyKMI zVAbvhA-Vj1EwMp02U3MFUqwQ{gJKWD=?a_rCu<;}745;S<03#y9@slV5Z`Fu(cE zfBy4>FZ9Sey71+de$X!s(AB1v$^VTrno+OY3y{D3=0E@W|BJHqLks=xcYh4xFaP<| zpZ+SiKmPNtfBl=j1|uBd+Oe4cV%YET-tHA30w$pCVPDT3p94Ce@+lwmP2dDFpwCes zqgh{gS>VoT-#>BRXL;XmfnSJ;pI*Hm3YMSxvETZoU<%eB48q|4&EO37-~WkF01luI zR)GTA-U0R?5b_=e>f8esA@N23VDeF*5;oru<{SoQpazCj6aIk*-Vz9&l?eJ334)jj z=9LSg;0m(f$$a7a#h@9=9}T7<{@LISW={_8pa4c8Ed?PR;@%Q2Arj`H9_}F@DqkHA z!W}B15gH++O<}IuA|yg0*A*8f2Ef5IhZv&F%4{MEn1CmKA}EGp zD2@OrmZB-1;weU=DypI=wqh&xA1ubA9L~}o{$U_eU?1k9F76`I+2Soi-yjxYAvWP5 z8k{07;wmPiBTix^64xa%M<%8WC#sAqR^un4A~s^9GAg4rT4OAJrlUKCq&vdnJeH(M79BxC*gmf0 zO7x(PR^E7_YH^J|<*Fresbg zWmcwTTBbZ?re<#cCTDV{7JMdXhNftWCKZ&XX`Uu(qNWq9CTq5)Yr3Xe!o+bo4>i^1 z8X*8~=B94$=5BIb!Te^VOry%+0C5(laUSP!MuBoJCv!Gub4~$tMyGU6Cv`%nB3vhS zW~X*;CwFEiUJB+p0j7A0CwQI{VxH%DDyCCjCVRH0d%h=p#;1HfR%g~{eU2u6;%92^ z=YGDXfBI)^zQk;zjcwW{ZyxA@`X+Gxrf_Ntaz5yTI;Vt6XmwU-g<1lJW~hd4D2Hn3 zUEXDRn$viWXkUgXC7~yZ7N&ZNf(@~4iP=707mYX&F* z4CvVuXl)|@sFCKTf-We*G-$R!sFN1wghuIdS}2uDXC+)ImS(AzZmE`jXkD7Xo{|ANXn?1t|^#fFXy!I-+(rd8ZE1eE2vl?qvBCE0{E3+Dav$_$r7Hq*<>q`iN!Y-^JXe+lq ztfPLb#8#@fR_vyhE5?TExt0ODcC5#y>$`@mtI8|M(rUe)tghm#%I>GW5-Y#bq`&?v z!vyTWwvoZ!Y_uXQ0Tcqy_N>qTY#~%8#6s-EPOQaRY{q8n#(pf*Hm#b9tjLyZ$)YUE zuB_FXX3OU3%cf+^%5136Y|X9_&f=`j5`x*DE!q--dk*cx7Olh{ZN(-n#xAYX)~(&b zC)9?l)RHXKp6u0LZPp6u))HjbdhN0@YuJkI*cz5Z=9xw7HZ}N@-^ER*ZKJW9IrCI)02UM^1UN81yZwqWM_ja%M zdhZK_ulSBH`I7JGoiEr)Z&~IC`yxj9zVG{bT;5PF{noGJVlL)-uKwyT=#H-al&;0C zt^f;g>=tkV(=GzbsO~QC0`qRX3NHjhF!9o>@>XyKLoWtnu=?sG^=7XJXYcoha0tUM z35zfKqVERhWc#*n374?^;!PgJunf;I4c9OY<1Y^HuMTf+|N8Ih05G`?un?pFt^pUZ z>n1P~yC?%M@$EYBtwt~u|Lz3$ss&f^@n$d9$FUsGF&)P-4&U((?{E+MFw6k)xDD|T8?g~5F(Jn%6Em?B+iDa? z@f7o_6Um+bV2KK$L@ndFEm3pbVKI@L`SqlPxM6J zgGFC7MrU+J#{)-qv`2sRN27yCk2Fb_bV(}#N~g3+uk=cPflI$MOviLg6SD=UfKA^t zPUmz^H?s&woZxCH9(*BSsS!kt2IKit3$u_TT`@L%e6+=bzOrrUgNb%@AY1@ zv|szROb2#g({u&vv|$@|Q-7~dOAAnk?@$kQQb%@VFSQ>fw)Z~&HTp?)R8OQ&h~8Ewr%HjZu2&8|MqVSw{RDCaUXZ`Dz|cH_x3tBv_Q9Xw?}nX z_jLn!3v9Rfb@z^3HH1fagm*TDX9IZOv3Q3zd6TwzpEi1{wtBZVd#9^=%Qk%1wtV9@ zeebq?`!;?Dw|)~heil~Z{tTsf9!xt42rymYymXjyjb6xtgyzo3r_e z&ow^8xtz~AozwZ7-}#%@gP!j>pZ9s6(*vLfx}XpGps#pdvjd_hx}q=oqPK&iKRTpG zdZd#BrB}M8U;3rb`0+LYr+2!ifBL5 zt=Al#by!o6+lN63>95i)3L-56BHbX}jPC9pFhZnTx=Xq{$LNr5Mu&8F$KLaM|2@~P zYrD3cbGFZOf9|KXV(px#htxXo)Nw$QAv`JI z;FN5hhHTGt;A^mXFAnEva)CDbL3JNnnj`pflOZkSy!sritz`&keiH<0!rRsZEhJ|v zhC=`_zI_u~IgnHOk)v#w_pX!I1^MZAy|s({slCUrn(e6@AKF9B*UQmTtJs#n4ec|z zuLFD5yY$zCpaavd8bjLB0{Fzi(7|DzLEzRN$v1r3($e9blgIa?if@#@6}tA6Hvk<2 zJ+wLa!w}v@yU>XkuWq2M3%TgP_g;U)Z^GcSPQgC|_nMrh?g7E7`1ot2yn9vofq_z= zg?F3nlez2DfGYHFg!fSP(_k6@V3YT75C6#UlN2!H1rXxXr?FcA5Pt?HsWanilZwt$ ze6Y1I&&F?G*2H~g5U?jL*rv&IwT(cp%X2RT0qYA8XbXjz|MpqPyI(MYESC8+)d@61 z1%`W`hlgQO(*mPQ&!d~LvBT%pCCD0k5 zb+FcVJaz~@^>lEL2tC7rX`c}PR>#Zf|E@n@q`nBZ;eY>a*!Ao1zfWq-jx>BBcr=oc ze}8}Ib0uaspDCWym5QMj`L*>e&Qv=7Q%SyBOB~%W8=Fyo0t3FZd^)$&Ke?KC3&m_f z6BI(;gwM(ZQn8=ZOF6|=ixhK3&Aucetkugj%uHun6Pe%`23^5~OpOv+brzF$DrP4MJT{%KEhVyLJNUqU zoo@>H`8pw95|FX~6CQm-`(OQQJWhELR4took%jkx|21LIFOPQn2OqLD<4_M(f7lf6 z{oL|az<5kNE=yLKZeKI7q?OpN8=)YX)mWzd`P5OIv5hkG!?;xG4TmC(rptQ#N8P$? zT*ZA##&A3RWyD3*d#uZGnO>9;m0@knql>R7T}QTE>{2chBQqc5F1aul%8$FT1oA`0 za5qgq_x>kMd)|w$u2$1WWEAMsPij}sK0x8Qbv{5{LL2$xLkz!)G+lc6mGonNLhWQ_ zWt;P`BE#hr(08YeAK@5RQyu-bdlm3i$f+5~z{hSM0blb&M!QS$$6%c|3`myN+z28yZ%z-PiPkg@8!Vas7s1{? zudz9_Kff6xg66sTZ-!xED_&WW6u$M1Wsq6MJ)WI7W-TM^wnzijL;H^~KMjvtZywiYQ^zy%0Zp;Pe zVFvi;?NM$6Ql3G&A}!ZRCsqN8Y-Op;y;%@w(G8wTrFgJlQAEaH;WR*bv;yW{0cqfdeoB9Lu6{53hlv>J?iK6g4|KP(~ked@uBKRfpLx&Pv3uU zTxSXLAT&)s-%4uRVvq5hn+9F|0bnf8-+BwfRJYByu+uO_?+crS2iCautFAAUCoa@a z!vDG>XRCbgE{(=+ih!_y?I$utjykrbFp8*|KbC9G>yIQ|7>s?t)O!t=IYaqzSz`i^ zU*)cee}}P_4hPPQZQQ8s2@nMK(7O7Y<^{7vUa z4Z1K?-G8cxwBk|cwG`o$i;GLF-=cN-EiG>!7oS0(p4?5+%wEWp@bl5s zKR8xKy)rJb{Hc%0h*VZaS;ALkBx3^v~%th|0((7Cgh;7&>nv!q_bp6$YuH7DMmx4942!WQ%=66&YC(Y z;~tksAwcIZ6IP}ChbjN|q1aqIbt+*ou7Jgifz1e0)o9GM@Na#Id}iu&hDv-9|Ll&U z-wk~VMo zDzOGmz{nF$w&3s~v36Vczzlw`Hfo=Qp>ka=SfZU!7Ojz^mAI&JzNtR@hpxOLXiqat zW3DtqJ2Su)Etxn2;e?u zbDs1Si0@5ZE*++ow9R61uEv)#t|~FTCGB}!`9`%|J4w6rxwSukn%ZWMy#s7O{}3mj zr2bBAZ_fslpN@U&dZVxnJec;OvVO z(ND^-v$tqw?91V$PP6r&7YS8twj-y`r6T4U3b|5} z#mx0W6h~nvTG!Ce zz3YI@%AsIOF|Ie8vQF)=+D-=?|q~y?m=Qt+4jK;Z=}hKecJfa4mV=JlNC$_X1Q&n z6~=3x2pL;5B-fk&VbDB9Id)Yj^!!gHyLG;F?7Yl^5;qF`v`MpeSDXBBl-TsNZ6=2~ z>X3DrdHO_(pX{!lZY^i~t$$xR+iSM$<+vrX|ImmUvM{WFGK2I*z9<&5a+-D9Ce(lG zPwl;dWkA};{c;`~^YocH`+gMMekuQ-&%R>z!wh=obxpR9$)ep=QubS9ib5uWmKY0B0;VH}R>2H-CV&wEm^!@V;0Bbp* zuHpUNIYl-4(tqTD#*K%-l|;lvA_#gBNY&_3B1qY}NJ0PI;QogkV1*p3bW7og;m`Ie zbK>sv7tGYtS0zdhoM)IdF|YXsUz;GIV9BFMIoipbJt=)b)w4idszME5Mq6-vvHXo@ zH(}`b-=OORr^f_30`EQ*TEOXqLa$MO>-1FbpD2{kR)p*aG2g~w5}sp{I>l3*|Lb*VpjF0Z8bwibTwtAa`(#9#T0@G+bRrdqo&FZP!mLPG zeoj`yPF{C@;h0MfJ0}M~T(>Fi`7wq%}17xnD)E^*{N zHS|4B6cNmnK`Ni0C#g5j5hv^n@n5M?t3PL6Ff6@&Pb~EwJ@`HT1tb0iO@j&(Q!Nwp z;seiDW*!yV!8m5=uXK}N=|FLGh!Hx2sXEiItX3+2ZEFb}Rp=4tQ)He~^!M+Gf7TKQ zfBiE07Kj}_gA^Iw##5!%Ucaehe^h294`y`eVyppzBts_lcp8{92i-g7z6%bV9A=5j zj{r$2e~CO7$MQJBvi7y~pUS6QmHvYZ)=L%o+gdir1skgB7s_}_9M$W09PGrG$6j^c z7v6p)mHf&u{k7^V2S+>y&oqY!2eXt5r|c!?M&e6yRr zaExbjbKwq|`tHYZ{R^Kx1b;Vj`g^R4Q3AeSO5N8?e2!cfjsh26zFOYl3*H)4I*<(? z$fco;qxAiT2o0ww-IWMWt|-fuC_90ekdYWqy_mp^m>7*XLc&#CIzgOoLtL3tLfutD zt6oC2zR3%V$kbKRs$SCOif!dmKyjSZqh8AAO3H8M`}8z@R9)BaaJA0BcL}c2srAz7 zuCX4w2ky$RF>+)ou4HNmWYG;}Tk2(j;_U19a(%9Hg9&m)oUiLR<)^RC`h&HW6TTE4 z%eNSd?sJNATq&GhiCwEH%GN7B&PX70DIpU|x(!PLOrTT!cQ;ol|9WMAwI3mz6cIB& zCNZSn_DZu8s^+?a^RMI@6y-%`Wjb8dq#ESpXVnC*RmBL^7SwFFuGG!mD;TMx9n@=_ zUum$oD!L_#J=cRI)Rg?WH2M6Mwhxq|+$8ZExQS;;5EKns5CR~4A*WAN868x?qgAbO zljbJ0<>gYZa!?mZRO?HWRcz4ho6)Jk)19qXXE4-QQ`0bN&^ROjIk|zrvmhUJ&Ffi- zu-S^}Yt8ss_T*WuOhWCv2J)gr?ZH89k&ilcZaN)>Ixuy;X;V3cisMxG~|TGu`II%6GReX|yi5c~||-rU5|d8ckt0Has-%dfjaY zfsS^P%_NbXo{`-`qut7!oe6wl{;>h2K&2m9RG#S(jNYS`N( z*gu;%=HA*PH<3TPuND#$|Kaw+;%2~0c7i24Q8qErG&v78IkUlE@p1c1gIyPreH3qf zm^j?Jtlf;7e2qZvPTYP@VDLTM1H$crOd=Kr{y8w`H~r1?ZHirTvZuw2=i^66?yXlD zXtk2~7djYnS_A0-2S~s7W^(pM408u!t$UX#`p9d#EO7^k5c_J8&}@VM?7@A_=F!eT zesy2hhqTYR?!9BXEXOa~VU8SNs@+7-?CWBkhz3-F# zc~Szj2tr#@qV7{-7WffvDlsw5sYd?4Pm@UUJ=02B(#kxEt9jBJJky)*yFwjnQiA&8)_0L_fuizq7`LJ{kbb&MF zxw6V!v(E2J&KI%)GYCd&X_7)cEIWkfjq>JCJ|swcRp{L3 zuXrV?^H#dF6d?8=l8qiJBeV(|Vhe4w?HzcDU3sgET8c3E()}N*om`3ubuuEnkbgha z%xaYkCzN1xmgGLvLJdo~AlVhIb+38LL>_Zmyz0r*%JsO*m7#wI76Ia{T!6P?I;~>i zp<+$Da=W$ikgV!lyQ(g>>hZwbRHc z1o-O3(t+!0gBEv#Dx{%h2~8K8XGC6M2C1-Gs<7j$bV{#ud#v;%C--@5isEVx(kTi{ zua1Fqz}Q;|AuXxoC7BSpTxd|iV{M5}T?MqRhP=K3Qs1)#RVHt1Nsk_%i>@KU=k)I3 zY3o7o>Ea9X_eyy8O1JgO>-MgZ7iu-)t2`C3IS?B1_nUe5TTsNra}zo854d>`fHOKC zFWTL_w2~9`82GFrlGNheBWnx?Q`-hJmk05^OBW1>O4^1hmWP(!4>x!Zw`2?-uMc^c`eHr%uAfp2GWwA-`|T(^ zJ=-R*RtE0h{dLj)OPu&Ob@6Y^lWcrjPO^KmOVW4lmsswah@ z6v(0xn1Z@aY0XdNW)8BiWOKt7OO~f=^oGTJmbx-#U@If?nWL(Dvs%xy20n9>&%I8W zDGroyw@f(l3Vh|;e1Ok9q;|gSetwN(A=!N))kijy(l<|Fu?Uu3v9eev0EkSMfK;#N z*<#>%ba-WXpMQnLw->HQun3!5qg=JoU0q08^k1U71XHkx1?u;&e$Z-*osyZ(ZEK`*-yk3NR1F>aduMBn|?tbKuv{ais{?0W$6 z-sET>*P%IV@I7qFI+S=h>=HckTyB@oBB=xk_kFcOf70ceBgtMr-Vi)N07O5XmJc2$ zOVl~emG9~Q=27~%NJ3|*erM<%794K4{|TKF`kfOSU{fH@X@o95u3>)exL`qCuxDR{ z_+AFI?`hra?Y8X$J%FP2E7^_%t(yZl>`*KFy6@%MhMN2*I;2E7mSSL{|ddS1ktn@`%S= zs%wzOwG-@m)ZoxW=y}%f<{WloXYkR;?wc6L3PImx>Jq2i|RnEy}w5mjqdbE zK~>=m{gNvhl{pRhTlrRD&?RrbPy#6Q(K66u)ulavt-y?WZ`NO`N4Jk0|w0hsa ziyuklw3%BDCK`~&V@mAWlx2aB)>Vz!?!@5hI0^7qy2U4a+~0q^gD|N0`y zxqV;p)NT#Ni)gk-0!CBx3_i%q(?X5qq=QVlU=*2K*K9cst2gY+AKL|D8~9BqIrreo z2la;=pR3~0jUG=jZdOjui}jIoXdtEluWQ*%NeC=jfN#ETxuxm(#i!Ea+;cctDl*Gq zBG(zh1|#JV%=~d>DvTG*7i3hk?fVCCQ;v3LrtQ27mM{` z4BXIZwV>G2rm>P_o(6Hrvz?~#3WE3fkUc_SvqTMj&w_+dpH8!6ecyYtSH{uO=BZ{1 zKh4vuD_cIjwr|I<$Z)b3w#al}^|T=MIvKRc_Mv)Znez*mx0pJZD%|o#!Nj8#FB45qO>k$o#eNS0TcRdH(8XX7xoSg(w5#@fAv$ja7Mlk(dB1Ct74RE(|I z)`QagIHi||vZN3rY37>l7gY1w!L&i_Zq!W1u~>;?JrVmR0kH zz6@*2pP^o>R(#(f`{3Pnz;(l)dJxyfUy}BrOdd9L8d3Lxb;j6;OMz9{auR;_8}2%O;$lrJPBKKeWvSrIx)rZQ~ zgT^J+Hr{d5Q-!O>nL33##v(S==NodzDZY2MWnC+D8E4(MJV%aw-tzo4vk;@m^L}#3 zk<(wAc)5!~`m%E8VU`~3%Mp9HEl1J!I_Tw?Nc^1(J$RGT)mehgjk7}r&-deW1Mev1 z%o|xd>RB8c9HhB-Vq@2R`Zn0^1I7VzH-F6$>5=Y3)^#H{!}jA8(g&qgV_pZTZMcx5 z+F>g0BDX{S+oI&7G015a3J$u&5ZozeKEw=!M`zvW$O`BDW~XjJ*RW}y*k}t zT;O%2O+U4_Qlz5q{Z9J0{=-2Pb&BW7Qi0gh#kiu-^Oxlqzn6!@HATb=0#6u8-{dC> za}F{NNiYhdqd&GOppbdf^+v|=7oKeHTSj)N>5ksH`ZpabXbp%LB!I#BFi_c<-gejC-?LHmjQr=00O$mQo@_(bRp^74KqZ}jKn2d<&0=u&-9HRzpHrDlvDM^Q7y*LA> za85~zD2&ZR{+#Dh57PGv7siC1@cp6LF6tHkR}~g{MNL30-N_)M;;&I|ic;gz#bSRR z`R?IgOLsHP*SJZ*SNRb(|5uWm5hr>fb(7-oj+TFD3gT6dO-*?@AcX0h97vPziR<}8 zf)Sur18HgLd8B0-@#BeR@`-p#FciZv6Ug3elSnT}sHR~i+NhaLX@*gPhTbMAq|s5? zSPkoZ{gmvxRlparH{6Ca{kvO^mYvjUMCyZT+)#Z!m(Q*o&Wmc`%*ceWA4mxs**F*5 zu2_uHOKDA-L(K<2{G5@Dz`hdkU!Jg&{<^+d!0&L^d|J8^Ueb^L38k(D%w|?QIYA2l zCAb!H2>g_H01Ev(^_cv}C5nCz)68$&ip7C;zFW9jzO!M8oL#AErgc=Yj9aN%K`B{f z_-r{aR@&Vw1$AI*RCgPfo3fN?jq}ch>VL=~Rbx7RXZ@z>1h*2e!bWe~D=f@BJWr_Q zvw=XaGU3ZCKGkz^q-D5fY?doKi=C~B!9#fpKxax<9Lf8KYmJb()ulI-n`L8aPiVN+ z=dF}l$&=5`6cSaGn^kBp@ba~Ft2bgal-ZGngJ8cbt9`d^3{$!1yUB?oc_p3UGnf;+e5}!`8L6&A84Sy!)GbJ&Prz z#B*tBN27`ApWQ0jF{u@_(N}EhBpIE(pG(3AwOG z5%ySlKn2t!L&gJ2a8nu76Jc~=O#&OSrPNLL7HRHwd#hGin^@(&z3|U%*nVZfumjsX z`bC~0`*U6Dc%(TeIa}wqmwBE^()I7uO{12Wjua=6yZitg3fim7MgT*EL!*g6*7{tW ziYRd=ugOSr#1%6Y&i)Tsuc?^ei-Rm%t2t?&TumS;Z5Y{BLQD@Eu{M-Ee=}Fk_na-$ zzs%TY9!?qZoNLOzL^*2P)jj2zXxq8Y1^7rwES>oT0LkRYuOyq{{9=2yUz|!Es#GB40wGE^mYao%n3dWrs?$7HZZs7iyqHZx4q4e-dR0v*Ep8Kz=#hA8TGrVZ&-%V;(UfKj7PiIr(Z^s zT0)oBaKX*Hn)zF{Q;QDYZ+{1yoO+)^*ATdOowv{AfoyFXczzxlpMB3G9ojYt6ww~H;zH(kSJ2!n;trwQ zkgh}D+g7QzQy;|LI=awBe0JLo6T*{;TIe9tL2x$SV0$9Q>FSITCZVWUH3N^kUgmy0 zZXtd=gZkVwRCV1pB|}!r{GK};{5FE{{Q3b>RnkCkCRfqykz?h4Yyj~gUkD*ObIUr% zO)zi4xL72$0{7W%;`vAKy9I(^fBv@Lc5i~KL8{5}-<$%pt+7rQ>ey@5TIy{sshu_;(cfpL4$v`w=K%87TG! zBvl+J`!`Vj^Dk*Qy7K2B)gM7>KYnEnplcNe=>X02yTBj2ew23%26yNIX55h1@*aeS zBJQd@-&u%}LYzK_xO@*mE<^^0hIkf-c>MqhydmsJq5hvk1HOkc8it01hK8ktZc9-| zk&xEGO|a(zWl{p;EyI$31OjEU^yV75} zGmG!%2q()Bh-C!idqmxjP(Ujhz8BH{H#B-a^fyV^bWoVMX4pV+q)c&G#$KfIUKoft ze7ZO&FVqiU0u4gL&;Eo{^oB=lhod7!ILAfQYDP4LMw2N;`~HnMCJF6$6BF`3KPolg zM@?yn9Bht!{2n-Z7nwm4r6CnHV;MCO5=HJD?&lT^jt_Qj2(J7d?Nl4>;}N}Y8G$by z0uYAhBr%siV&aWrZtqm@QoFXi>DuqVI>V`mPRD1TP1=l;#4rg83)50 zC4%pRZ9Pz(OH^N(StVJ7C0R1ap7zS3tS135nGD7ZNbqmSCRsdL;Rw$ibf1d)=0>?6>4m79ggr@dc zWoQ(o_6(wDY6WHA2j*H?lMm%1lSUIF z6(}b**wQ%j8MOI)nqWVJ@-FqV4Alok$^gMXHmViuQcvsac%RS&7uE|x_A zflFH1PF>l8c1Z_Wau=p(&ti#sOZj9qS{2S%=_p;UR6m_9X?bQeNeUa zx|;m3;PqpYwU;828ahK+Ez@u<^CQoKF$z0V9fxck=VR@B92!qq9Uq__9j^B9suf|X z7n7}*u&I}dsFyCQmuA9~Kde{8YEUXepsLC?sM|DX$f9bMHRu2~ibE6wtVScIMq}Ap zdtew%!_)T*$p%OD#g_`Lax{d9tkqHmyYwt;%Js zrI3b-rB*#GXfx%gtmCawahZrO+)Fk%3!=$tv|wB*8ue*Q~Rb(eVI+W!eQ&aY(vd(yS6O!6sxf@ z0t(KBYED6KhZ{S{+a6^R$USAr{aBrl^tRU&%_BCQp;$1Cqc(t<0yLKMW%Phlas`sV zWz$6**+t6Sx(fl6vVdf={S2$)g0I6(xdZg8z8yK)$TZ9Z9KuXK5@>`2$nVb?xZ_YqU~scbi$ceh4d_bs%W z*}I9=JNXNC=U4ttPVY`W+kOjM41tl(bn@O*zFzUC7RferS-Anga#6I@TlUynN#0k( z*H^F8cM0iJkL!a$`*iu6^q=|+z1xh-+e}B=65kKT%MB*l4kniOGd}j%mACwdJ>X>9 z3uYe5lN%CAM+}rh2S7^$wT}ZPJ@ z!{JOL`?`a@;wZ;QW2e~TXA~%xa^u&w<2T-~@5{#@N5-FYQ4rV@$Sf1Do_oe^C(s32 zpK>O!MkjDqCT@@>-?B{N3ry-7P7+5=l4efMj!Ygg$u8O=HIhf4a3ay!P0<5(ZJenZ zT_nu)DK?yGcFO6-$0UElY3``j^YUq4pK*be>1XU2VSx!?iN?=dLJb94f}e zS>Q-^Gtzc&Fr~0u1sv;n#)ooJ1!taEZ#F<46{Od#H5#n5G8-X)WFYX@7-xY^eh%gR zn?$>XUq9!pGv|QmgCh>yMF8#=1<$hsctg1FG2EXL5Teco3v`51nud?g>mJX8C>CM` z7Lx52QY#ktM;8Q-7aVXFomm$1?UvE)7QLbteJU1zjxMSlFE(Q>@qJpVtC(6GnQFpW zXsK9Av1^6FraN$!yI5v=^k)9^Ufz#d9$c9j#+e-zm>nOTob+j _;Tlu7iSfVdq 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 diff --git a/ephimera/ephimera.pde b/ephimera/ephimera.pde index 36aaded..d974ae4 100644 --- a/ephimera/ephimera.pde +++ b/ephimera/ephimera.pde @@ -14,7 +14,7 @@ void setup() { size(640, 480, P2D); frameRate(10); colorMode(HSB, 100, 100, 100); - + String portName = Serial.list()[0]; port = new Serial(this, portName, 9600); @@ -26,11 +26,8 @@ void setup() { void draw() { ephPercentage(); - ephSerial(); } - - void keyPressed() { if (key == 'S' || key == 's') { video.stop(); diff --git a/ephimera/percentage.pde b/ephimera/percentage.pde index 02257fa..6d4059a 100644 --- a/ephimera/percentage.pde +++ b/ephimera/percentage.pde @@ -2,7 +2,10 @@ int cellSize = 20; int cols = videoWidth / cellSize; int rows = videoHeight / cellSize; int cellN = (cols)*(rows); -byte[] colorValues = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +int[] colorValues = {0, 0, 0, 0, 0, 0, 0, 0}; +byte[] colorByteValues = {0, 0, 0, 0, 0, 0, 0, 0}; +int colorsN = colorValues.length; +float colorsRange = float(100)/float(colorsN-2); void ephPercentage() { @@ -10,7 +13,7 @@ void ephPercentage() { video.read(); video.loadPixels(); - for(int i = 0; i 20 && briVal < 80) { - colorValues[int(hueVal/8.3)]++; + colorValues[constrain(int(hueVal/colorsRange),0,colorsN-3)]++; } else if(briVal <= 20) { - colorValues[12]++; - } else if(briVal >= 20) { - colorValues[13]++; + colorValues[colorsN-2]++; + } else if(briVal >= 80) { + colorValues[colorsN-1]++; } pushMatrix(); @@ -52,17 +55,14 @@ void ephPercentage() { } // Print colors percentage values - for(int i = 0; i