Double transducer- from vibration to color

Overview of our double transducer

accelerometer; senses the vibration motor

Thermistor and the light bulb; transduces the vibration in to heat

LED; changes from purple to red depending on the heat level

Static State; the LED is purple

Heat generated based on the level vibration; the LED is now red

Description – 

We created a double transducer that takes in vibration signals and turns it into lamp brightness, which will then affect the thermistor and leads to color change from purple to red.

When the vibration gets higher, the lamp will be brighter, and it leads to temperature raising up around the thermistor; the thermistor will then send signals to the LED strip to change color from purple to red. When vibration stops, lamp turns off, temperature drops and the color goes back to red.

 

Process Images – 

getting the LED strip working

Combine two parts – Chloe blowing thermistor to cool it down

Getting the lamp to work

Discussion – 

Overall, the transducers we made are relatively easy to implement. Since we mainly need to deal with codes and the wiring is something similar to what we learnt in class, it is much simpler than those groups requires some physics knowledge. However, there are still some challenges during the process, especially in finding the right components that fit together. As a person who really don’t like reading instruction manuals (yes, no shame), this project taught me a lot about reading the labels and looking up manuals online to find out the correct ways to connect components together. I got a lot of instructor help to figure out the correct components and correct schematics hopefully next time I can improve a bit by being able to read the manuals figure out the wiring on my own.

The difficult part was struggling with the power source. Our laptop could not accept the transistor when it is connected, so we had to upload our code every time to the arduino board and unplug it, which made it hard to notice the change to the physical part whenever the code was updated. Also using the 12 volt power source was something that we never tried before, however, it was successful. It was hard to wire the lamp, transistor, and the power source together, yet with some help from our professor, it all made sense to us eventually. The accelerometer was the easiest part. We thought using the x value of the accelerometer to convert it into heat would be the best because we realized that the x value was the most-changing value after a few test plotting. Setting the range for x value was the hardest part. Depending on the range, the lamp could be too sensitive or too dull. However, we wrote a separate piece of code to test the ranges and then all we had left was to map it so that the x value will be on the same range as the lamp.

Schematics – 

 

