{"id":178,"date":"2022-12-23T05:35:40","date_gmt":"2022-12-23T05:35:40","guid":{"rendered":"https:\/\/trewest.dev\/blog\/?p=178"},"modified":"2023-12-05T09:34:45","modified_gmt":"2023-12-05T09:34:45","slug":"what-i-did-today-december-22-2022","status":"publish","type":"post","link":"https:\/\/trewest.dev\/blog\/index.php\/2022\/12\/23\/what-i-did-today-december-22-2022\/","title":{"rendered":"What I did today: December 22, 2022"},"content":{"rendered":"\n<p>Today I coded some LED strip stuff.  <\/p>\n\n\n\n<p>Specifically: I&#8217;ve been working on a gift for my grandmother.  It&#8217;s a multicolored LED lamp\/trophy thing.  It&#8217;s just supposed to be a cool gift nothing fancy.<\/p>\n\n\n\n<p>The housing is 3D printed in PLA, and PETG for the clear parts since my Clear PLA was giving me lots of trouble.  The code was developed in the course of a few hours, same with the design.<\/p>\n\n\n\n<p>There are slight issues with the design.  One of the major parts is that it&#8217;ll be 100% glued together since I didn&#8217;t engineer any snap fittings or anything fancy.  Just glue and some prayers that it sticks together.  Not my finest work but this was an afterthought project since I had already ordered something for my Grandmother but my own Mother insisted I make something for her instead.<\/p>\n\n\n\n<p>The code itself runs off of a ESP32 development board.  The board&#8217;s Micro USB header will be used for power and run a NEOPIXEL ARGB light strip for the lighting.  <\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"669\" height=\"689\" src=\"https:\/\/trewest.dev\/blog\/wp-content\/uploads\/2022\/12\/image-32.png\" alt=\"\" class=\"wp-image-179\" srcset=\"https:\/\/trewest.dev\/blog\/wp-content\/uploads\/2022\/12\/image-32.png 669w, https:\/\/trewest.dev\/blog\/wp-content\/uploads\/2022\/12\/image-32-291x300.png 291w\" sizes=\"auto, (max-width: 669px) 100vw, 669px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"715\" height=\"757\" src=\"https:\/\/trewest.dev\/blog\/wp-content\/uploads\/2022\/12\/image-33.png\" alt=\"\" class=\"wp-image-180\" srcset=\"https:\/\/trewest.dev\/blog\/wp-content\/uploads\/2022\/12\/image-33.png 715w, https:\/\/trewest.dev\/blog\/wp-content\/uploads\/2022\/12\/image-33-283x300.png 283w\" sizes=\"auto, (max-width: 715px) 100vw, 715px\" \/><\/figure>\n\n\n\n<pre class=\"wp-block-code\"><code>#include &lt;Arduino.h>\r\n#include &lt;FastLED.h>\r\n\r\n#define STRIP_SIZE 18 \/\/ Length of the LED Strip\r\n#define FPS 60 \/\/ Frames per second, speed is tied to FPS\r\nCRGB leds &#91;STRIP_SIZE]; \/\/ Creating the LEDS array\r\n\r\nint breatheCounter = 0;\r\nbool breatheState = false;\r\n\r\nint rainbowStart = 0;\r\nbool twinkleBools&#91;STRIP_SIZE];\r\nint twinkleBright&#91;STRIP_SIZE];\r\n\r\nint myTime = 0;\r\nint minsTillChange = 5;\r\nint myTimeTillChange = (FPS*60*minsTillChange);\r\n\r\nenum state \r\n{\r\n  pink,\r\n  twinkle,\r\n  pinkle,\r\n  breathe,\r\n  rainbow,\r\n  dazzle\r\n};\r\n\r\n\r\nstate loopstate = state::dazzle;\r\n\r\nvoid setup() {\r\n  \r\n  \/\/ put your setup code here, to run once:\r\n  FastLED.addLeds&lt;NEOPIXEL, 22>(leds, STRIP_SIZE);\r\n  Serial.begin(115200);\r\n  twinkleBools&#91;0] = true;\r\n  twinkleBools&#91;1] = !true;\r\n  twinkleBools&#91;2] = true;\r\n  twinkleBools&#91;3] = !true;\r\n  twinkleBools&#91;4] = !true;\r\n  twinkleBools&#91;5] = true;\r\n  twinkleBools&#91;6] = !true;\r\n  twinkleBools&#91;7] = true;\r\n  twinkleBools&#91;8] = !true;\r\n  twinkleBools&#91;9] = true;\r\n  twinkleBools&#91;10] = true;\r\n  twinkleBools&#91;11] = !true;\r\n  twinkleBools&#91;12] = true;\r\n  twinkleBools&#91;13] = !true;\r\n  twinkleBools&#91;14] = !true;\r\n  twinkleBools&#91;15] = !true;\r\n  twinkleBools&#91;16] = true;\r\n  twinkleBools&#91;17] = true;\r\n  twinkleBright&#91;0] = 20;\r\n  twinkleBright&#91;1] = 40;\r\n  twinkleBright&#91;2] = 50;\r\n  twinkleBright&#91;3] = 30;\r\n  twinkleBright&#91;4] = 90;\r\n  twinkleBright&#91;5] = 200;\r\n  twinkleBright&#91;6] = 150;\r\n  twinkleBright&#91;7] = 170;\r\n  twinkleBright&#91;8] = 60;\r\n  twinkleBright&#91;9] = 70;\r\n  twinkleBright&#91;10] = 10;\r\n  twinkleBright&#91;11] = 0;\r\n  twinkleBright&#91;12] = 250;\r\n  twinkleBright&#91;13] = 220;\r\n  twinkleBright&#91;14] = 120;\r\n  twinkleBright&#91;15] = 110;\r\n  twinkleBright&#91;16] = 80;\r\n  twinkleBright&#91;17] = 20;\r\n\r\n}\r\n\r\nvoid twinkleF() \r\n{\r\n  for (int i = 0; i&lt;STRIP_SIZE;i++) \r\n  {\r\n    if (twinkleBools&#91;i]) \r\n    {\r\n      twinkleBright&#91;i] +=10;\r\n      if (twinkleBright&#91;i] >= 230) \r\n      {\r\n        twinkleBools&#91;i] = false;\r\n      }\r\n    }\r\n    else \r\n    {\r\n      twinkleBright&#91;i] -=10;\r\n      if (twinkleBright&#91;i] &lt;= 0) \r\n      {\r\n        twinkleBools&#91;i] = true;\r\n      }\r\n    }\r\n\r\n    leds&#91;i] = CRGB(twinkleBright&#91;i],twinkleBright&#91;i],twinkleBright&#91;i]);\r\n  }\r\n}\r\n\r\nvoid pinkleF() \r\n{\r\n  for (int i = 0; i&lt;STRIP_SIZE;i++) \r\n  {\r\n    if (twinkleBools&#91;i]) \r\n    {\r\n      twinkleBright&#91;i] +=10;\r\n      if (twinkleBright&#91;i] >= 150) \r\n      {\r\n        twinkleBools&#91;i] = false;\r\n      }\r\n    }\r\n    else \r\n    {\r\n      twinkleBright&#91;i] -=10;\r\n      if (twinkleBright&#91;i] &lt;= 60) \r\n      {\r\n        twinkleBools&#91;i] = true;\r\n      }\r\n    }\r\n\r\n    leds&#91;i] = CRGB(twinkleBright&#91;i],twinkleBright&#91;i]\/6,twinkleBright&#91;i]\/6);\r\n  }\r\n}\r\n\r\nvoid pinkF() \r\n{\r\n  for (int i = 0; i&lt;STRIP_SIZE;i++) \r\n  {\r\n    leds&#91;i] = CRGB::DeepPink;\r\n  }\r\n}\r\n\r\nvoid breatheF() \r\n{\r\n  if (breatheState) \r\n  {\r\n    breatheCounter++;\r\n    if (breatheCounter >= 230) \r\n    {\r\n      breatheState=false;\r\n    }\r\n  }\r\n  else \r\n  {\r\n    breatheCounter--;\r\n    if (breatheCounter &lt;= 0) \r\n    {\r\n      breatheState=true;\r\n    }\r\n  }\r\n  CRGB col = CRGB(breatheCounter,breatheCounter,breatheCounter);\r\n  for (int i = 0; i&lt;STRIP_SIZE;i++) \r\n  {\r\n    leds&#91;i] = col;\r\n  }\r\n}\r\nint IntLerp(double one, double two, double percent) \r\n{\r\n  return one + percent *(two - one);\r\n}\r\nCRGB rainbowColor(int myInt) \r\n{\r\n  if (myInt > 0 &amp;&amp; myInt&lt;=100) \/\/ Red To Yellow\r\n  {\r\n    return CRGB( \r\n    IntLerp( 255, 255, (double) myInt\/100), \r\n    IntLerp(0, 216, (double) myInt\/100),\r\n    IntLerp(0, 0, (double) myInt\/100)\r\n    );\r\n  }\r\n  else if (myInt > 100 &amp;&amp; myInt&lt;=200) \/\/ Yellow to Green\r\n  {\r\n    myInt -= 100;\r\n    return CRGB( \r\n    IntLerp( 255, 0, (double) myInt\/100), \r\n    IntLerp(216, 255, (double) myInt\/100),\r\n    IntLerp(0, 33, (double) myInt\/100)\r\n    );\r\n  }\r\n  else if (myInt > 200 &amp;&amp; myInt&lt;=300) \/\/ Green to Blue\r\n  {\r\n    myInt -= 200;\r\n    return CRGB( \r\n    IntLerp( 0, 0, (double) myInt\/100), \r\n    IntLerp(255, 38, (double) myInt\/100),\r\n    IntLerp(33, 255, (double) myInt\/100)\r\n    );\r\n  }\r\n  else if (myInt > 300 &amp;&amp; myInt&lt;=400) \/\/ Blue to Purple\r\n  {\r\n    myInt -= 300;\r\n    return CRGB( \r\n    IntLerp( 0, 78, (double) myInt\/100), \r\n    IntLerp(38, 0, (double) myInt\/100),\r\n    IntLerp(255, 255, (double) myInt\/100)\r\n    );\r\n  }\r\n  else if (myInt > 400 &amp;&amp; myInt&lt;=500) \/\/ Purple to Red\r\n  {\r\n    myInt -= 400;\r\n    return CRGB( \r\n    IntLerp( 78, 255, (double) myInt\/100), \r\n    IntLerp(0, 0, (double) myInt\/100),\r\n    IntLerp(255, 0, (double) myInt\/100)\r\n    );\r\n  }\r\n\r\n  return CRGB::Red;\r\n\r\n}\r\nvoid rainbowF() \r\n{\r\n  rainbowStart++;\r\n  if (rainbowStart >= 499) \r\n  {\r\n    rainbowStart = 0;\r\n  }\r\n  CRGB col = rainbowColor(rainbowStart);\r\n\r\n  for (int i = 0; i&lt;STRIP_SIZE;i++) \r\n  {\r\n    leds&#91;i] = col;\r\n  }\r\n}\r\n  \r\nvoid dazzleF() \r\n{\r\n\r\n  if (rainbowStart >= 499) \r\n  {\r\n    rainbowStart = 0;\r\n  }\r\n\r\n  rainbowStart+=5;\r\n  int rain = rainbowStart;\r\n  for (int i = 0; i&lt;STRIP_SIZE;i++) \r\n  {\r\n    if (rain >= 499) \r\n    {\r\n      rain = 0;\r\n    }\r\n\r\n    leds&#91;i] = rainbowColor(rain);\r\n    rain+=10;\r\n  }\r\n}\r\n\r\n\r\nvoid loop() {\r\n  myTime++;\r\n  \r\n  switch (loopstate) \r\n  {\r\n    case state::pink: pinkF(); break;\r\n    case state::twinkle: twinkleF(); break;\r\n    case state::pinkle: pinkleF(); break;\r\n    case state::breathe: breatheF(); break;\r\n    case state::rainbow: rainbowF(); break;\r\n    case state::dazzle: dazzleF(); break;\r\n  }\r\n  \r\n  \r\n\r\n  \/\/ put your main code here, to run repeatedly:\r\n  FastLED.show();\r\n  if (myTime&lt;myTimeTillChange) \r\n  {\r\n    loopstate = state::pink;\r\n  } else if (myTime>= myTimeTillChange &amp;&amp; myTime &lt; myTimeTillChange*2) \r\n  {\r\n    loopstate = twinkle;\r\n  }else if (myTime>= myTimeTillChange*2 &amp;&amp; myTime &lt; myTimeTillChange*3) \r\n  {\r\n    loopstate = pinkle;\r\n  }else if (myTime>=myTimeTillChange*3 &amp;&amp; myTime &lt; myTimeTillChange*4) \r\n  {\r\n    loopstate = breathe;\r\n  }else if (myTime>=myTimeTillChange*4 &amp;&amp; myTime &lt; myTimeTillChange*5) \r\n  {\r\n    loopstate = rainbow;\r\n  }else if (myTime>=myTimeTillChange*5 &amp;&amp; myTime &lt; myTimeTillChange*6) \r\n  {\r\n    loopstate = dazzle;\r\n  }\r\n  else \r\n  {\r\n    loopstate = pink;\r\n    myTime = 0;\r\n  }\r\n  Serial.println(myTime);\r\n  delay(1000\/FPS);\r\n}\r\n\r\n<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>&#8230; I hacked together some stuff and prayed.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4,8],"tags":[28,26,16,27],"post_series":[],"class_list":["post-178","post","type-post","status-publish","format-standard","hentry","category-coding","category-project","tag-3d-printing","tag-arduino","tag-c","tag-led"],"_links":{"self":[{"href":"https:\/\/trewest.dev\/blog\/index.php\/wp-json\/wp\/v2\/posts\/178","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/trewest.dev\/blog\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/trewest.dev\/blog\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/trewest.dev\/blog\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/trewest.dev\/blog\/index.php\/wp-json\/wp\/v2\/comments?post=178"}],"version-history":[{"count":1,"href":"https:\/\/trewest.dev\/blog\/index.php\/wp-json\/wp\/v2\/posts\/178\/revisions"}],"predecessor-version":[{"id":181,"href":"https:\/\/trewest.dev\/blog\/index.php\/wp-json\/wp\/v2\/posts\/178\/revisions\/181"}],"wp:attachment":[{"href":"https:\/\/trewest.dev\/blog\/index.php\/wp-json\/wp\/v2\/media?parent=178"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/trewest.dev\/blog\/index.php\/wp-json\/wp\/v2\/categories?post=178"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/trewest.dev\/blog\/index.php\/wp-json\/wp\/v2\/tags?post=178"},{"taxonomy":"post_series","embeddable":true,"href":"https:\/\/trewest.dev\/blog\/index.php\/wp-json\/wp\/v2\/post_series?post=178"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}