From ca538a8381c09bc6b8c51ab8982fde5100d75fa2 Mon Sep 17 00:00:00 2001 From: Mikey Sklar Date: Sun, 29 Oct 2017 13:28:08 -0600 Subject: [PATCH] Tested and Runs on Gemma M0 - Ported to CircuitPython --- LED_Candles/LED_Candles-fritzing.png | Bin 0 -> 64079 bytes LED_Candles/LED_Candles.fzz | Bin 0 -> 27332 bytes LED_Candles/LED_Candles.ino | 165 +++++++++++++++++++++++++++ LED_Candles/LED_Candles.py | 127 +++++++++++++++++++++ LED_Candles/README.md | 4 + 5 files changed, 296 insertions(+) create mode 100644 LED_Candles/LED_Candles-fritzing.png create mode 100644 LED_Candles/LED_Candles.fzz create mode 100644 LED_Candles/LED_Candles.ino create mode 100644 LED_Candles/LED_Candles.py create mode 100644 LED_Candles/README.md diff --git a/LED_Candles/LED_Candles-fritzing.png b/LED_Candles/LED_Candles-fritzing.png new file mode 100644 index 0000000000000000000000000000000000000000..e48c7f2b875c5c2bddbdcebf39fee705239771e7 GIT binary patch literal 64079 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