Code submission – 

  1. <span class="com">/*
  2. Double transducer-vibration to color
  3. A double transducer that exchanges the sensed vibration into color.
  4. The vibration is sensed through an accelerometer, then the lightbulb is generated, the thermistor senses it, then the LED changes its color based on the strength.
  5. Based on the strength of the vibration, the color will change from violet to red.
  6. */</span><span class="pln">
  7. </span><span class="com">#include</span><span class="pln"> </span><span class="str"><PololuLedStrip.h></span><span class="pln">
  8. </span><span class="com">#include</span><span class="pln"> </span><span class="str"><Wire.h></span><span class="pln">
  9. </span><span class="com">#include</span><span class="pln"> </span><span class="str"><LiquidCrystal_I2C.h></span><span class="pln">
  10. </span><span class="com">/*-------LED------*/</span><span class="pln">
  11. </span><span class="com">// pin for LED strip</span><span class="pln">
  12. </span><span class="typ">PololuLedStrip</span><span class="pun"><</span><span class="lit">7</span><span class="pun">></span><span class="pln"> ledStrip</span><span class="pun">;</span><span class="pln">
  13. </span><span class="com">// number of LED on the strip</span><span class="pln">
  14. </span><span class="com">#define</span><span class="pln"> LED_COUNT </span><span class="lit">60</span><span class="pln">
  15. </span><span class="com">//an array of colors that is the length of LED_COUNT</span><span class="pln">
  16. rgb_color colors</span><span class="pun">[</span><span class="pln">LED_COUNT</span><span class="pun">];</span><span class="pln">
  17. </span><span class="com">//pin for lightbulb</span><span class="pln">
  18. </span><span class="kwd">const</span><span class="pln"> </span><span class="kwd">int</span><span class="pln"> LIGHTPIN </span><span class="pun">=</span><span class="pln"> </span><span class="lit">11</span><span class="pun">;</span><span class="pln">
  19. </span><span class="com">/*-----accelerometer----*/</span><span class="pln">
  20. </span><span class="kwd">const</span><span class="pln"> </span><span class="kwd">int</span><span class="pln"> XPIN </span><span class="pun">=</span><span class="pln"> A0</span><span class="pun">;</span><span class="pln">
  21. </span><span class="kwd">const</span><span class="pln"> </span><span class="kwd">int</span><span class="pln"> YPIN </span><span class="pun">=</span><span class="pln"> A1</span><span class="pun">;</span><span class="pln">
  22. </span><span class="kwd">const</span><span class="pln"> </span><span class="kwd">int</span><span class="pln"> ZPIN </span><span class="pun">=</span><span class="pln"> A2</span><span class="pun">;</span><span class="pln">
  23. </span><span class="com">/*-------Thermistor------*/</span><span class="pln">
  24. </span><span class="kwd">const</span><span class="pln"> </span><span class="kwd">int</span><span class="pln"> TEMPPIN </span><span class="pun">=</span><span class="pln"> A3</span><span class="pun">;</span><span class="pln">
  25. </span><span class="kwd">int</span><span class="pln"> temVal</span><span class="pun">;</span><span class="pln">
  26. </span><span class="com">//room temperature boundary</span><span class="pln">
  27. </span><span class="kwd">int</span><span class="pln"> UPBOUND </span><span class="pun">=</span><span class="pln"> </span><span class="lit">500</span><span class="pun">;</span><span class="pln">
  28. </span><span class="com">//hot temperature boundary</span><span class="pln">
  29. </span><span class="kwd">int</span><span class="pln"> LOWBOUND </span><span class="pun">=</span><span class="pln"> </span><span class="lit">420</span><span class="pun">;</span><span class="pln">
  30. </span><span class="com">/* Create an LCD display object called "screen" with I2C address 0x27
  31. which is 16 columns wide and 2 rows tall. You can use any name you'd like. */</span><span class="pln">
  32. </span><span class="typ">LiquidCrystal_I2C</span><span class="pln"> screen</span><span class="pun">(</span><span class="lit">0x27</span><span class="pun">,</span><span class="pln"> </span><span class="lit">16</span><span class="pun">,</span><span class="pln"> </span><span class="lit">2</span><span class="pun">);</span><span class="pln">
  33. </span><span class="kwd">int</span><span class="pln"> x </span><span class="pun">=</span><span class="pln"> </span><span class="lit">123</span><span class="pun">;</span><span class="pln">
  34. </span><span class="com">//record old accelerometer value</span><span class="pln">
  35. </span><span class="kwd">int</span><span class="pln"> oldX</span><span class="pun">;</span><span class="pln">
  36. </span><span class="kwd">int</span><span class="pln"> xVal</span><span class="pun">;</span><span class="pln">
  37. </span><span class="kwd">byte</span><span class="pln"> frowny</span><span class="pun">[]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  38. B00000</span><span class="pun">,</span><span class="pln">
  39. B11011</span><span class="pun">,</span><span class="pln">
  40. B11011</span><span class="pun">,</span><span class="pln">
  41. B00000</span><span class="pun">,</span><span class="pln">
  42. B00000</span><span class="pun">,</span><span class="pln">
  43. B01110</span><span class="pun">,</span><span class="pln">
  44. B10001</span><span class="pun">,</span><span class="pln">
  45. B00000
  46. </span><span class="pun">};</span><span class="pln">
  47. </span><span class="kwd">void</span><span class="pln"> setup</span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  48. </span><span class="com">// pins for lightbulb and accelerometer</span><span class="pln">
  49. pinMode </span><span class="pun">(</span><span class="pln">LIGHTPIN</span><span class="pun">,</span><span class="pln"> OUTPUT</span><span class="pun">);</span><span class="pln">
  50. pinMode</span><span class="pun">(</span><span class="pln">XPIN</span><span class="pun">,</span><span class="pln"> INPUT</span><span class="pun">);</span><span class="pln">
  51. pinMode</span><span class="pun">(</span><span class="pln">YPIN</span><span class="pun">,</span><span class="pln"> INPUT</span><span class="pun">);</span><span class="pln">
  52. pinMode</span><span class="pun">(</span><span class="pln">ZPIN</span><span class="pun">,</span><span class="pln"> INPUT</span><span class="pun">);</span><span class="pln">
  53. </span><span class="com">// initialize the screen (only need to do this once)</span><span class="pln">
  54. pinMode</span><span class="pun">(</span><span class="pln">TEMPPIN</span><span class="pun">,</span><span class="pln"> INPUT</span><span class="pun">);</span><span class="pln">
  55. </span><span class="typ">Serial</span><span class="pun">.</span><span class="kwd">begin</span><span class="pun">(</span><span class="lit">9600</span><span class="pun">);</span><span class="pln">
  56. xVal </span><span class="pun">=</span><span class="pln"> analogRead</span><span class="pun">(</span><span class="pln">XPIN</span><span class="pun">);</span><span class="pln">
  57. </span><span class="com">// initialize the screen (only need to do this once)</span><span class="pln">
  58. screen</span><span class="pun">.</span><span class="pln">init</span><span class="pun">();</span><span class="pln">
  59. </span><span class="com">// turn on the backlight to start</span><span class="pln">
  60. screen</span><span class="pun">.</span><span class="pln">backlight</span><span class="pun">();</span><span class="pln">
  61. delay</span><span class="pun">(</span><span class="lit">1000</span><span class="pun">);</span><span class="pln">
  62. </span><span class="com">//print constant letters on screen</span><span class="pln">
  63. screen</span><span class="pun">.</span><span class="pln">clear</span><span class="pun">();</span><span class="pln">
  64. screen</span><span class="pun">.</span><span class="pln">home</span><span class="pun">();</span><span class="pln">
  65. screen</span><span class="pun">.</span><span class="kwd">print</span><span class="pun">(</span><span class="str">"i:"</span><span class="pun">);</span><span class="pln">
  66. screen</span><span class="pun">.</span><span class="pln">setCursor</span><span class="pun">(</span><span class="lit">6</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">);</span><span class="pln">
  67. screen</span><span class="pun">.</span><span class="kwd">print</span><span class="pun">(</span><span class="str">"m:"</span><span class="pun">);</span><span class="pln">
  68. screen</span><span class="pun">.</span><span class="pln">setCursor</span><span class="pun">(</span><span class="lit">12</span><span class="pun">,</span><span class="pln"> </span><span class="lit">1</span><span class="pun">);</span><span class="pln">
  69. screen</span><span class="pun">.</span><span class="kwd">print</span><span class="pun">(</span><span class="str">"o:"</span><span class="pun">);</span><span class="pln">
  70. </span><span class="pun">}</span><span class="pln">
  71. </span><span class="kwd">void</span><span class="pln"> loop</span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  72. </span><span class="com">// put your main code here, to run repeatedly:</span><span class="pln">
  73. </span><span class="com">//get the temperature;</span><span class="pln">
  74. temVal </span><span class="pun">=</span><span class="pln"> analogRead</span><span class="pun">(</span><span class="pln">TEMPPIN</span><span class="pun">);</span><span class="pln">
  75. </span><span class="typ">Serial</span><span class="pun">.</span><span class="pln">println</span><span class="pun">(</span><span class="pln">temVal</span><span class="pun">);</span><span class="pln">
  76. </span><span class="com">//compares the difference between the old accelerometer x value and the new value</span><span class="pln">
  77. oldX </span><span class="pun">=</span><span class="pln"> xVal</span><span class="pun">;</span><span class="pln">
  78. xVal </span><span class="pun">=</span><span class="pln"> analogRead</span><span class="pun">(</span><span class="pln">XPIN</span><span class="pun">);</span><span class="pln">
  79. </span><span class="kwd">int</span><span class="pln"> dif </span><span class="pun">=</span><span class="pln"> abs</span><span class="pun">(</span><span class="pln">oldX </span><span class="pun">-</span><span class="pln"> xVal</span><span class="pun">);</span><span class="pln">
  80. </span><span class="kwd">int</span><span class="pln"> lightVal </span><span class="pun">=</span><span class="pln"> map</span><span class="pun">(</span><span class="pln">dif</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="lit">520</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="lit">255</span><span class="pun">);</span><span class="pln">
  81. </span><span class="com">//light is off in a static range, else it is on in a range</span><span class="pln">
  82. </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln"> dif </span><span class="pun">></span><span class="pln"> </span><span class="lit">10</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  83. analogWrite</span><span class="pun">(</span><span class="pln">LIGHTPIN</span><span class="pun">,</span><span class="pln"> dif</span><span class="pun">);</span><span class="pln">
  84. </span><span class="pun">}</span><span class="pln">
  85. </span><span class="kwd">else</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  86. analogWrite </span><span class="pun">(</span><span class="pln">LIGHTPIN</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">);</span><span class="pln">
  87. </span><span class="pun">}</span><span class="pln">
  88. </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">temVal </span><span class="pun">>=</span><span class="pln"> UPBOUND</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  89. temVal </span><span class="pun">=</span><span class="pln"> UPBOUND</span><span class="pun">;</span><span class="pln">
  90. </span><span class="pun">}</span><span class="pln">
  91. </span><span class="com">//determine upper bound</span><span class="pln">
  92. </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">temVal </span><span class="pun"><=</span><span class="pln"> LOWBOUND</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  93. temVal </span><span class="pun">=</span><span class="pln"> LOWBOUND</span><span class="pun">;</span><span class="pln">
  94. </span><span class="pun">}</span><span class="pln">
  95. </span><span class="com">//map it to the color range</span><span class="pln">
  96. </span><span class="kwd">int</span><span class="pln"> temMap </span><span class="pun">=</span><span class="pln"> map</span><span class="pun">(</span><span class="pln">temVal</span><span class="pun">,</span><span class="pln"> LOWBOUND</span><span class="pun">,</span><span class="pln"> UPBOUND</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="lit">1040</span><span class="pun">);</span><span class="pln">
  97. </span><span class="kwd">int</span><span class="pln"> h </span><span class="pun">=</span><span class="pln"> </span><span class="pun">(</span><span class="pln">temMap </span><span class="pun">>></span><span class="pln"> </span><span class="lit">2</span><span class="pun">)</span><span class="pln"> </span><span class="pun">%</span><span class="pln"> </span><span class="lit">360</span><span class="pun">;</span><span class="pln">
  98. </span><span class="com">//turn on LED 57,58,59</span><span class="pln">
  99. </span><span class="kwd">for</span><span class="pln"> </span><span class="pun">(</span><span class="typ">uint16_t</span><span class="pln"> i </span><span class="pun">=</span><span class="pln"> </span><span class="lit">57</span><span class="pun">;</span><span class="pln"> i </span><span class="pun"><</span><span class="pln"> LED_COUNT</span><span class="pun">;</span><span class="pln"> i</span><span class="pun">++)</span><span class="pln">
  100. </span><span class="pun">{</span><span class="pln">
  101. colors</span><span class="pun">[</span><span class="pln">i</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> hsvToRgb</span><span class="pun">(</span><span class="pln">h</span><span class="pun">,</span><span class="pln"> </span><span class="lit">255</span><span class="pun">,</span><span class="pln"> </span><span class="lit">255</span><span class="pun">);</span><span class="pln">
  102. </span><span class="pun">}</span><span class="pln">
  103. </span><span class="com">// Write the colors to the LED strip.</span><span class="pln">
  104. ledStrip</span><span class="pun">.</span><span class="pln">write</span><span class="pun">(</span><span class="pln">colors</span><span class="pun">,</span><span class="pln"> LED_COUNT</span><span class="pun">);</span><span class="pln">
  105. delay</span><span class="pun">(</span><span class="lit">50</span><span class="pun">);</span><span class="pln">
  106. </span><span class="com">// just count up to show x changing (the rest of the text will remain untouched)</span><span class="pln">
  107. screen</span><span class="pun">.</span><span class="pln">setCursor</span><span class="pun">(</span><span class="lit">2</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">);</span><span class="pln">
  108. screen</span><span class="pun">.</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">map</span><span class="pun">(</span><span class="pln">xVal</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="lit">525</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="lit">99</span><span class="pun">));</span><span class="pln">
  109. screen</span><span class="pun">.</span><span class="pln">setCursor</span><span class="pun">(</span><span class="lit">8</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">);</span><span class="pln">
  110. screen</span><span class="pun">.</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">map</span><span class="pun">(</span><span class="pln">lightVal</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="lit">255</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="lit">99</span><span class="pun">));</span><span class="pln">
  111. screen</span><span class="pun">.</span><span class="pln">setCursor</span><span class="pun">(</span><span class="lit">8</span><span class="pun">,</span><span class="pln"> </span><span class="lit">1</span><span class="pun">);</span><span class="pln">
  112. screen</span><span class="pun">.</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">map</span><span class="pun">(</span><span class="pln">temVal</span><span class="pun">,</span><span class="pln"> LOWBOUND</span><span class="pun">,</span><span class="pln"> </span><span class="lit">515</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="lit">99</span><span class="pun">));</span><span class="pln">
  113. screen</span><span class="pun">.</span><span class="pln">setCursor</span><span class="pun">(</span><span class="lit">14</span><span class="pun">,</span><span class="pln"> </span><span class="lit">1</span><span class="pun">);</span><span class="pln">
  114. screen</span><span class="pun">.</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">map</span><span class="pun">(</span><span class="pln">h</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="lit">359</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="lit">99</span><span class="pun">));</span><span class="pln">
  115. delay</span><span class="pun">(</span><span class="lit">200</span><span class="pun">);</span><span class="pln">
  116. </span><span class="pun">}</span><span class="pln">
  117. </span><span class="com">// hsv to rgb converter</span><span class="pln">
  118. rgb_color hsvToRgb</span><span class="pun">(</span><span class="typ">uint16_t</span><span class="pln"> h</span><span class="pun">,</span><span class="pln"> </span><span class="typ">uint8_t</span><span class="pln"> s</span><span class="pun">,</span><span class="pln"> </span><span class="typ">uint8_t</span><span class="pln"> v</span><span class="pun">)</span><span class="pln">
  119. </span><span class="pun">{</span><span class="pln">
  120. </span><span class="typ">uint8_t</span><span class="pln"> f </span><span class="pun">=</span><span class="pln"> </span><span class="pun">(</span><span class="pln">h </span><span class="pun">%</span><span class="pln"> </span><span class="lit">60</span><span class="pun">)</span><span class="pln"> </span><span class="pun">*</span><span class="pln"> </span><span class="lit">255</span><span class="pln"> </span><span class="pun">/</span><span class="pln"> </span><span class="lit">60</span><span class="pun">;</span><span class="pln">
  121. </span><span class="typ">uint8_t</span><span class="pln"> p </span><span class="pun">=</span><span class="pln"> </span><span class="pun">(</span><span class="lit">255</span><span class="pln"> </span><span class="pun">-</span><span class="pln"> s</span><span class="pun">)</span><span class="pln"> </span><span class="pun">*</span><span class="pln"> </span><span class="pun">(</span><span class="typ">uint16_t</span><span class="pun">)</span><span class="pln">v </span><span class="pun">/</span><span class="pln"> </span><span class="lit">255</span><span class="pun">;</span><span class="pln">
  122. </span><span class="typ">uint8_t</span><span class="pln"> q </span><span class="pun">=</span><span class="pln"> </span><span class="pun">(</span><span class="lit">255</span><span class="pln"> </span><span class="pun">-</span><span class="pln"> f </span><span class="pun">*</span><span class="pln"> </span><span class="pun">(</span><span class="typ">uint16_t</span><span class="pun">)</span><span class="pln">s </span><span class="pun">/</span><span class="pln"> </span><span class="lit">255</span><span class="pun">)</span><span class="pln"> </span><span class="pun">*</span><span class="pln"> </span><span class="pun">(</span><span class="typ">uint16_t</span><span class="pun">)</span><span class="pln">v </span><span class="pun">/</span><span class="pln"> </span><span class="lit">255</span><span class="pun">;</span><span class="pln">
  123. </span><span class="typ">uint8_t</span><span class="pln"> t </span><span class="pun">=</span><span class="pln"> </span><span class="pun">(</span><span class="lit">255</span><span class="pln"> </span><span class="pun">-</span><span class="pln"> </span><span class="pun">(</span><span class="lit">255</span><span class="pln"> </span><span class="pun">-</span><span class="pln"> f</span><span class="pun">)</span><span class="pln"> </span><span class="pun">*</span><span class="pln"> </span><span class="pun">(</span><span class="typ">uint16_t</span><span class="pun">)</span><span class="pln">s </span><span class="pun">/</span><span class="pln"> </span><span class="lit">255</span><span class="pun">)</span><span class="pln"> </span><span class="pun">*</span><span class="pln"> </span><span class="pun">(</span><span class="typ">uint16_t</span><span class="pun">)</span><span class="pln">v </span><span class="pun">/</span><span class="pln"> </span><span class="lit">255</span><span class="pun">;</span><span class="pln">
  124. </span><span class="typ">uint8_t</span><span class="pln"> r </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> g </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> b </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln">
  125. </span><span class="kwd">switch</span><span class="pln"> </span><span class="pun">((</span><span class="pln">h </span><span class="pun">/</span><span class="pln"> </span><span class="lit">60</span><span class="pun">)</span><span class="pln"> </span><span class="pun">%</span><span class="pln"> </span><span class="lit">6</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  126. </span><span class="kwd">case</span><span class="pln"> </span><span class="lit">0</span><span class="pun">:</span><span class="pln"> r </span><span class="pun">=</span><span class="pln"> v</span><span class="pun">;</span><span class="pln"> g </span><span class="pun">=</span><span class="pln"> t</span><span class="pun">;</span><span class="pln"> b </span><span class="pun">=</span><span class="pln"> p</span><span class="pun">;</span><span class="pln"> </span><span class="kwd">break</span><span class="pun">;</span><span class="pln">
  127. </span><span class="kwd">case</span><span class="pln"> </span><span class="lit">1</span><span class="pun">:</span><span class="pln"> r </span><span class="pun">=</span><span class="pln"> q</span><span class="pun">;</span><span class="pln"> g </span><span class="pun">=</span><span class="pln"> v</span><span class="pun">;</span><span class="pln"> b </span><span class="pun">=</span><span class="pln"> p</span><span class="pun">;</span><span class="pln"> </span><span class="kwd">break</span><span class="pun">;</span><span class="pln">
  128. </span><span class="kwd">case</span><span class="pln"> </span><span class="lit">2</span><span class="pun">:</span><span class="pln"> r </span><span class="pun">=</span><span class="pln"> p</span><span class="pun">;</span><span class="pln"> g </span><span class="pun">=</span><span class="pln"> v</span><span class="pun">;</span><span class="pln"> b </span><span class="pun">=</span><span class="pln"> t</span><span class="pun">;</span><span class="pln"> </span><span class="kwd">break</span><span class="pun">;</span><span class="pln">
  129. </span><span class="kwd">case</span><span class="pln"> </span><span class="lit">3</span><span class="pun">:</span><span class="pln"> r </span><span class="pun">=</span><span class="pln"> p</span><span class="pun">;</span><span class="pln"> g </span><span class="pun">=</span><span class="pln"> q</span><span class="pun">;</span><span class="pln"> b </span><span class="pun">=</span><span class="pln"> v</span><span class="pun">;</span><span class="pln"> </span><span class="kwd">break</span><span class="pun">;</span><span class="pln">
  130. </span><span class="kwd">case</span><span class="pln"> </span><span class="lit">4</span><span class="pun">:</span><span class="pln"> r </span><span class="pun">=</span><span class="pln"> t</span><span class="pun">;</span><span class="pln"> g </span><span class="pun">=</span><span class="pln"> p</span><span class="pun">;</span><span class="pln"> b </span><span class="pun">=</span><span class="pln"> v</span><span class="pun">;</span><span class="pln"> </span><span class="kwd">break</span><span class="pun">;</span><span class="pln">
  131. </span><span class="kwd">case</span><span class="pln"> </span><span class="lit">5</span><span class="pun">:</span><span class="pln"> r </span><span class="pun">=</span><span class="pln"> v</span><span class="pun">;</span><span class="pln"> g </span><span class="pun">=</span><span class="pln"> p</span><span class="pun">;</span><span class="pln"> b </span><span class="pun">=</span><span class="pln"> q</span><span class="pun">;</span><span class="pln"> </span><span class="kwd">break</span><span class="pun">;</span><span class="pln">
  132. </span><span class="pun">}</span><span class="pln">
  133. </span><span class="kwd">return</span><span class="pln"> rgb_color</span><span class="pun">(</span><span class="pln">r</span><span class="pun">,</span><span class="pln"> g</span><span class="pun">,</span><span class="pln"> b</span><span class="pun">);</span><span class="pln">
  134. </span><span class="pun">}</span>
<span class="com">/*
Double transducer-vibration to color
A double transducer that exchanges the sensed vibration into color.
The vibration is sensed through an accelerometer, then the lightbulb is generated, the thermistor senses it, then the LED changes its color based on the strength.
Based on the strength of the vibration, the color will change from violet to red.
*/</span><span class="pln">

</span><span class="com">#include</span><span class="pln"> </span><span class="str"><PololuLedStrip.h></span><span class="pln">
</span><span class="com">#include</span><span class="pln"> </span><span class="str"><Wire.h></span><span class="pln">
</span><span class="com">#include</span><span class="pln"> </span><span class="str"><LiquidCrystal_I2C.h></span><span class="pln">

</span><span class="com">/*-------LED------*/</span><span class="pln">
</span><span class="com">// pin for LED strip</span><span class="pln">
</span><span class="typ">PololuLedStrip</span><span class="pun"><</span><span class="lit">7</span><span class="pun">></span><span class="pln"> ledStrip</span><span class="pun">;</span><span class="pln">
</span><span class="com">// number of LED on the strip</span><span class="pln">
</span><span class="com">#define</span><span class="pln"> LED_COUNT </span><span class="lit">60</span><span class="pln">
</span><span class="com">//an array of colors that is the length of LED_COUNT</span><span class="pln">
rgb_color colors</span><span class="pun">[</span><span class="pln">LED_COUNT</span><span class="pun">];</span><span class="pln">

</span><span class="com">//pin for lightbulb</span><span class="pln">
</span><span class="kwd">const</span><span class="pln"> </span><span class="kwd">int</span><span class="pln"> LIGHTPIN </span><span class="pun">=</span><span class="pln"> </span><span class="lit">11</span><span class="pun">;</span><span class="pln">
</span><span class="com">/*-----accelerometer----*/</span><span class="pln">
</span><span class="kwd">const</span><span class="pln"> </span><span class="kwd">int</span><span class="pln"> XPIN </span><span class="pun">=</span><span class="pln"> A0</span><span class="pun">;</span><span class="pln">
</span><span class="kwd">const</span><span class="pln"> </span><span class="kwd">int</span><span class="pln"> YPIN </span><span class="pun">=</span><span class="pln"> A1</span><span class="pun">;</span><span class="pln">
</span><span class="kwd">const</span><span class="pln"> </span><span class="kwd">int</span><span class="pln"> ZPIN </span><span class="pun">=</span><span class="pln"> A2</span><span class="pun">;</span><span class="pln">

</span><span class="com">/*-------Thermistor------*/</span><span class="pln">
</span><span class="kwd">const</span><span class="pln"> </span><span class="kwd">int</span><span class="pln"> TEMPPIN </span><span class="pun">=</span><span class="pln"> A3</span><span class="pun">;</span><span class="pln">
</span><span class="kwd">int</span><span class="pln"> temVal</span><span class="pun">;</span><span class="pln">
</span><span class="com">//room temperature boundary</span><span class="pln">
</span><span class="kwd">int</span><span class="pln"> UPBOUND </span><span class="pun">=</span><span class="pln"> </span><span class="lit">500</span><span class="pun">;</span><span class="pln">
</span><span class="com">//hot temperature boundary</span><span class="pln">
</span><span class="kwd">int</span><span class="pln"> LOWBOUND </span><span class="pun">=</span><span class="pln"> </span><span class="lit">420</span><span class="pun">;</span><span class="pln">

</span><span class="com">/* Create an LCD display object called "screen" with I2C address 0x27
which is 16 columns wide and 2 rows tall. You can use any name you'd like. */</span><span class="pln">
</span><span class="typ">LiquidCrystal_I2C</span><span class="pln"> screen</span><span class="pun">(</span><span class="lit">0x27</span><span class="pun">,</span><span class="pln"> </span><span class="lit">16</span><span class="pun">,</span><span class="pln"> </span><span class="lit">2</span><span class="pun">);</span><span class="pln">

</span><span class="kwd">int</span><span class="pln"> x </span><span class="pun">=</span><span class="pln"> </span><span class="lit">123</span><span class="pun">;</span><span class="pln">
</span><span class="com">//record old accelerometer value</span><span class="pln">
</span><span class="kwd">int</span><span class="pln"> oldX</span><span class="pun">;</span><span class="pln">
</span><span class="kwd">int</span><span class="pln"> xVal</span><span class="pun">;</span><span class="pln">

</span><span class="kwd">byte</span><span class="pln"> frowny</span><span class="pun">[]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
B00000</span><span class="pun">,</span><span class="pln">
B11011</span><span class="pun">,</span><span class="pln">
B11011</span><span class="pun">,</span><span class="pln">
B00000</span><span class="pun">,</span><span class="pln">
B00000</span><span class="pun">,</span><span class="pln">
B01110</span><span class="pun">,</span><span class="pln">
B10001</span><span class="pun">,</span><span class="pln">
B00000
</span><span class="pun">};</span><span class="pln">

</span><span class="kwd">void</span><span class="pln"> setup</span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
</span><span class="com">// pins for lightbulb and accelerometer</span><span class="pln">
pinMode </span><span class="pun">(</span><span class="pln">LIGHTPIN</span><span class="pun">,</span><span class="pln"> OUTPUT</span><span class="pun">);</span><span class="pln">
pinMode</span><span class="pun">(</span><span class="pln">XPIN</span><span class="pun">,</span><span class="pln"> INPUT</span><span class="pun">);</span><span class="pln">
pinMode</span><span class="pun">(</span><span class="pln">YPIN</span><span class="pun">,</span><span class="pln"> INPUT</span><span class="pun">);</span><span class="pln">
pinMode</span><span class="pun">(</span><span class="pln">ZPIN</span><span class="pun">,</span><span class="pln"> INPUT</span><span class="pun">);</span><span class="pln">

</span><span class="com">// initialize the screen (only need to do this once)</span><span class="pln">
pinMode</span><span class="pun">(</span><span class="pln">TEMPPIN</span><span class="pun">,</span><span class="pln"> INPUT</span><span class="pun">);</span><span class="pln">

</span><span class="typ">Serial</span><span class="pun">.</span><span class="kwd">begin</span><span class="pun">(</span><span class="lit">9600</span><span class="pun">);</span><span class="pln">

xVal </span><span class="pun">=</span><span class="pln"> analogRead</span><span class="pun">(</span><span class="pln">XPIN</span><span class="pun">);</span><span class="pln">

</span><span class="com">// initialize the screen (only need to do this once)</span><span class="pln">
screen</span><span class="pun">.</span><span class="pln">init</span><span class="pun">();</span><span class="pln">

</span><span class="com">// turn on the backlight to start</span><span class="pln">
screen</span><span class="pun">.</span><span class="pln">backlight</span><span class="pun">();</span><span class="pln">

delay</span><span class="pun">(</span><span class="lit">1000</span><span class="pun">);</span><span class="pln">
</span><span class="com">//print constant letters on screen</span><span class="pln">
screen</span><span class="pun">.</span><span class="pln">clear</span><span class="pun">();</span><span class="pln">
screen</span><span class="pun">.</span><span class="pln">home</span><span class="pun">();</span><span class="pln">
screen</span><span class="pun">.</span><span class="kwd">print</span><span class="pun">(</span><span class="str">"i:"</span><span class="pun">);</span><span class="pln">

screen</span><span class="pun">.</span><span class="pln">setCursor</span><span class="pun">(</span><span class="lit">6</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">);</span><span class="pln">
screen</span><span class="pun">.</span><span class="kwd">print</span><span class="pun">(</span><span class="str">"m:"</span><span class="pun">);</span><span class="pln">

screen</span><span class="pun">.</span><span class="pln">setCursor</span><span class="pun">(</span><span class="lit">12</span><span class="pun">,</span><span class="pln"> </span><span class="lit">1</span><span class="pun">);</span><span class="pln">
screen</span><span class="pun">.</span><span class="kwd">print</span><span class="pun">(</span><span class="str">"o:"</span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="kwd">void</span><span class="pln"> loop</span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
</span><span class="com">// put your main code here, to run repeatedly:</span><span class="pln">

</span><span class="com">//get the temperature;</span><span class="pln">
temVal </span><span class="pun">=</span><span class="pln"> analogRead</span><span class="pun">(</span><span class="pln">TEMPPIN</span><span class="pun">);</span><span class="pln">
</span><span class="typ">Serial</span><span class="pun">.</span><span class="pln">println</span><span class="pun">(</span><span class="pln">temVal</span><span class="pun">);</span><span class="pln">

</span><span class="com">//compares the difference between the old accelerometer x value and the new value</span><span class="pln">
oldX </span><span class="pun">=</span><span class="pln"> xVal</span><span class="pun">;</span><span class="pln">
xVal </span><span class="pun">=</span><span class="pln"> analogRead</span><span class="pun">(</span><span class="pln">XPIN</span><span class="pun">);</span><span class="pln">
</span><span class="kwd">int</span><span class="pln"> dif </span><span class="pun">=</span><span class="pln"> abs</span><span class="pun">(</span><span class="pln">oldX </span><span class="pun">-</span><span class="pln"> xVal</span><span class="pun">);</span><span class="pln">
</span><span class="kwd">int</span><span class="pln"> lightVal </span><span class="pun">=</span><span class="pln"> map</span><span class="pun">(</span><span class="pln">dif</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="lit">520</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="lit">255</span><span class="pun">);</span><span class="pln">

</span><span class="com">//light is off in a static range, else it is on in a range</span><span class="pln">
</span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln"> dif </span><span class="pun">></span><span class="pln"> </span><span class="lit">10</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
analogWrite</span><span class="pun">(</span><span class="pln">LIGHTPIN</span><span class="pun">,</span><span class="pln"> dif</span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="kwd">else</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
analogWrite </span><span class="pun">(</span><span class="pln">LIGHTPIN</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">temVal </span><span class="pun">>=</span><span class="pln"> UPBOUND</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
temVal </span><span class="pun">=</span><span class="pln"> UPBOUND</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="com">//determine upper bound</span><span class="pln">
</span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">temVal </span><span class="pun"><=</span><span class="pln"> LOWBOUND</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
temVal </span><span class="pun">=</span><span class="pln"> LOWBOUND</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="com">//map it to the color range</span><span class="pln">
</span><span class="kwd">int</span><span class="pln"> temMap </span><span class="pun">=</span><span class="pln"> map</span><span class="pun">(</span><span class="pln">temVal</span><span class="pun">,</span><span class="pln"> LOWBOUND</span><span class="pun">,</span><span class="pln"> UPBOUND</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="lit">1040</span><span class="pun">);</span><span class="pln">
</span><span class="kwd">int</span><span class="pln"> h </span><span class="pun">=</span><span class="pln"> </span><span class="pun">(</span><span class="pln">temMap </span><span class="pun">>></span><span class="pln"> </span><span class="lit">2</span><span class="pun">)</span><span class="pln"> </span><span class="pun">%</span><span class="pln"> </span><span class="lit">360</span><span class="pun">;</span><span class="pln">

</span><span class="com">//turn on LED 57,58,59</span><span class="pln">
</span><span class="kwd">for</span><span class="pln"> </span><span class="pun">(</span><span class="typ">uint16_t</span><span class="pln"> i </span><span class="pun">=</span><span class="pln"> </span><span class="lit">57</span><span class="pun">;</span><span class="pln"> i </span><span class="pun"><</span><span class="pln"> LED_COUNT</span><span class="pun">;</span><span class="pln"> i</span><span class="pun">++)</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
colors</span><span class="pun">[</span><span class="pln">i</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> hsvToRgb</span><span class="pun">(</span><span class="pln">h</span><span class="pun">,</span><span class="pln"> </span><span class="lit">255</span><span class="pun">,</span><span class="pln"> </span><span class="lit">255</span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="com">// Write the colors to the LED strip.</span><span class="pln">
ledStrip</span><span class="pun">.</span><span class="pln">write</span><span class="pun">(</span><span class="pln">colors</span><span class="pun">,</span><span class="pln"> LED_COUNT</span><span class="pun">);</span><span class="pln">

delay</span><span class="pun">(</span><span class="lit">50</span><span class="pun">);</span><span class="pln">

</span><span class="com">// just count up to show x changing (the rest of the text will remain untouched)</span><span class="pln">
screen</span><span class="pun">.</span><span class="pln">setCursor</span><span class="pun">(</span><span class="lit">2</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">);</span><span class="pln">
screen</span><span class="pun">.</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">map</span><span class="pun">(</span><span class="pln">xVal</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="lit">525</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="lit">99</span><span class="pun">));</span><span class="pln">

screen</span><span class="pun">.</span><span class="pln">setCursor</span><span class="pun">(</span><span class="lit">8</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">);</span><span class="pln">
screen</span><span class="pun">.</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">map</span><span class="pun">(</span><span class="pln">lightVal</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="lit">255</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="lit">99</span><span class="pun">));</span><span class="pln">

screen</span><span class="pun">.</span><span class="pln">setCursor</span><span class="pun">(</span><span class="lit">8</span><span class="pun">,</span><span class="pln"> </span><span class="lit">1</span><span class="pun">);</span><span class="pln">
screen</span><span class="pun">.</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">map</span><span class="pun">(</span><span class="pln">temVal</span><span class="pun">,</span><span class="pln"> LOWBOUND</span><span class="pun">,</span><span class="pln"> </span><span class="lit">515</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="lit">99</span><span class="pun">));</span><span class="pln">

screen</span><span class="pun">.</span><span class="pln">setCursor</span><span class="pun">(</span><span class="lit">14</span><span class="pun">,</span><span class="pln"> </span><span class="lit">1</span><span class="pun">);</span><span class="pln">
screen</span><span class="pun">.</span><span class="kwd">print</span><span class="pun">(</span><span class="pln">map</span><span class="pun">(</span><span class="pln">h</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="lit">359</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="lit">99</span><span class="pun">));</span><span class="pln">
delay</span><span class="pun">(</span><span class="lit">200</span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="com">// hsv to rgb converter</span><span class="pln">
rgb_color hsvToRgb</span><span class="pun">(</span><span class="typ">uint16_t</span><span class="pln"> h</span><span class="pun">,</span><span class="pln"> </span><span class="typ">uint8_t</span><span class="pln"> s</span><span class="pun">,</span><span class="pln"> </span><span class="typ">uint8_t</span><span class="pln"> v</span><span class="pun">)</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
</span><span class="typ">uint8_t</span><span class="pln"> f </span><span class="pun">=</span><span class="pln"> </span><span class="pun">(</span><span class="pln">h </span><span class="pun">%</span><span class="pln"> </span><span class="lit">60</span><span class="pun">)</span><span class="pln"> </span><span class="pun">*</span><span class="pln"> </span><span class="lit">255</span><span class="pln"> </span><span class="pun">/</span><span class="pln"> </span><span class="lit">60</span><span class="pun">;</span><span class="pln">
</span><span class="typ">uint8_t</span><span class="pln"> p </span><span class="pun">=</span><span class="pln"> </span><span class="pun">(</span><span class="lit">255</span><span class="pln"> </span><span class="pun">-</span><span class="pln"> s</span><span class="pun">)</span><span class="pln"> </span><span class="pun">*</span><span class="pln"> </span><span class="pun">(</span><span class="typ">uint16_t</span><span class="pun">)</span><span class="pln">v </span><span class="pun">/</span><span class="pln"> </span><span class="lit">255</span><span class="pun">;</span><span class="pln">
</span><span class="typ">uint8_t</span><span class="pln"> q </span><span class="pun">=</span><span class="pln"> </span><span class="pun">(</span><span class="lit">255</span><span class="pln"> </span><span class="pun">-</span><span class="pln"> f </span><span class="pun">*</span><span class="pln"> </span><span class="pun">(</span><span class="typ">uint16_t</span><span class="pun">)</span><span class="pln">s </span><span class="pun">/</span><span class="pln"> </span><span class="lit">255</span><span class="pun">)</span><span class="pln"> </span><span class="pun">*</span><span class="pln"> </span><span class="pun">(</span><span class="typ">uint16_t</span><span class="pun">)</span><span class="pln">v </span><span class="pun">/</span><span class="pln"> </span><span class="lit">255</span><span class="pun">;</span><span class="pln">
</span><span class="typ">uint8_t</span><span class="pln"> t </span><span class="pun">=</span><span class="pln"> </span><span class="pun">(</span><span class="lit">255</span><span class="pln"> </span><span class="pun">-</span><span class="pln"> </span><span class="pun">(</span><span class="lit">255</span><span class="pln"> </span><span class="pun">-</span><span class="pln"> f</span><span class="pun">)</span><span class="pln"> </span><span class="pun">*</span><span class="pln"> </span><span class="pun">(</span><span class="typ">uint16_t</span><span class="pun">)</span><span class="pln">s </span><span class="pun">/</span><span class="pln"> </span><span class="lit">255</span><span class="pun">)</span><span class="pln"> </span><span class="pun">*</span><span class="pln"> </span><span class="pun">(</span><span class="typ">uint16_t</span><span class="pun">)</span><span class="pln">v </span><span class="pun">/</span><span class="pln"> </span><span class="lit">255</span><span class="pun">;</span><span class="pln">
</span><span class="typ">uint8_t</span><span class="pln"> r </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> g </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> b </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln">
</span><span class="kwd">switch</span><span class="pln"> </span><span class="pun">((</span><span class="pln">h </span><span class="pun">/</span><span class="pln"> </span><span class="lit">60</span><span class="pun">)</span><span class="pln"> </span><span class="pun">%</span><span class="pln"> </span><span class="lit">6</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
</span><span class="kwd">case</span><span class="pln"> </span><span class="lit">0</span><span class="pun">:</span><span class="pln"> r </span><span class="pun">=</span><span class="pln"> v</span><span class="pun">;</span><span class="pln"> g </span><span class="pun">=</span><span class="pln"> t</span><span class="pun">;</span><span class="pln"> b </span><span class="pun">=</span><span class="pln"> p</span><span class="pun">;</span><span class="pln"> </span><span class="kwd">break</span><span class="pun">;</span><span class="pln">
</span><span class="kwd">case</span><span class="pln"> </span><span class="lit">1</span><span class="pun">:</span><span class="pln"> r </span><span class="pun">=</span><span class="pln"> q</span><span class="pun">;</span><span class="pln"> g </span><span class="pun">=</span><span class="pln"> v</span><span class="pun">;</span><span class="pln"> b </span><span class="pun">=</span><span class="pln"> p</span><span class="pun">;</span><span class="pln"> </span><span class="kwd">break</span><span class="pun">;</span><span class="pln">
</span><span class="kwd">case</span><span class="pln"> </span><span class="lit">2</span><span class="pun">:</span><span class="pln"> r </span><span class="pun">=</span><span class="pln"> p</span><span class="pun">;</span><span class="pln"> g </span><span class="pun">=</span><span class="pln"> v</span><span class="pun">;</span><span class="pln"> b </span><span class="pun">=</span><span class="pln"> t</span><span class="pun">;</span><span class="pln"> </span><span class="kwd">break</span><span class="pun">;</span><span class="pln">
</span><span class="kwd">case</span><span class="pln"> </span><span class="lit">3</span><span class="pun">:</span><span class="pln"> r </span><span class="pun">=</span><span class="pln"> p</span><span class="pun">;</span><span class="pln"> g </span><span class="pun">=</span><span class="pln"> q</span><span class="pun">;</span><span class="pln"> b </span><span class="pun">=</span><span class="pln"> v</span><span class="pun">;</span><span class="pln"> </span><span class="kwd">break</span><span class="pun">;</span><span class="pln">
</span><span class="kwd">case</span><span class="pln"> </span><span class="lit">4</span><span class="pun">:</span><span class="pln"> r </span><span class="pun">=</span><span class="pln"> t</span><span class="pun">;</span><span class="pln"> g </span><span class="pun">=</span><span class="pln"> p</span><span class="pun">;</span><span class="pln"> b </span><span class="pun">=</span><span class="pln"> v</span><span class="pun">;</span><span class="pln"> </span><span class="kwd">break</span><span class="pun">;</span><span class="pln">
</span><span class="kwd">case</span><span class="pln"> </span><span class="lit">5</span><span class="pun">:</span><span class="pln"> r </span><span class="pun">=</span><span class="pln"> v</span><span class="pun">;</span><span class="pln"> g </span><span class="pun">=</span><span class="pln"> p</span><span class="pun">;</span><span class="pln"> b </span><span class="pun">=</span><span class="pln"> q</span><span class="pun">;</span><span class="pln"> </span><span class="kwd">break</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="kwd">return</span><span class="pln"> rgb_color</span><span class="pun">(</span><span class="pln">r</span><span class="pun">,</span><span class="pln"> g</span><span class="pun">,</span><span class="pln"> b</span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span>