6Zzf@-(%>u)M&7&KeTE#8J= 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 literal 0 HcmV?d00001 diff --git a/LED_Candles/LED_Candles.fzz b/LED_Candles/LED_Candles.fzz new file mode 100644 index 0000000000000000000000000000000000000000..fda86bd06c691dad10922fd5bba8e7a96bfc6aab GIT binary patch literal 27332 zcmeIbb!=q8lCNoIhBDjjHnZJkW@ct)W~MeXbDNo&nVFfH?KU&NzH?{yzPVaG?TmK+ z>pD_NStsNCRGCK^q0BEMxu{3<0Zq${Xz zV`ODaYvOUCrJ0c5gyOTU%O7V7D=wxbsfBr^<>RdZ zVr6A$I2~!t1$svhfnB<2;ayq1?)JR@LA=xzVFf50O_D)cVvYkd$0XUO`nWoe0Tuna z`DouIhCi;I5m8U%?W?R_1jTF}xkok$Z3%^p9v4hl12)VOheGv21G71igALh&g6x_u z4WRk>;DnFP&Gt}dqmoI+XvnM9?Wg*9rTy6SL|Vl_KG69QJ(x}4^QpD*A-sG`9y6Gv zvz0NdQ`GBio#TyMe=>V#m}@EjBOo0(w3jB&(p5fnTjvzPAlZ1eS7_Nrn5k>B+9{eE z0#fUT#6x78Pybb1OZhqFbmKre-@FfLha9wTP(<62XK%B8@>IgLAa?O;(r3RIUK`6) z-gWhfyjZ_JK1mx(yYv-LuX0UimAgHYOx65g>+gNTWEmfTy$9s9QduPxJ*>^(zbbCyddLfT1LS39bJx^&NH*hhZ1i~@ zmTfyrXLXg2t9fP>JdBUMBO6s5+gLUA1m$D-SW>!z9*H+gMg59^Bzbnf~{!t(O|-3)uHU5g-0-|3$0s8!aVhhaC8*b`*m z{hV)WBfmu$Cmg6B;Jmr6HzZ3e2Lcf9CrvQabv8|_%ub6*8IYTCnN5oVaEG_l1j}K3 z%dlVYC%@|k*TrE>2Ucc~gK zn_63S2M?|aDPzQJqfxrp@srSt@_{^cqWsYz8@LAx5{*0cJ3fd=0*l)u14KZub#hEE z2-yXT*JI#2y_gittw}i{z$;=Vsb`U|Nd~oZ3N^@ub3AYGl4ex{j&g|aHkxpMaJ>cJ zm&3yFcrQvThMSDlLG!?TqJxL*DO50FJrJ@;T435$aQJwE6%-06GRkTS2QKjR$NuxY z6SgRDU>}qE5mp>)CN=?3r1IlUJ;wV@io9|yMB{=tbss;=Bcv5J2`HVPkIfI?4(`=w z-?&e#%?P#juF1KVXP4`4CV;6pPx1?2s4}gHmIn0u(q8Du^xN<$uwbPAFgmC~5}{`e zetmgtC#h!47HG5@Rt^6Q7_$sY7YzoSJY1$8j`~K~Tw&u0cMcdu?iq;UY^Q9}SVEE4 z1fiRFtoll}z7g<;tzd~-w^`2YqlCaK|%^o`QYit8|CG(zJMGH35 z?KOF^K~Rn1-(eW^yC*LMyQOQWhvm|m`WvjGkQX)7lhxlifXPM*i{_V2U2Nj$h|)Kk zh<;nG?x3%{pp5C=Gq1eBtC}XK5v&Uh=v(jr^|Tsl4p+?Z?XXBUOWnZH*Y&Q(Wbfx< zhT>BQd^a5Yh9kkWATp4+n69dor!EWQ%2~S!2ZgInL?S>Jd+a9tl<0BGxx*JCp zW(aPlp%dHS2bE?H|)^=kYTuK{RR=Pjw$ZhVrb;K7WVAoZR9RW?l zEIiY6L_v>uT4u3}`(bnkgAT0toWL+E{76Y`@X`#A(#-5xF|k5>XZ@=-qNP?U+zE+= zc4W%B#$JPyfW%PI=Jg2(_DM>QAL_du^{jyqC~P(k&12105qf(lI=b)0HwCT8sCB!& zM3zhJMwQl#=-HLx^M-=jM|N{+?ZVm?Xuq)2JQTmu4~KhZD5!*LbAqI<%T9mTF^QI- zgX((nG0KR6mDOjg@T6mpu{BDM9@kFKv9{dtJ9rvhlT&ufn-fygN}w4fPRUfPVe73B z6!l9gdO2$`&!IK(l@qMyn&v_^Yq@m&INERun`y&#SUm0+Ze)iJetb`aj+55k zm-}gUvyQ8%e1nIMtB34R@KOG3UA|9ra{ncOafU;jB!d6~D!~8(V*C@p*y%es(TW;d zTkEU*&}C+%XQcnZz({Xs%%*R`O8>)vh26-AiP?ymp2_%!KD{o(pD4#}QEk*=oein; zn2Lidk`};96KAYWQ5{y^QGhaB%HGO{g2n&=jSW^vu6TDf4@9Aktym_X%jMIufm!b4QCim499Zxgc>{mSG zSM9PrXVsPSMl6EZd+$TQr#_mqr~LGVLUv0`7I^%SQl6^EC>wVZsRu;?b>be{agm+H zaJK`j!RP{AWTlA z$48uDB%8QI5)?a6m>9KWk%)}-%()q|L^9RI5n@&JR`z!0=GV(12+#JmR)5M>@v^F^ zUL)SI=<$U8)YWu(Sk(o`)Ln$L)0%fg}gBeDDk9*PzwfJA;uqxP8asjL}A`mmw**qg-Mmb>kh!l zN`v*{=8{Q-VBY^ULUy1cjo%@h>!rNH$`~mzO5Iv~0oRj8>GI{|{@F^dnIXv6`!lHr zRFn-6EUChnyhn#!_LQVxcTAak&<*;Uo`=;l=84(GGdSZ%W_%XICN+Or zAoM7yhI-2fE4AT;VrLLmT~4M&7WA6DIh!AiAw%iKNt#gHrL8#@skL~vWC5u6rtw8P zTQCSZ8fmpT{n!1bf-dW8U;nt~`BxQE0jgLukjm)!6#4aK z89+GpM$z}6YYosMMMWTL;TS!&5B_!lTTPqnJ?I`kD{W!*RnN&MI_@C!bMavgWK%^Bi_qk{cBULU-dfl;X113yGt) z6%w*+CQL~ny)LSRxilWbVIJl6tibCp6|`eJ$y0FNdvHmH<%uV4_Tv!z~)RReYaw@F3j}LL09o^4g zxPz9OZ5m$T{jPsOXmZ-_?OMCiTmIy96SQ~>nOxx6arFRgUhCj>cnk3)Zg$v`viY); zJusNr9MRUi<{j0>N=rG&p*DNq*OcH{;>EytxEd_@9BUAaJG&Yvfm7af>x%JKGu)2K zID>q;Y4-*GuYTuM0I>Uu3H@5>jh{2EUYB33l80Aj=rq+UxDp!8zIzKCR|I9e2yt>B`7{wRGf(rX9e2-u|9!&#o)h<;~XBGOm{WVx#q8AIIeO!nk|p zsgJz-eM3N2e8u=#t*(L=`+k_R5BD=en`h(A&H3Tw4HEJ5{Z96=*x(pr7?Jq+9e7}6 zJbIdL3jgw^^Y>H#_~?1W9U@tALWrj-nd$ap9UWN$FG03%&@$GvmY&3}vS%xX;wOHU zb?Mi~;2q?5u&0z?4NEAcCz%n%CTgoo~xsO`g$6%TbdSOKWbnb#50?YG$kQ|E}@g)iz2|6wJeGXd6QQWScbsKpM$p&x`x1*V0<;WYIL-#4+b z_3?VDYt|3E(y@AH_>cncSnc{uIyWsi6#|S=Z;vBT3t}i}lU1q@wLb&>8C12O3Bw&; z?6Hp=NjaNpvg1~i>v+N)T(z8>dG~BN|DI(Fy-^KZTXy%2NJp;Xxv8WxYMFH&x0S)2 z=&PHO3wtE@u*{A2*l#8t3-wl{2uQ$^)G;>|F|fxBQ5BwghZ;=1TW7AZq?6`ELms3n z$~Izc-OXFk1T^hvo|@1X2_knA0!fNd0PevGI0z^U$i4zBm%|^CO_fh;mmCL8h_s-% zyr&!`<-VX~i&B0@)89{bSU24#*UT;nyb!CK(g5ZjU1w4L0bn?UTb@d3(xnS}=B(50 z_`pe>kPDLsa%UhH7d_UD>6o@xy0sU^8jOXI_%tDrE<1Z68=$qE<*3?@EcXp3)t*)B zJBIIIEXX2OkqIU#%CJQVVajV}<#t#p8jR>%4Rms)?04jb3gY-ntq&PO&|Ge0R;?~! zOt;m^1_}jesq)R$SM5rfl597Z#C7_Y?->fm&W+>N|6_#lF|-&fmR_muEMPpH$o( z9IbuPFBAw6KPY_M_z*R|H+lc*d5hbJvp2FjM!!TTxSA$AOs^X^ct z{d)p1uqEyk(>a0R#WLT{twa1kGrPdvIFnl44BcL_eO2z@ZLKUn2=$Sk6fDezWPlE!~@)kBhPw+q;tkO#bGT&c)a32`47v z{QP)Ax86Vmp4sJ-53zg*m=r17wT%8>&q5oF&f)}94EtagS1CV#!?9Vunk_dqk;vO>`g*(=4K^(@ z`sE{^+76oug$-8pG`HH*aP6}|Nj6Zfh-ygzbIwa4el=8rg z7ci$eN!?C5F{YH!#;cQ6;&a3kK^EQ>>$iqK3Mr`!^7$;z+cOD0y1zE2v@0v^^dmun&8oDbIJ(ZL2rO+avj8nz>GB+w*c1O;0FFv0q zK<24a9a7VKtPs^e=3%MjZ9RM1)K(FHLo93oiSB3`RDKxyR&FjeE1;WD!DvC67>Pj? zphX8v|MVPD4v?*8tt4e8w@d$(`~x>mm*ZU6r|mm-j?SiKt(|V7bgj(K3gt}AqPw#b7az;mWa9YU-tO1g zbUsOtzgD{?mv|e6p)0mKO3}8F-8C~W9T)RLqrXBn-mk7* zK&;fl7S-*0=wdV3o!e+ml@DGQU9@aXgPMRS`UuW9TlYwu2}??X)idiktGIxin;ya| zB{WwruU^Eprscmc>H2Sfeql>q|4t$6zWBO5dGT|*F}MR)H@y2e8O=BC{(Kx?2OXVY z2{*Wck==m5Hlo5+&-dL-|MIzcUc3u1eS2G{kWllKf6TTiCN_vd_+9-(!0Y*XVtsQy z?+U(*!`l1RB*Of@_rf@ec)$G+fdPq&zS5iDOqXRd_f5BHZR`h5yfJ)Crb8i47{KjF z%c9ZHEq^l%MT(9-NIL?)9p4E=(Tt1ITdy{|URW!vd=_6otqELmtu#G8vu%TT%38YP ztcJ^RQRu8`unWvFQzzfZ0A2~@lSfIE3`4Y-riFF{H)3m_2C5kU1cJLcx+{L$osS?m z-!`^Vf9P2T=Nz61^a`I>W4|q}Qik%&JL<#!WBs!{g$|KewXXX~fS_8NFQ}i0Ge0nS zcg}SyO<~%M3)!Kbxfm65GCwH^5`rP!MQL8@*TN<2ksCX=gd@P_45pN&VJRn1bzlw> zmgXD3HN47qt=2K1T)3ai6|Yk~ViNT(OY~WiTIe)fFnyQ9`ynw?(>e62#~AO7S<_yA zRBqf;f==bia%;5a%KGYj?I;$?97}eORxJQ(3w%H=9ALOYO73K1nqTgoi`;>NeB>pl zHq~8ip^Q2&pLsp{DqY)U>aGH*ffXazPCHUHt4Rw(qQMqqaWn9~2^thoKHb;P7?X&s zBLiatY|e#N`bjPz^E1SnuWKY(um8Kk0j!=*z-;o(>-Igaa}b%Vj$s>VQL*uJp&Btu z@v~cG8uVjb?fp9CBu^?`4TyIn*oIku;N8VKSG1%akx?2F;<~PlBFZ@+ zPK{B{0NrtI+c1o#3=c`%uC=c|dly55EInx%%jHd7q!>XeV74h`mSxIk_CBgV=*M=6 zsEM<$smEO+Vm!tEF#ijEe->0FXcQz@19pn=7c8U6w<-)KFxTA{sB$|rckI8~=fj4ikGKAHA(gWuOtX0bk@PUk@P7vJQ~u6MuXj5VYh67XhDd^Ny)NYclq zf!@#c5mbbwNG-0%%#p?O!fY>!c59Sz6J4sG(JtelFMoH2j_+(+Q+mJ%PQ(=H&jn4| zw)|xc)Iqe?Mp2`+_nOExk3!>mVf~N_mVEshdyTM;=3@wA2|!U}meMOUoZ3Ql&m<|e zPW76ALw>7BY=M<2Ahd~+E~hi=M&xO4DjP~vAyr*t`>tGnLWyaYyiYeG{OIAr1hgf9$F8fz z4LbzOF&|9D>SHh5VMhDyPfG_#w1#$!buk!)bXXh-RWk~M?r0~f(xozUX&7ei<+Iuf zcaZktximZu9VpWfS9|AQBDg!#16^r1Z2`HF9WwKw_H&bK6j3*)GuKiRRR=DMwCvXn zjZG2yl(#&>-<|%6w{ii<4P$VTZ+RR_kfkzbeRzW?ehErd zw86xPbfqS?K0gY=T{wl>_7e#mb-E$ zLU85n+OfV`ifaFWOe^W(SQ_#H<3Z}9!TlWe4QazZwoU2OOQnkbMf$b{>e5@OM)eDZ zM^R<7dl7p5cPkYQQ>?8$-Bh+^ErDfTW@4dJx}V3XLoP}JXZmjlHp?5Z+-Ncn+;5L#_$n~j0%91jnCXHV-F#S0SYh?=9zZwA~8 zqEGf3>#Q(m>3$1W&4Q{6DGj>UO(ndVT%5&fA4OxO0*%T^HgqbIOExk~AAn*?OCn0` zt+Y~jFBP%00KrwAiD?0WCJSMa{^smpaONvUOM_*CgecH??TscqsTBR-BiO8 zs3QUdR-5>g_=1fj^%8S1QsU23Gl3%F!mNr_9m+=@t2u1uYdPZv3whSg`Q~*wt~GNE zp=-n3L|H_uIJM(7!JDS1wsQ^H89$Dpng6tdpE4V7AZifsXx;AQVKR!E04~Z_9JEz2 zuS0py<0OK!*-B=Q096smqk(-0VxzhsaOT{ao|`qn7^$shap1L#$fE~N2=qOszIfl=GW4PkNpLr2Xf*1KXl&~1Xfjqzs?6zwQiA0Z-HBze} zRk8%qEksVY&28fHDrEgZXP1&h^OW{Cb!EM!UmMV*6>eKC>uBmprV5@D3*ZS_VeO4|muE7k!uA|=Njrdpvv;2yOWAvkoq8gB{fjD6+xM9_i zQ}((UazVSlFhT9Z*V^*{`-aG8^2LFJiWKtv6WYxB9W!nP3Age{N`Aut2-5WIN^L6zqXUcM5Cu(|Eh9eE>5Z)`_ zkQc6d#5TXD&6d^bF3Y(4!oat@HfqJzUU)xw)%KgCYVCGUOzDd5Fe}Gn|Hy{GaUcTZ z5B>EGSM3ekMlIwgW}C4(<4enu%iOOEVfH)pT>eV)ilCYw+lHM7pZZI|Zi@fKr_ zC{6n4_!&3rl#iD4;)<1+^z`uX4`(k!!|vXsS+-5}o#5Xd{Y}s6k0G>=t~k3h_vlR% zJ{+};2HkpqH;=GCRo7W;*09=K)}{(fd(SQ&OMnB=jYF_w?izD{%dze>VzQb>_;`Dl zpEBVWHkcQXHf!9oMN5&yxZOgu@snh;=a$X8DHL_m?2A)6H)JLbMmHruH1H3qEJtjb zvy;znB{$Neb7I4e8;Ba}gRbQmoSzR~;xeU}=RuZzx;VuZvFBby;#*wh!0Wj<;|x4PRP~zOH1_sOt{1a4bodob%7~3udKTtG-s% zR%Eg!Z{i>Cvo#%f;SMKfR2$;p9p{F!*m%KN2PbN>=&x7VS6tu^ixAB|s>MK1Yu55$ z*GMca*G5G@xM3%_v>2tO1V~`--!9pLd9hOLmkQVAx-FypzMu zL2ZwK&;|*;5m@^ZKinSAb2P^6#T=~S^@cXmXg3tiT_u(?<&K|9zq);-HFsFizl#D< z*FWpU+lew0rh=t~0}dQO*^Gi0u`fbggIq&<6Mb%lyxf{vt*jT4bz+`Ij%eN;1L9d( z3Eq{DAy{M=LD9IH)~6obY;_Hu&*R=%>+F5L1BNQ0DvEcFq^X%(>qWG_Gae8K%ZPpU zr_Q3pM;D1U^O@j0(p=F;enA&1oT>OQzb9wxqj!12Sv)Uyvs*?3Bzo0@S;-ZILbq+H zbmlAl8s*c^b*_hXj~5>uy6x4v6goX1iZ_p!m88f_FZfsV>Fa`iTAGXGd7kvyqpjl{ zWLNeq{qufNx%VNTIQlhz2HMSz2-`Z!?}Y>@YGxWfz4l??Sxidp|D49%yL&Dv;SOJB zRm5dE>4;MwCl-da{@6$m%GC64YT=O%Jv57uba+Nuli+Bx|7IOCx84yjBx)A@6H~ij zYdB529JQijf)l07&*kfOvJvYpNluSqT)dhm2E|p{t_J|#JT|REa?vjV zy)8|>5jSS5!8B6_w)yl~XB^E{FuLx+gBGt(!3oI6yd96@Cz#~AXb5m76)ej1q1Z1> z-WtCr@BK@UV~IV1IvOU1$#fPLB`rSEns0VC6pRSg?)9J(DhiMG#u7^M%_BN8pIq#m zT^#RT-)`jTt~7`tFT4;k+v_!I9&!V63;L3#K(s43U4COJr3Mkvpv8T6Wk#CWzM0_x zDwSeW=pll)$ixT01W^Q?z9M+H{O&^f*3U9blq8H0o)K}Ika1sfqf0 zop>y_p1FR^PHWuYKJo1+bJ_1biA1YKxF~3e6im7@YPvS55zYUrmPWQ&_yNlH#6AxH z3Wt=CCgPZ(F9{NTe$vwYKD`Sku|qrmYmkxx1p(Uxz6`}%;klwrD>r#;O2gwD0-&m7 zQu~KlsXeLP;f>e)B6oF&u1lkxSm4E?fDrV~ojpF3Y9G zZWRC_f@w}e%~=f`ziVc$Q!^KEcBxU4ToUx5y|iX|Lg|SiH@IU^L+`7(p-r->Jokd! zq$(a{yfmYqm;5p_cUB=MF5MZA@1^|Sc!GwM`2E8A5K-n#9}k6^D>91xJULDV<{=Egg#MP zP0Hflzpi!(hU*k+M~NXNp+1~RyAdf8T$q|8pa!s~Nzm2k;ApCIf4v~b1c{;+{{+a3 zppv~pm1Oz|YX@R*QyYW3a9kh0)McGS*w+envGds zK%mSpn>=z|AT+JTCeNKWXLCUZOR(u=o^f96A%S;b{$f3=9ujd-g>F`dPPqXWI)Xpk zlvvO`C3>|}3NsXgfzpcu7^wPfgm_A%Qj&T^I4H>9+#CsRW zM888EUMuR-Y$*D;etExNzj;xAe0e|keHM?9cwYj{=ulYcLxRxvL+1m=Osj>CV!k87 zUP0i-M8ooQTYw{4j|Gk2LBY&kA*TJCFBNx)Ehz@D0n$KQoj5evEBWiPZqtho(D`_y z%968DI?QZRWkVMO2TARkR5S|WFIda*WGi>iWl#JhPtohq&i-7HRktd(l>Nc@)k}>U zCZ|VSYp-yvxFnVx=~?LMn&@|#Li6wrUGyKA@CP8%0FYD#WZI5AASU6#GBRuNZf zjp6zAxlcH57L{=$ResxTF3$K1>pnw>XtFIN)W11=tpj+EIX#Aa^#d7Ht|l!%dBj3 zVsGDD#v{U6gkT-ImMqqs&N;i|%jiF}<6c4x>vM2d5zRU10`1@KX}Ah>O!(Q)zPmA9 zlkX=nRJ{{=Z(w>7XFoiWb}jV))W+O6WR@yF- zMa{u)N@I9WI2$Qirc7+z=^L`eS)!LXir7<;zkjbxO}<~&5UdMW8c3D^o|wc}ZM1>7 z66!4N3TrzKcgD`y7zM#E@%A1}czA$U)Cc4Hv)~rc2SIn2&TGh&&b?SXe&gv%k(zR5 zcV}+VV)%4(a6S(g!@2{Z zpHb244IT=zjfGjF6m1REzn`#laH!B5YL z=c~I1lXo2~+DZg(E%vuaH;uSGoadk(&9{4`lGcq+V6#%FfUUHInHQNwrHASj)pwtC z94Z0-@gW(28euucZ( z%>f50bWXu!^G1`>>r92(i7G_r{V)*P+0SROe&Bf_&cY6t!j1tklvYxrX+ZYcW)b%* z#CnEEQTy!nBo)^v$OAvTI_h%ywLo#7=1_oR@wE$#Z5(3qXDH7GMF%=jl+vzw6s&~# zwY8Vp`F*Mtb#f{$EIMG@?{RG?8Jjk1vYMvZg2SqG)f2aR7G{0j(jle7Q(2h<15Q#L zW}uhv0AY3QG@$Sq!MR5cuVvnASmE+{%grb?N^!^a*NxHy-f{Y`t@yldRI6^5+VI;9 z3ofOX_$$t)ggn;%R}MV&Erce^A{VXhq9gI~ZR;kCgKy3IZ&J;dfac4V0O`TAp0NZ^ zwa^Q9e(yHUp>r%*5zO4Yb5eNaAPLG2{Ja$4lp7VoaVIZzaPl@22kaiz;MTJgokWKD zVlHip!z6Bm6coeZz+Pqe-N*3Ss?+M#C?5sWpp;G}r>_o60qzIpLY`G-Z66^SyDp9| z3v}J3s{0@<+Luh}7*YnanD3GauUb{hMawI}d)FVkArZVXRS0~LUat+mtPww9C)imX zbf2nLBlt{#D2F<^`U<&Gmf@kJhJj(;c`J$fjCmExy}4Adz5BIi*qL5sj@$qp6(Of) zLzuifxPHB9a8=~aYpMR08z2JY(scA>qvjl7Pw_iLibB7>kiZ0Ibuvf?LXpU_R7xmd zFy^@ouA_u?P2F;${DMjJ<|InI$Guuh$-r(XhM$tN{9E|J@)-zarkx`}LTMDiL?r}+ z#75;97%&T}L$)zVD@VYyrc-f>_B$eB-;hLxeS~eEp5>@w2)}`iNCGfoDWc>qdSxQl29)H7q>WOu@aS*4@|b@WiQ=GC*p&C0^M8h1!8 z%l#u627Z1cN|@*hAZuxs_zALy{Smw0hkVSfjOaxW`t2vnaL^d$vb(T8lz;=KFhm7< z!!P0yg*wY!RwR}YhHtfk@{nowFkJ)c5>Ql;m3$t|*3SZ>XLB7SqY%nXB`DO&0ulP9 zwQ%1YMMpf#4)KLGkr+s3yI{JZfe>3^!39lEGE7qVjoG8qZ~RdLhND@Il7QNZUOvZk zfa=B1(53qvWETS{gOk7tP&|p?N?_1Xa>eK~rqR(6g<%v`L6V@G$p^yct5`A|1SUZ{ zhQ|iw32%NXPs|j@lSZMFs0#pV(Zk8Bk#7J&F$2cruH8!$TJzgT^OdkFyn*|}!3b5X z(dC}l0+6Uhb3u#)@~#-DkvmzklqA(rq|xPPb%vS2enMizpl}9!4=N(G;tJ<8BBKO} zRSi*`3;qGo8L1zZ7WQ)y2eD*WxcHgo#4R+SBS<2;Yzlm0VxB{}WVQejZV4f(03M(B z0ZdXsosw-p2(l9O=W;CrkpS{!LB9tnIc`!G_-h0oikThecif`>d=9%%LNx_9zXkNM ztb#Er@`}43$f9AGg3Mxa;NODe`3d#>;+;^8A(LPOX`;eQ4rFG;$ZMe#7Ym9(L~4l_ z$K)+VeiX`OOGvgQsBE37DG=s)DXe4FoXr;7&tj08aeptb`TeL&iPsVU@ka{$skL-U8k%%bwKN_q6C-P(y$V zbuO)q?w;|jeZGJ@J)_nT0z;KZkxb4rCMz{p-lgFNY1FG*3EddIR(Im80dIYYFuBF7 z&ro1Yc%qtoS4fL64Xw?d$wybuqyahA?~YuZ(DKXT9l+f!;p+r0^QHhHGDToPBykv3 z^WuVK(Z*^TLL$UNl1K*#PUU8*>ygRzRs^eEPTg;I(mCo{52LB0h{l{AAEsf2-6Ev- z$KQ3eoVhm54+dBK5Fn6GG(6PhO7lZ5aFDu5JkOxhF}%+fS$JZYS0T)qmVCp%HyH>T zEO9EpaN0<3zN4RUR^-h3?oN(Y9hbEJzJ(W;tWQYcYh1nxb_nD*xyG494*5)7Yp_>b53+oZv)2WOp1$S z>I3SRJ?SOG6V)B{932(gR zI&jXLxujf)?w{d`07N?ls34g+b~@W@#-r(QO9F2~D;|BPevlsHl=I;z$oPgIZ=}5{ zAp>|`*)TGL!nlEOlX3Zq-|%NakaV5zr)K}GL?F6hH<>8s%Y1`pV?=i_<|t5f{EioI zSC}p`izCni6UoV2l-GlZNZZ{r{q=v~|G55>|1&qVwfXOmfB#YcFZ1`8`TNWK{bm0C zGJk)WzrW1iU*_*G^Y@qe`^)_OW&Zv$e}9?3zs%oX=I<}__m}zm%l!Ri{{Aw5f0@6( z%->(;?=SQBm-+k4{QYJA{xW}mnZLix-(TkMFZ1`8`TNWK{bm0CGJk)WzrW1i|F6v7 zJK7nwFBlLI_Mcp{9RJDu*%=!AcaXn-RR2T#O{Q8q=CdIE>^@d4X<)P|ZmLj4VkKp@ zzl?91FGv%oUAD#YN1qsgKrFJ4*WCsO>#Z_89&|DE<)czr3t7DUKKtgyi=WGxDU(n9 zsDYLMn6r%?NLtoenA!{ zb3))n%l%2veREsz`W*hAiO;w_R?$0O(Jq_^1hawQ>}ExDpIj_~N8$nROjp|95^kaM zGNUZ5Dt(%j)%l`4op_Yg9Luqu#!D^IJejn4r+JlrtRbi;jA%Ms|AX4G+)zuf#>on{*NIF@U)655XvJ7zmY1Yg zYt@B>z|O8^zhN?{f#MxwC_^kdjf!7fZxHV=;5cnuy}j)yUo2f;uF05|rgOU#9se8) zd{}EndV(AbEE2>dI>`YqTQ3A^?DwN$KBi#px3bu*`I8087_tn*UiR(Z6@W7q6&5RM z$Jsbxb^I8Qf?#pcK<;$~MeFRwX_b}uyNJu5kbn)T?Bp6B6noYZjVNqibGF+-Xr)a@Gmk2vg zQF{#%`(F7poxz*vJ`bfqQK3?+yCt4w30M$NGk=3rNThURZn^jYe0u7PL9UpspNCbQdD zE3;v?A-@u7l_9~CNgx)c-_gia{Jt_4KsA{7EF)dc(S&jHi{W zV^ut2C(%V5)d3m>e0$L(EQLol{FVz)d=wDt!oU4pEUdbAsmZWQ+#l2%*d#|cfOgKH zZ`p;JVu6}keN&_r^Fq~q0GnZi8qqb8E}KMTdw+{K^XB;l@?TS#;#oFbUV;Jvp`ic) ziTvlV=4fbUY_0EPZus9B-2P?sXNX%=S-1Iop#(}_a;oR}b4|!J*@5wrMc@@P_MUZK%S9`}Oo@x_`loL-D z*$`bvp|a6*jv@A2sKOHq+Ip~A#lT=eJ6-Cz3t~1AS9`)POXj$=P&?1(_JgU3BBCt;RGdl64JXbESh6g@9+vKbzctqQ56=Rg!)Lp1p zBHwB|Qpvfa=#8om&p-ts+=JQ3axvOQTtZ!8+{-&~W%f!ZcF3=I%}EjnY974rqzQd{ z`K|UqLNHRqxn>>Jqp49Z?N>Bi+8OJl%})3ae%5dk>H2;?Uev)_n$bgX!?zKn9y6SL zZsk;`u9^br*28#Sx9#CQbfnc=ltx<;4^cv1$!%MaI%=Vdlc1`dwRmSTl`dXt$Vlf+ zyHf{cjd4xs947PZ)=y)s4+0#;f4Yfn%rCvQ@5tW$9^OFrHe9p1A~dJJgX`&#O}jw3 z;v0KLP2|3MG#-17NLPX>&;gPkm=n_v7EFCE4LXSN=o0{pSrIIpqkne z&W1tPp}y(p`T>da@m_?ZywMQsO!D#_z3RYf*EJ(eqKy zkUJ4&lcbPP3j}yS6nUsr)|#OJQeuqsQJSobg~;+849C;ZMa7cIkbB{3n?i0L_Vu>H zLqJ-tj6|hHisqni6IN*~Y=s)2oupd+(jr{ZB5ETtNcLh`uC|mVVqbysCcD z?_TVXDR$GQq7(cV*`N(1$0h6&Pt(A(0X>`sFo$2CJS$8UZS7Au$kbsUN_m_@SjrAd&k8$t)&q04}_(=R(XYH?#({4G7J4yikJFJ`}Fvy<~ck&wn{(=-*BMJ){3WEdFWQ`{$sd|3QBLe;4@o)Xo1AU`PD_E|K&9 zN%bEaM*cTd)_ + +// The onboard red LED's pin +#define REDLED_PIN 1 +// The data-in pin of the NeoPixel +#define WICK_PIN 0 +// Any unconnected pin, to try to generate a random seed +#define UNCONNECTED_PIN 2 + +// The LED can be in only one of these states at any given time +#define BRIGHT 0 +#define UP 1 +#define DOWN 2 +#define DIM 3 + +#define BRIGHT_HOLD 4 +#define DIM_HOLD 5 + +// Percent chance the LED will suddenly fall to minimum brightness +#define INDEX_BOTTOM_PERCENT 10 +// Absolute minimum red value (green value is a function of red's value) +#define INDEX_BOTTOM 128 +// Minimum red value during "normal" flickering (not a dramatic change) +#define INDEX_MIN 192 +// Maximum red value +#define INDEX_MAX 255 + +// Decreasing brightness will take place over a number of milliseconds in this range +#define DOWN_MIN_MSECS 20 +#define DOWN_MAX_MSECS 250 +// Increasing brightness will take place over a number of milliseconds in this range +#define UP_MIN_MSECS 20 +#define UP_MAX_MSECS 250 +// Percent chance the color will hold unchanged after brightening +#define BRIGHT_HOLD_PERCENT 20 +// When holding after brightening, hold for a number of milliseconds in this range +#define BRIGHT_HOLD_MIN_MSECS 0 +#define BRIGHT_HOLD_MAX_MSECS 100 +// Percent chance the color will hold unchanged after dimming +#define DIM_HOLD_PERCENT 5 +// When holding after dimming, hold for a number of milliseconds in this range +#define DIM_HOLD_MIN_MSECS 0 +#define DIM_HOLD_MAX_MSECS 50 + +#define MINVAL(A,B) (((A) < (B)) ? (A) : (B)) +#define MAXVAL(A,B) (((A) > (B)) ? (A) : (B)) + +Adafruit_NeoPixel *wick; +byte state; +unsigned long flicker_msecs; +unsigned long flicker_start; +byte index_start; +byte index_end; + +void set_color(byte index) + { + index = MAXVAL(MINVAL(index, INDEX_MAX), INDEX_BOTTOM); + if (index >= INDEX_MIN) + wick->setPixelColor(0, index, (index * 3) / 8, 0); + else if (index < INDEX_MIN) + wick->setPixelColor(0, index, (index * 3.25) / 8, 0); + + wick->show(); + return; + } + +void setup() + { + // There is no good source of entropy to seed the random number generator, + // so we'll just read the analog value of an unconnected pin. This won't be + // very random either, but there's really nothing else we can do. + // + // True randomness isn't strictly necessary, we just don't want a whole + // string of these things to do exactly the same thing at the same time if + // they're all powered on simultaneously. + randomSeed(analogRead(UNCONNECTED_PIN)); + + // Turn off the onboard red LED + pinMode(REDLED_PIN, OUTPUT); + digitalWrite(REDLED_PIN, LOW); + + wick = new Adafruit_NeoPixel(1, WICK_PIN, NEO_RGB + NEO_KHZ800); + // wick = new Adafruit_NeoPixel(1, WICK_PIN); // for RGBW, if you see green uncomment this line + + wick->begin(); + wick->show(); + + set_color(255); + index_start = 255; + index_end = 255; + state = BRIGHT; + + return; + } + +void loop() + { + unsigned long current_time; + + current_time = millis(); + + switch (state) + { + case BRIGHT: + flicker_msecs = random(DOWN_MAX_MSECS - DOWN_MIN_MSECS) + DOWN_MIN_MSECS; + flicker_start = current_time; + index_start = index_end; + if ((index_start > INDEX_BOTTOM) && + (random(100) < INDEX_BOTTOM_PERCENT)) + index_end = random(index_start - INDEX_BOTTOM) + INDEX_BOTTOM; + else + index_end = random(index_start - INDEX_MIN) + INDEX_MIN; + + state = DOWN; + break; + case DIM: + flicker_msecs = random(UP_MAX_MSECS - UP_MIN_MSECS) + UP_MIN_MSECS; + flicker_start = current_time; + index_start = index_end; + index_end = random(INDEX_MAX - index_start) + INDEX_MIN; + state = UP; + break; + case BRIGHT_HOLD: + case DIM_HOLD: + if (current_time >= (flicker_start + flicker_msecs)) + state = (state == BRIGHT_HOLD) ? BRIGHT : DIM; + + break; + case UP: + case DOWN: + if (current_time < (flicker_start + flicker_msecs)) + set_color(index_start + ((index_end - index_start) * (((current_time - flicker_start) * 1.0) / flicker_msecs))); + else + { + set_color(index_end); + + if (state == DOWN) + { + if (random(100) < DIM_HOLD_PERCENT) + { + flicker_start = current_time; + flicker_msecs = random(DIM_HOLD_MAX_MSECS - DIM_HOLD_MIN_MSECS) + DIM_HOLD_MIN_MSECS; + state = DIM_HOLD; + } + else + state = DIM; + } + else + { + if (random(100) < BRIGHT_HOLD_PERCENT) + { + flicker_start = current_time; + flicker_msecs = random(BRIGHT_HOLD_MAX_MSECS - BRIGHT_HOLD_MIN_MSECS) + BRIGHT_HOLD_MIN_MSECS; + state = BRIGHT_HOLD; + } + else + state = BRIGHT; + } + } + + break; + } + + return; + } diff --git a/LED_Candles/LED_Candles.py b/LED_Candles/LED_Candles.py new file mode 100644 index 000000000..f48b99f90 --- /dev/null +++ b/LED_Candles/LED_Candles.py @@ -0,0 +1,127 @@ +import board +import neopixel +import time +from analogio import AnalogIn + +try: + import urandom as random +except ImportError: + import random + +wick_pin = board.D0 # The data-in pin of the NeoPixel +unconnected_pin = board.A0 # Any unconnected pin, to try to generate a random seed + +# The LED can be in only one of these states at any given time +bright = 0 +up = 1 +down = 2 +dim = 3 +bright_hold = 4 +dim_hold = 5 + +index_bottom_percent = 10 # Percent chance the LED will suddenly fall to minimum brightness +index_bottom = 128 # Absolute minimum red value (green value is a function of red's value) +index_min = 192 # Minimum red value during "normal" flickering (not a dramatic change) +index_max = 255 # Maximum red value + +# Decreasing brightness will take place over a number of milliseconds in this range +down_min_msecs = 20 +down_max_msecs = 250 + +# Increasing brightness will take place over a number of milliseconds in this range +up_min_msecs = 20 +up_max_msecs = 250 + +# Percent chance the color will hold unchanged after brightening +bright_hold_percent = 20 + +# When holding after brightening, hold for a number of milliseconds in this range +bright_hold_min_msecs = 0 +bright_hold_max_msecs = 100 + +# Percent chance the color will hold unchanged after dimming +dim_hold_percent = 5 + +# When holding after dimming, hold for a number of milliseconds in this range +dim_hold_min_msecs = 0 +dim_hold_max_msecs = 50 + +numpix = 1 # Number of NeoPixels +pixpin = board.D0 # Pin where NeoPixels are connected +strip = neopixel.NeoPixel(pixpin, numpix, brightness=1, auto_write=True) # initialize strip + +# Random number generator is seeded from an unused 'floating' +# analog input - this helps ensure the random color choices +# aren't always the same order. +pin = AnalogIn(unconnected_pin) +random.seed(pin.value) +pin.deinit() + +index_start = 255 +index_start = 255 +index_end = 255 +state = bright + +def set_color(index): + index = max(min(index,index_max), index_bottom) + if ( index >= index_min ): + strip[0] = [index, int ( (index * 3) / 8 ), 0] + elif ( index < index_min ): + strip[0] = [index, int ( (index * 3.25) / 8 ) , 0] + +set_color(255) + +while True: + + current_time = time.monotonic() + + # BRIGHT + if ( state == bright ): + flicker_msecs = random.randint(0, down_max_msecs - down_min_msecs) + down_min_msecs + flicker_start = current_time + index_start = index_end + + if (( index_start > index_bottom ) and ( random.randint(0, 100) < index_bottom_percent)): + index_end = random.randint(0, index_start - index_bottom) + index_bottom + else: + index_end = random.randint(0, index_start - index_min) + index_min + + state = down + + # DIM + elif ( state == dim ): + flicker_msecs = random.randint(0, up_max_msecs - up_min_msecs) + up_min_msecs + flicker_start = current_time + index_start = index_end + index_end = random.randint(0, (index_max - index_start) ) + index_min + state = down + + # DIM_HOLD + elif ( state == dim_hold ): + if (current_time >= ( flicker_start + ( flicker_msecs / 1000) ) ): # dividing flicker_msecs by 1000 to convert to milliseconds + if ( state == bright_hold ): + state = bright + else: + state = dim + + # DOWN + elif ( state == down ): + if (current_time < (flicker_start + ( flicker_msecs / 1000 ) )): # dividing flicker_msecs by 1000 to convert to milliseconds + set_color(index_start + int ( ((index_end - index_start) * (((current_time - flicker_start) * 1.0) / flicker_msecs))) ) + else: + set_color(index_end) + + if (state == down): + if (random.randint(0,100) < dim_hold_percent): + flicker_start = current_time + flicker_msecs = random.randint(0, dim_hold_max_msecs - dim_hold_min_msecs) + dim_hold_min_msecs + state = dim_hold + else: + state = dim + else: + if (random.randint(0,100) < bright_hold_percent): + flicker_start = current_time + flicker_msecs = random.randint(0, bright_hold_max_msecs - bright_hold_min_msecs) + bright_hold_min_msecs + state = bright_hold + else: + state = bright diff --git a/LED_Candles/README.md b/LED_Candles/README.md new file mode 100644 index 000000000..765ee7c36 --- /dev/null +++ b/LED_Candles/README.md @@ -0,0 +1,4 @@ +# LED_Candles + +Code to accompany this tutorial: +https://learn.adafruit.com/led-candles-simple-easy-cheap